2

我在使用 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”翻译的 pot 文件

在 ro_RO 文件夹中,我有带有字符串“登录”-“RORORO”的翻译的 pot 文件

在浏览器中我看到“SKSKSK”

示例 2:

在 sk_SK 文件夹中,我有带有字符串“登录”-“RORORO”的翻译的 pot 文件

在 ro_RO 文件夹中,我有带有字符串“登录”-“SKSKSK”翻译的 pot 文件

在浏览器中我看到“RORORO”

我想知道这个问题是否与Smarty有关。你有什么想法?

4

1 回答 1

1

阅读并查看下面的 URL,我认为这对您很有帮助。

本地化使用什么(php/smarty/pear 应用程序)?

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

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

于 2012-09-03T15:02:33.370 回答