翻译仅以一种语言出现的文本

时间:2015-03-16 14:20:48

标签: php yii localization translation

我有一个用Yii 1.x编写的双语(英语和波兰语)应用程序。基本语言为英语(sourceLangage),当前语言(language)由用户控制。

我应该如何翻译,使用Yii::t字符串,这些字符串在英语中没有使用,但应该在波兰语中显示?我无法拨打Yii:t('app', '');,对吧?

2 个答案:

答案 0 :(得分:1)

您不能像Yii:t('app', '');那样使用,因为作为源代码,您必须提供一些独特的符号(关键字)。您可以尝试这样的定义所有未定义的翻译,如

['undefined_1' => 'Correct translation', 'undefined_2 => 'Another correct translation', ... , 'undefined_n' => 'More other translation'];

使用

之类的代码

<?= preg_match("/undefined_/", Yii:t('app', 'undefined_n')) ? Yii:t('app', 'undefined_n') : '' ?>

也许它不是最好的解决方案,但它是一个版本。

答案 1 :(得分:1)

我会将“未使用英语的字符串”分类为整段,只与一种语言或另一种语言相关;例如,对于在一种文化中“外来”但在另一种文化中是自然的概念,您可能需要一个额外的解释性段落,或者您可能需要在一个国家而不是另一个国家展示某些法律措辞。在这些情况下,它不是真正的“翻译”,而是有条件的内容。因此,基于当前语言的if语句是自然的方式或类似的等价物(例如include "legal.$lang.html")。

您在评论中提到的具有不同日期格式的具体示例,只是本地化的经典案例,常规翻译功能可以正常使用:

echo date(Yii:t('d F Y'));

此日期格式字符串d F Y可能需要在波兰语中本地化为d F Y \r.。请注意,date 无法本地化日期。如果可能的话,你应该使用IntlDateFormatter类,通常你会使用常量来表示日期格式的不同“类型”,例如IntlDateFormatter::MEDIUM(1952年1月12日),{{1} }(12/13/52)等。否则,strftime挂钩到语言环境系统,并能够基于日期语言环境设置格式。我不知道如何与Yii特别联系。