代码之家  ›  专栏  ›  技术社区  ›  ARemesal

GetText(i18n)和Smarty运行不稳定

  •  4
  • ARemesal  · 技术社区  · 14 年前

    我正在开发一个包含php和smarty的webapp。我使用gettext来实现国际化,但我有一个问题:它有时只能工作,绝对是随机的。我用putenv+setlocale+bindtextdomain+textdomain加载一个区域设置(“de ou de”,例如),重新加载页面,然后看到“search”;再次重新加载,我看到“suche”;再加载两个,得到“suche”,但第三个再次给我“search”,然后我看到“search”多次,突然我又看到“suche”…随机。

    我已经停用了Smarty的缓存,但同样的问题。我已经将smarty配置为使用不同语言的不同目录、模板“c/en-gb”、模板“c/de-de”等等。编译就是这样。

    我正在使用SmartyGetText进行模板翻译。

    使用gettex和smarty有什么已知的问题吗?

    编辑以添加一些信息:我正在Linux计算机上运行测试:

    亚太地区2.2.14

    获取文本0.17

    5.3.2菲律宾比索

    Smarty 3-SVN$版本:3286

    4 回复  |  直到 6 年前
        1
  •  1
  •   Kemal    14 年前

    是否已安装/启用Xcache或任何其他操作码缓存?尝试禁用它们。

        2
  •  1
  •   Paul DelRe    13 年前

    我也遇到了同样的问题——有时候页面会显示翻译,有时候不会。

    但我使用的是普通的PHP(不是smarty),运行在MacOSX(不是Linux)。

    我的代码如下:

    $locale='fr_FR'; //...for example...
    putenv("LC_ALL=$locale");
    setlocale(LC_ALL,$locale);
    bindtextdomain("messages","./locale");
    bind_textdomain_codeset("messages","UTF-8");
    textdomain("messages");
    

    目前正在努力找出问题所在-我会告诉你我是否成功。

        3
  •  0
  •   Evgeny Tryastsin    13 年前

    用于在实际使用俄语单词时使用“pt_br”区域设置时遇到类似问题。 通过将locale设置为“ru_ru”解决了这个问题。 希望这能有所帮助。

    这是我实际工作的配置:

    $directory = './locale';
    $domain = 'smartybook';
    $locale ="ru_RU";
    setlocale(LC_ALL, $locale);
    bindtextdomain($domain, $directory);
    textdomain($domain);
    bind_textdomain_codeset($domain, 'UTF-8');
    

    另一个重要注意事项: 使用后才开始工作 msgfmt -c -v -o msgfmt-o还不够。 同样重要的是:发出格式化命令时需要是根目录, 另外,不要忘记重新启动Apache。

        4
  •  0
  •   Community Ian Goodfellow    7 年前

    我也有类似的间歇性问题 PHP gettext and vagrant running ubuntu

    尝试以下方法之一,我认为这将取决于PHP如何与Apache一起运行

    sudo service php5-fpm restart
    
    sudo service apache2 restart