php - Smarty gettext 本地化

我在使用 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.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/

相关文章:

parsing - AT+CMGL指令异常消息如何处理

.net - 如何正确标记代码指标的设计器代码以忽略它

qt - 添加一个节点到 QDomNodeList

ruby-on-rails - 在Mongoid中如何找到字段数组计数大于一定数量的所有记录?

ruby-on-rails-3 - heroku rails logging 不显示输出?

visual-studio-2010 - 没有 Team Foundation Server 的 V

jsf - Primefaces 命令按钮 : f:attribute does not work

azure - 我的 cspack 命令应该是什么来打包 azure 项目

fonts - python matplotlib mathtext AMSeuler 字体

regex - 在 Dreamweaver 中自动执行多个正则表达式搜索/替换查询