我有一个用Yii 1.x编写的双语(英语和波兰语)应用程序。基本语言为英语(sourceLangage
),当前语言(language
)由用户控制。
我应该如何翻译,使用Yii::t
字符串,这些字符串在英语中没有使用,但应该在波兰语中显示?我无法拨打Yii:t('app', '');
,对吧?
答案 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特别联系。