Smarty gettext本地化

时间:2012-09-03 14:41:13

标签: php smarty gettext setlocale

我在使用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是我的默认语言 - 斯洛伐克语和罗马尼亚语的几种语言,例如:romanianro_ROro_RO.1250Romanian_RomaniaRomanian_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有关。你有什么想法吗?

1 个答案:

答案 0 :(得分:1)

阅读并查看以下网址我认为这对您非常有帮助。

What to use for localization (php/smarty/pear application)?

要不依赖于php扩展的可用性,你应该回到http://launchpad.net/php-gettext,它提供了一个纯粹的gettext实现。

gettext还有一个很大的优势,即存在许多工具可以轻松翻译这些文件。