在Yii2中,语言翻译在tutorial中描述。语言环境在documentation of the ICU project中进一步说明。
对于德语翻译,有几种定义:
de-DE
代表德国de-CH
de-AT
为奥地利但是每种语言都有其他复杂性:"你":" Sie"和"杜"。事实上,许多文本消息是不同的,例如, "这是你的信息"转换为" Das ist Ihre Nachricht"和#34; Das ist Deine Nachricht"。
在网络应用程序中,使用两种翻译版本:Facebook翻译为" Du",亚马逊翻译为" Sie"。
如何处理这些不同的语言版本?
我们是否需要额外的德语" de-DU"?是否有最佳实践?
修改
我希望两种语言分开保存。在编写模块时,模块必须在" Du"和" Sie"环境。所以这是两种不同的语言。
答案 0 :(得分:1)
两者" Sie"和"杜"是完全相同的区域设置的一部分。
它们不是ICU意义上的变体,而是您是否希望以正式或非正式方式解决用户问题。
您将面临许多其他语言的问题,如西班牙语或日语。
答案 1 :(得分:1)
创建虚拟语言不是一个好选择,它会给其他翻译带来困惑和问题。如果您想提供2个版本的翻译,您应该使用类别:
$mode = 'formal';
Yii::t('modules/MyModule/' . $mode, 'This is your message');
您可以在模块级别处理此问题:
class MyModule extends \yii\base\Module {
const TRANSLATION_MODE_FORMAL = 'formal';
const TRANSLATION_MODE_UNFORMAL = 'unformal';
public $translationMode = self::TRANSLATION_MODE_UNFORMAL;
public function init() {
parent::init();
$this->registerTranslations();
}
public function registerTranslations() {
Yii::$app->i18n->translations['modules/MyModule/*'] = [
'class' => \yii\i18n\PhpMessageSource::class,
'sourceLanguage' => 'en-US',
'basePath' => __DIR__ . '/messages/' . $this->translationMode,
];
}
public static function t($category, $message, $params = [], $language = null) {
return Yii::t('modules/MyModule/' . $category, $message, $params, $language);
}
}
在应用程序配置级别配置模式:
'modules' => [
'mymodule' => [
'class' => MyModule::class,
'translationMode' => 'formal',
],
],
使用模块助手进行翻译:
MyModule::t('category', 'This is your message');