yii2 i18n不使用按钮
我正在尝试将i18n设置到我的网站中。我做了如下所有配置: common/config/main.phpyii2 i18n不使用按钮,yii2,internationalization,Yii2,Internationalization,我正在尝试将i18n设置到我的网站中。我做了如下所有配置: common/config/main.php 'language' => 'uz-UZ', 'sourceLanguage' => 'en-US', // ... 'components' => [ //... 'i18n' => [ 'translations' => [ 'app*' => [ 'class' =>
'language' => 'uz-UZ',
'sourceLanguage' => 'en-US',
// ...
'components' => [
//...
'i18n' => [
'translations' => [
'app*' => [
'class' => 'yii\i18n\PhpMessageSource',
//'basePath' => '@app/messages',
//'sourceLanguage' => 'en-US',
'fileMap' => [
'app' => 'app.php',
'app/error' => 'error.php',
],
],
],
],
//...
目录:
- common
-messages
-en-EN
app.php
-ru-RU
app.php
ru/app.php文件:
return [
'Bosh sahifa' => 'Домашная страница'
];
当我把\Yii::$app->language='ru'
放入layouts/main.php文件时,它就工作了。但当我使用按钮来改变语言时,i18n不起作用。
layouts/main.php中按钮的代码:
<div>
<a href="<?= Url::to(['site/lang', 'lang' => 'uz']) ?>">uz</a>
<a href="<?= Url::to(['site/lang', 'lang' => 'ru']) ?>">ru</a>
<a href="<?= Url::to(['site/lang', 'lang' => 'en']) ?>">en</a>
</div>
求求你,救命 您没有将语言设置(针对给定客户端)存储在任何位置。事实上,只有当打开
actionLang()
时,语言才会更改,但它不会工作,因为您正在使用$this->goBack()
(其中没有传递$lang参数)立即重定向到上一页
我建议您阅读以下有关语言检测的文档:
简单地说:在第节中,您可以将语言设置存储在用户cookie或数据库中。在应用程序引导中,您获取语言首选项,并将其设置到应用程序中
打开应用程序配置并将以下代码添加到boostrap
部分:
return [
'bootstrap' => [
[
'class' => 'app\components\LanguageSelector',
'supportedLanguages' => ['en_US', 'ru_RU'],
],
],
// ...
];
然后创建LanguageSelector
类并编写如下内容:
名称空间应用程序\组件
use yii\base\BootstrapInterface;
class LanguageSelector implements BootstrapInterface
{
public $supportedLanguages = [];
public function bootstrap($app)
{
$preferredLanguage = isset($app->request->cookies['language']) ? (string)$app->request->cookies['language'] : null;
if (empty($preferredLanguage)) {
$preferredLanguage = $app->request->getPreferredLanguage($this->supportedLanguages);
}
$app->language = $preferredLanguage;
}
}
更新 您还可以查看扩展,它可以使您的应用程序更易于管理语言。
您只需将扩展组件添加到配置文件中,就可以使用以下链接轻松更改应用程序语言:
<?= $url = Url::to(['demo/action', 'language' => 'fr']) ?>
<?= Html::a('Click', ['demo/action', 'language' => 'fr']) ?>
请注意,它将在URL中显示语言,如
/fr/demo/action
,这对于SEO非常有用可能重复您链接的页面中给出的我已更改的语言。现在它只适用于layout/main.php,而不适用于其他页面,如index.php或view.phpThank!它真的帮助了我
<?= $url = Url::to(['demo/action', 'language' => 'fr']) ?>
<?= Html::a('Click', ['demo/action', 'language' => 'fr']) ?>