Yii2 翻译动态内容的最佳实践

Yii2 best practices translating dynamic content

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

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

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

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

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

您的帮助将不胜感激。


好吧,我只能根据我所做的来告诉你我的观点。

有工作的地方翻译

  • 使用 i18n 和消息系统管理的非动态字符串来自
    yii,这将帮助您处理静态内容。
  • 使用引导类动态处理翻译后的路由,允许您在构建应用程序时构建此路由。
  • 并使用包含支持翻译的列的表,如 \\'title_en、title_es\\',以及您需要翻译的尽可能多的列。实际上,在您的管理界面中,您可能希望使用 yandex 之类的工具来帮助您将内容翻译到此字段。
  • 现在我将解释:

    i18n 消息翻译基于翻译视图、模型中的字符串,在某些情况下,例如在引导类中。

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

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

    所以这是我用于此的 settings.php 的一个示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    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??

    1
    2
    3
    4
    'bootstrap' => [
        'log',
        'app\\base\\settings',
    ],

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

    1
    2
    3
    4
    5
    CREATE TABLE articles (
       id INT,
       title_en VARCHAR(20),
       title_es VARCHAR(20)
    );

    因此,当您调用您的应用程序时,您可以在操作上使用类似以下内容的方式提取数据(仅作为一个简单示例):

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

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

    或在视图中为:

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

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


    使用 Google 翻译 API 或 Yandex API 来顺利翻译多种语言。
    我在 git

    上找到的几个链接

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

    教程

    RichWeber/yii2-google-translate-api

    Google Api 是一项付费服务??,但如果您是第一次使用,您可以获得 12 个月的免费信用额度