2

我正在处理以多种语言编写的产品列表。我为每个产品都有一个数组,显示它的语言如下:

Array ( [0] => DA [1] => DE [2] => EN [3] => ES [4] => FI [5] => FR [6] => IT [7] => JA [8] => KO [9] => NL [10] => NO [11] => PL [12] => PT [13] => RU [14] => SV [15] => ZH )

我需要用它们的语言名称替换这些单独的代码(所以 EN => 英语)。我有以下代码,它适用于常规字符串,但我无法让它适用于这个数组。有什么想法吗?

    $trans = array(
        "EN" => "English", 
        "ZH" => "Chinese", 
        "DA" => "Danish",
        "NL" => "Dutch", 
        "FI" => "Finnish", 
        "FR" => "French",
        "DE" => "German", 
        "IT" => "Italian", 
        "JA" => "Japanese",
        "KO" => "Korean", 
        "NO" => "Norwegian", 
        "PL" => "Polish",
        "PT" => "Portuguese", 
        "RU" => "Russian", 
        "ES" => "Spanish",
        "SV" => "Swedish", 
    );

    echo strtr($langcodes, $trans);

$langcodes 保存数组值。

4

4 回答 4

2

证明它有效:http ://codepad.org/PR5pPqcX

@David 查看我的答案。见下文。如果我是正确的,请相信我,以便我获得积分。积分激励我回答更多问题。

$language_codes = array(0 => 'DA', 1 => 'DE', 2 => 'EN', 3 => 'ES', 4 => 'FI', 5 => 'FR', 6 => 'IT', 7 => 'JA', 8 => 'KO', 9 => 'NL', 10 => 'NO', 11 => 'PL', 12 => PT, 13 => 'RU', 14 => 'SV', 15 => 'ZH' );

$trans = array(
    "EN" => "English", 
    "ZH" => "Chinese", 
    "DA" => "Danish",
    "NL" => "Dutch", 
    "FI" => "Finnish", 
    "FR" => "French",
    "DE" => "German", 
    "IT" => "Italian", 
    "JA" => "Japanese",
    "KO" => "Korean", 
    "NO" => "Norwegian", 
    "PL" => "Polish",
    "PT" => "Portuguese", 
    "RU" => "Russian", 
    "ES" => "Spanish",
    "SV" => "Swedish", 
);


foreach ($language_codes as $key => $code)
    if (!empty($trans[$code]))
        $language_codes[$key] = $trans[$code];    

var_dump($language_codes);

证明它有效:http ://codepad.org/PR5pPqcX

于 2011-06-24T18:18:21.003 回答
1

我认为您必须遍历$langcodes并调用strtr()每个代码。根据PHP 手册,第一个参数必须是字符串,而不是字符串数组。

于 2011-06-24T18:16:21.897 回答
1

如何使用这样的array_map函数:

function mapLang($l) {
   global $trans;
   return $trans[$l];
}
$langcodes = array_map("mapLang", $langcodes);
print_r($langcodes);

输出

Array
(
    [0] => Danish
    [1] => German
    [2] => English
    [3] => Spanish
    [4] => Finnish
    [5] => French
    [6] => Italian
    [7] => Japanese
    [8] => Korean
    [9] => Dutch
    [10] => Norwegian
    [11] => Polish
    [12] => Portuguese
    [13] => Russian
    [14] => Swedish
    [15] => Chinese
)
于 2011-06-24T18:44:56.257 回答
0

PHP 文档strtr()没有提到参数 #1的数组支持。仅参数 #2 支持数组。这根本行不通。您必须滚动自己的循环。这是如何做到的:

<?php
$languages = array('DA', 'DE', 'EN', 'ES', 'FI', 'FR', 'IT', 'JA', 'KO', 'NL', 'NO', 'PL', 'PT', 'RU', 'SV', 'ZH');
$trans = array(
        'EN' => 'English', 
        'ZH' => 'Chinese', 
        'DA' => 'Danish',
        'NL' => 'Dutch', 
        'FI' => 'Finnish', 
        'FR' => 'French',
        'DE' => 'German', 
        'IT' => 'Italian', 
        'JA' => 'Japanese',
        'KO' => 'Korean', 
        'NO' => 'Norwegian', 
        'PL' => 'Polish',
        'PT' => 'Portuguese', 
        'RU' => 'Russian', 
        'ES' => 'Spanish',
        'SV' => 'Swedish', 
    );
foreach($languages as &$language) {
    $language = strtr($language, $trans);
}
print_r($languages);
?>
于 2011-06-24T18:17:05.960 回答