用php翻译多种语言

用php翻译多种语言,php,internationalization,translation,user-input,Php,Internationalization,Translation,User Input,我正在开发一个小型解析器,它可以接受多种语言的输入。我将有50个字符串,在解析输入时用作关键字/锚点。在PHP中,组织这些已翻译关键字的最佳方法是什么 我想到的一个可能的解决方案是使用关联数组。像这样: $lang = array('us' => array('totalDebt' => 'Total Debt', 'color' => 'Color'), 'gb' => array('totalDebt' => 'Total Debt'

我正在开发一个小型解析器,它可以接受多种语言的输入。我将有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']);

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

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

要获得完整的翻译解决方案,您可以查看以下解决方案

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


如果您要翻译的术语在语言中不存在,请不要忘记使用某种回退,通常回退到英语。

我在其他操作系统项目中见过您的解决方案,但是,
$lang
数组通常在不同的文件中构造。例如:

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

正如彼得所说,你的想法是正确的,但是把你的语言分成不同的文件。这意味着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"
?>


您可能不希望“totaldebt”=>“totaldebt”,因为这最终会混淆您的代码,并且比仅将“totaldebt”存储为散列键要慢。gettext的方法是将字符串包装到函数中

因此,不是:

echo "Color";
你可以:

echo t("Color");

函数将查看全局定义的语言,并尽可能进行替换。在某种程度上,您可能希望使用gettext,这样做将是兼容的

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