我在使用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文件夹中的,我有一个包含字符串'Login'的翻译的文件 - 'SKSKSK'
在ro_RO文件夹中,我有一个包含翻译字符串'的文件'登录' - 'RORORO'
浏览器中的我看到'SKSKSK'
示例2:
在sk_SK文件夹中的,我有一个包含字符串'Login'的翻译的pot文件 - 'RORORO'
在ro_RO文件夹中,我有一个包含字符串'Login'的翻译的文件 - 'SKSKSK'
在浏览器中我看到'RORORO'我想知道问题是否与Smarty有关。你有什么想法吗?
答案 0 :(得分:1)
阅读并查看以下网址我认为这对您非常有帮助。
What to use for localization (php/smarty/pear application)?
要不依赖于php扩展的可用性,你应该回到http://launchpad.net/php-gettext,它提供了一个纯粹的gettext实现。
gettext还有一个很大的优势,即存在许多工具可以轻松翻译这些文件。