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

php gettext函数只返回原始未翻译的字符串

  •  7
  • Camsoft  · 技术社区  · 16 年前

    我正在尝试使用GetText向我的网站添加本地化支持。我遵循了有关如何设置getText的各种指南,并完成了以下操作:

    我在项目目录的根目录中创建了以下文件和目录:

    test.php
    
    locale/
      de_DE
        LC_MESSAGES
           messages.mo
           messages.po
    
      en_GB
        LC_MESSAGES
           messages.mo
           messages.po
    

    我已经用过 Poedit 创建上述.po和mo文件。我已经让sue-it使用unix行尾、utf-8并相应地设置语言和国家。

    然后,我创建了一个名为test.php的PHP脚本,其中包含以下代码:

    <?php
    
      define('LOCALE', 'de_DE');
    
      // Set up environmental variables
      putenv("LC_ALL=" . LOCALE);
      setlocale(LC_ALL, LOCALE);
      bindtextdomain("messages", "./locale");
      bind_textdomain_codeset("messages", LOCALE .".utf8");
      textdomain("messages");
    
      die(gettext('This is a test.'));
    
    ?>
    

    我导入了文本“这是一个测试”,以便进行编辑并提供翻译并保存。

    但是出于某种原因,test.php脚本将只输出未翻译的原始文本。它拒绝加载翻译文件的版本。

    值得注意的是,服务器运行的是Linux(Ubuntu)。 Apache2.2.11和php 5.2.6-3ubuntu4.5。我检查过了 phpinfo() 并且启用了getText。

    3 回复  |  直到 8 年前
        1
  •  14
  •   bpedro    16 年前

    您的问题可能与系统中缺少的区域设置有关。请安装德语区域设置,一切正常:

    sudo apt-get install language-pack-de-base
    

    然后,发出以下命令,您将看到德语区域设置:

    locale -a
    

    在此之后,假设您所描述的目录结构上仍然有.po和.mo文件,则以下代码应该可以工作:

      <?php
    
      setlocale(LC_ALL, 'de_DE.UTF-8');
      bindtextdomain('messages', './locale');
      textdomain('messages');
    
      echo gettext('This is a test.');
    
      ?>
    
        2
  •  1
  •   Boldewyn    16 年前

    是的,是的,再次支持PHP的getText。只是一个提示,可能对您有帮助,也可能对您没有帮助:

    由于PHP糟糕的gettext实现,许多开源项目(如wordpress)都切换到了这个项目: http://savannah.nongnu.org/projects/php-gettext/ 完全绕过原来的版本。

    我也在我的一个项目中做过,我不能说我错过了什么。

    商业项目的劣势:在GPL之下。

        3
  •  0
  •   Gabriel Solomon    16 年前

    尝试以下操作

    <?php
    
      define(LC_MESSAGES, 'de_DE');
    
      // Set up environmental variables
      putenv("LANGUAGE=de_DE");
      bindtextdomain("*", dirname(__FILE__).'/locale');
      bind_textdomain_codeset("messages", 'UTF-8');      
    
      die(gettext('This is a test.'));
    
    ?>