我在使用 gettext 时遇到问题。
这是我设置语言环境的方式:
$lang = 'romanian';
putenv("LANG=$lang");
$smarty->assign('lang',$lang);
setlocale(LC_ALL, $lang);
if (setlocale(LC_ALL, $lang)==false) print ' false'; else print setlocale(LC_ALL, $lang);
bindtextdomain("messages", realpath("../locale"));
textdomain("messages");
这会打印 Romanian_Romania.1250
,所以我想 setlocale 函数运行正常。
我的 .tpl 文件中的示例:
{_('Login')}:<br>
<b style="color:blue;">{$user.name}</b>
<br>
<a href="logout.php">{_('Logout')}</a>
我在 \locale
文件夹中创建了一些带有翻译的文件夹。 sk_SK
是我的默认语言 - 斯洛伐克语和一些罗马尼亚语,例如:romanian
、ro_RO
、ro_RO.1250
, Romanian_Romania
, Romanian_Romania.1250
。它们每个都包含一个带有翻译的 pot 文件 - \LC_MESSAGES\messages.pot
。
发生的事情是:文件夹 sk_SK
中的任何翻译都会被翻译。如果我重命名文件夹,我就能正确翻译所有内容。但是无论我做什么,都不会占用其他文件夹。我处理这个问题已经有一段时间了,我尝试了几种语言设置和很多不同的文件夹名称。
示例 1:
在 sk_SK 文件夹中,我有 pot 文件,其中包含字符串 'Login' - 'SKSKSK' 的翻译
在 ro_RO 文件夹中,我有 pot 文件,其中包含字符串 'Login' - 'RORORO' 的翻译
在浏览器中我看到“SKSKSK”
示例 2:
在 sk_SK 文件夹中,我有 pot 文件,其中包含字符串 'Login' - 'RORORO' 的翻译
在 ro_RO 文件夹中,我有 pot 文件,其中包含字符串 'Login' - 'SKSKSK' 的翻译
在浏览器中我看到“RORORO”
请问是不是和Smarty有关。你有什么想法吗?
最佳答案
阅读它并查看下面的 URL,我认为它对您很有帮助。
What to use for localization (php/smarty/pear application)?
要不依赖于 php 扩展的可用性,您应该回退到 http://launchpad.net/php-gettext它提供了 gettext 的纯 php 实现。
gettext 还有一个很大的优势,那就是有许多工具可以轻松翻译这些文件。
https://stackoverflow.com/questions/12249966/