【问题标题】:Translate multiple languages in php在php中翻译多种语言
【发布时间】:2008-11-06 17:42:14
【问题描述】:

我正在开发一个可以接受多种语言输入的小型解析器。我将有大约 50 个字符串作为解析输入的关键字/锚。在 PHP 中,组织这些翻译后的关键字的最佳方式是什么?

我想到的一个可能的解决方案是使用关联数组。像这样:

$lang = array('us' => array('totalDebt' => 'Total Debt', 'color' => 'Color'),
              'gb' => array('totalDebt' => 'Total Debt', 'color' => 'Colour'))

然后我可以使用以下方法访问:

$langCode = 'en';
$debtPos = strpos($lang[$langCode]['totalDebt']);

有没有更好的、经过验证的方法来处理翻译成多种语言的短字符串?

【问题讨论】:

  • 你能解释一下你想用那个“strpos($lang[$langCode]['totalDebt']);”做什么部分?这不是一个有效的函数调用..

标签: php internationalization translation user-input


【解决方案1】:

如需完整的翻译解决方案,您可以查看gettext 之类的解决方案。

您的解决方案对于小型词典来说已经足够好了(速度快、资源便宜)。 我不明白你试图用 strpos() 函数做什么。

如果您要翻译的术语在该语言中不存在,请不要忘记使用某种后备,通常后备是英语。

【讨论】:

    【解决方案2】:

    通常人们在他们的应用程序中使用 l10n(或类似的东西),因为它允许通过添加本地化文件来使用其他语言,这意味着程序员不必更改代码。但如果它是一个简单的脚本,那么full on localization 将是矫枉过正。

    【讨论】:

      【解决方案3】:

      我已经看到您的解决方案在其他 OS 项目中使用,但是 $lang 数组通常在不同的文件中构建。例如:

      <?php // lang.us.php
      $LANG['us'] = array(
                          'totalDebt' => 'Total Debt',
                          'color' => 'Color',
                         );
      

      lang.gb.php、lang.de.php 等以此类推

      【讨论】:

        【解决方案4】:

        正如 Peter 所说,您的想法是正确的,但是将您的语言分成不同的文件。这意味着 PHP 不必存储每种语言中每个单词的数组。因为您一次只加载一种语言,所以您也可以跳过 $lang['us'] 嵌套级别。

        您甚至可以“扩展”语言:

        <?php // lang.en-gb.php
        $lang = array(
            'color' => "Colour",
            'totalDebt' => "Total Debt",
            ...
        );
        ?>
        
        <?php // lang.en-us.php
        include('lang.en-gb.php');
        
        $lang['color'] = "Color";
        // don't need to redefine "totalDebt"
        ?>
        

        您甚至可以考虑创建一个基本类来为您处理所有这些:检测语言环境、选择正确的文件、进行“错误”处理、如果术语未以特定语言定义等等。

        【讨论】:

          【解决方案5】:

          您可能不希望 'totaldebt' => 'Total Debt' 因为这最终会混淆您的代码,并且比仅将 'Total Debt' 存储为哈希键要慢。 gettext 做事的方式就是将字符串包装在一个函数中。

          所以而不是:

          echo "Color";
          

          你这样做:

          echo t("Color");
          

          t() 函数将查看全局定义的语言,并在可能的情况下进行替换。在某些时候,您可能想要使用 gettext 并且这样做是兼容的。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-04-03
            • 2014-11-04
            • 2011-01-04
            • 1970-01-01
            • 2014-05-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多