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

Yii2翻译动态内容的最佳实践,yii2,yii2-advanced-app,Yii2,Yii2 Advanced App,任何人都可以与Yii2分享自己实施多语言网站的经验和最佳实践吗?我想翻译存储在数据库中的用户输入。例如,文章的名称可能有三种不同的语言,正文和一些可翻译属性 Yii2是否有内置功能来翻译动态内容?或者我应该使用下面这些第三方扩展: 您的帮助将不胜感激。使用Google translator API或Yandex API来实现多种语言的平滑翻译。 我在git上找到的链接很少 谷歌Api是一项付费服务,但是如果你是第一次使用谷歌Api的用户,你可以获得12个月的免费积分。好吧,我只能根据

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

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


您的帮助将不胜感激。

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


谷歌Api是一项付费服务,但是如果你是第一次使用谷歌Api的用户,你可以获得12个月的免费积分。好吧,我只能根据我所做的告诉你我的观点

翻译有很多地方

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

    i18n基于转换视图、模型中的字符串,在某些情况下,如在引导类中

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

    现在,如果您翻译stings,您将需要翻译路由,以便在更改语言时使用/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);
        }
    }
    
    记住在配置文件«i.e.web.php»中引导类

    'bootstrap' => [
        'log',
        'app\base\settings',
    ],
    
    最后,要翻译数据库中的文本,您可能需要创建一个支持翻译文本的表,如:

    CREATE TABLE articles (
       id INT,
       title_en VARCHAR(20),
       title_es VARCHAR(20)
    );
    
    因此,当你调用你的应用程序时,你可以在操作中使用类似于以下内容的方式提取数据(仅举一个简单的示例):

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

    或在以下视图中:

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


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

    请参考@vishub的链接,该答案不处理动态内容。我使用yii2 translate manager,它工作得很好,但它不处理动态内容。请简要说明您提供的链接中解释了什么,以防它们死亡。
    <p class="lead"><?=$articles['title_'.$lang]?></p>