Yii2最佳实践翻译动态内容

时间:2016-06-13 10:51:40

标签: yii2 yii2-advanced-app

任何人都可以分享使用Yii2实现多语言网站的经验和最佳实践吗?我想要翻译存储在数据库中的用户输入。例如文章,其名称可能有三种不同的语言,正文和一些可翻译的属性。

Yii2是否具有内置功能来翻译动态内容?或者我应该使用下面的第三方扩展程序:

https://github.com/creocoder/yii2-translateable

https://github.com/LAV45/yii2-translated-behavior

https://github.com/lajax/yii2-translate-manager

我们将不胜感激。

2 个答案:

答案 0 :(得分:1)

好吧,我只能根据我所做的事情给你我的观点。

有工作翻译的地方

  1. 使用i18n和消息系统管理的非动态字符串 yii,这将为您提供静态内容。
  2. 使用引导类动态处理已转换的路由,这允许您在构建应用程序时构建此路径。
  3. 使用包含支持翻译的列的表格,例如'title_en,title_es',以及您需要翻译的内容。实际上,在您的管理界面中,您可能希望使用yandex之类的内容来帮助您将内容翻译为此字段。
  4. 现在我将解释:

    i18n Message Translation基于翻译视图,模型中的字符串,在某些情况下,如在自举类中。

    您将使用Yii::t('app/main', 'Your name is {0}'作为示例来翻译存储在消息php文件中的字符串。

    现在,如果您翻译蜇,您将需要翻译路线,以便在更改语言时使用/ articles和/ articulos等路线。 为此,您将构建一个实现BootstrapInterface的类,该类将从引导您的应用程序的过程中调用。

    所以这是我用于此

    的settings.php的一个例子
    namespace app\base;
    
    use Yii;
    use yii\base\BootstrapInterface;
    
    class settings implements BootstrapInterface {
    
        public function __construct() { }
    
        public function bootstrap($app) {
    
            /// Dynamic translated routes
    
            $t_articles = Yii::t('app/route', 'articles');
    
            $app->getUrlManager()->addRules([
                '/'.$t_articles => '/articles',
            ], false);
        }
    }
    

    请记住在配置文件中引导该类«即web.php»

    'bootstrap' => [
        'log',
        'app\base\settings',
    ],
    

    最后要翻译数据库中的文本,您可能需要创建一个支持翻译文本的表格,如:

    CREATE TABLE articles (
       id INT,
       title_en VARCHAR(20),
       title_es VARCHAR(20)
    );
    

    因此,当您调用应用程序时,您可以使用类似以下内容的操作来提取数据(只是一个简单的示例):

    $articles = ArticlesA::find()->where(['id' => 1])->one();
    $lang = $this->module->language;
    return $thi
    

    s-> render('index',['articles'=> $ articles,'lang'=> $ lang]);

    或在视图中:

    <p class="lead"><?=$articles['title_'.$lang]?></p>
    

    我希望这能解释我翻译应用的方式。

答案 1 :(得分:0)

使用Google翻译器API或Yandex API来平滑翻译多种语言。 我在git上找到的链接很少

https://github.com/borodulin/yii2-i18n-google

Tutorial

RichWeber/yii2-google-translate-api

Google Api是一项付费服务​​,但如果您的首次使用

,您可以获得12个月的免费赠送金额