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
您的帮助将不胜感激。
好吧,我只能根据我所做的来告诉你我的观点。
有工作的地方翻译
yii,这将帮助您处理静态内容。
现在我将解释:
i18n 消息翻译基于翻译视图、模型中的字符串,在某些情况下,例如在引导类中。
您将使用
现在,如果您翻译 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 个月的免费信用额度