德国的Yii2语言代码

时间:2018-04-28 12:13:05

标签: php yii2 translation

在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"环境。所以这是两种不同的语言。

2 个答案:

答案 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');