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

Translating texts, that appear only in one language

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

我应该如何使用 Yii::t 翻译未在英语中使用但在波兰语中可见的字符串?我不能打电话给 Yii:t('app', '');,对吗?

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

['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') : '' ?>

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

我会将 "strings not used in English" 归类为仅与一种或另一种语言相关的整段内容;例如,对于一个在一种文化中 "foreign" 但在另一种文化中很自然的概念,您可能需要一个额外的解释性段落,或者您可能需要在一个国家而非另一个国家显示某些法律措辞。在这些情况下,它并不是真正的 "translation",而是条件内容。因此,基于当前语言的 if 语句是自然的方式,或类似的等价物(例如 include "legal.$lang.html")。

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

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

此日期格式字符串 d F Y 可能需要本地化为波兰语的 d F Y \r.。请注意,date 不能 本地化日期。如果可能的话,您应该使用 IntlDateFormatter class, and typically you'd use constants for different "kinds" of date formats, like IntlDateFormatter::MEDIUM (Jan 12, 1952), IntlDateFormatter::SHORT (12/13/52) etc. Otherwise, strftime 挂钩到语言环境系统,并且能够基于语言环境格式化日期。我不知道具体如何与 Yii 结合。