Smarty gettext 本地化

3

我遇到了使用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文件夹中,我有一个翻译字符串“登录”的 pot 文件 - “SKSKSK”。
ro_RO文件夹中,我有一个翻译字符串“登录”的 pot 文件 - “RORORO”。
在浏览器中,我看到的是“SKSKSK”。
示例 2:
sk_SK文件夹中,我有一个翻译字符串“登录”的 pot 文件 - “RORORO”。
ro_RO文件夹中,我有一个翻译字符串“登录”的 pot 文件 - “SKSKSK”。
在浏览器中,我看到的是“RORORO”。
我想知道这个问题是否与Smarty有关。你有什么想法吗?

你说的是哪些文件夹?“如果我重命名文件夹,就可以正确翻译所有内容。但无论我做什么,其他文件夹都不被考虑。” - user1593705
\locale\sk_SK\LC_MESSAGES\messages.pot,\locale\ro_RO\LC_MESSAGES\messages.pot等。 - Patrice Hollman
我尝试在本地化PHP文件的开头添加$ smarty-> clearAllCache();。 没有效果。 - Patrice Hollman
我认为Smarty/PHP根本找不到ro_RO文件夹,因此会回退使用默认语言。您应该检查所设置的本地名称,然后再检查文件夹是否存在。 - user1593705
setlocale()函数返回Romanian_Romania.1250。有没有可以用来获取此本地化的首选文件夹名称的函数?我提到了几个服务器上存在但被忽略的文件夹。 - Patrice Hollman
显示剩余3条评论
1个回答

2

看起来这不是使用gettext的问题,而是在重命名文件夹后发生了什么。我猜这可能是缓存的问题,但需要更多细节 ;) - user1593705
你可以访问这个网址http://launchpad.net/php-gettext,在这里你可以下载一些示例代码并与你的代码进行比较。 - Abid Hussain
我相信我所拥有的代码是有效的。我也尝试了几个小改变,但情况仍然是一样的——我的文本使用 sk_SK 目录中的实际 .po 和 .mo 文件进行翻译。我可以将它们翻译成任何语言和伪语言。只要它在 sk_SK 目录中。我只是无法弄清楚为什么我的系统无法从任何其他目录中获取翻译,即使 setlocale() 函数似乎正在工作。 - Patrice Hollman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接