我正在研究一个问题,我想以一般方式解决它。 要获得API响应的翻译,请使用以下代码:
$array['name'] = getTranslation($key);
这会根据用户设置获得翻译,并可能导致以下操作返回带有翻译的密钥或仅返回密钥。这使得数组如下:
//user only can get the key
$array['name']['key'] = 'key';
或
//user can get both key and translation
$array['name']['key'] = 'key';
$array['name']['translation'] = 'translation';
这个解决方案运行良好,但不幸的是它必须改变。翻译密钥必须始终在密钥中,并且必须将翻译放在_key中。但仅当用户设置允许他们获得翻译时。这导致以下结果:
$array['name'] = 'key';
$array['_name'] = 'translation';
或只是:
$array['name'] = 'key';
不幸的是,翻译被广泛使用,如果用户可以翻译,我不想在每种方法中进行检查。
所以现在我想知道,如果有办法在全球范围内解决这个问题。理想情况下是创建一种方法来解决这个问题:
$arraykey = 'name';
$array[$arraykey] = getTranslations('translationkey', $arraykey);
它最终将在数组中结束:
$array['name'] = 'translationkey';
$array['_name'] = 'translated value';
答案 0 :(得分:1)
从您的建议开始创建新功能,您可以尝试以下内容:
function getTranslations($translationKey, $arrayKey)
{
$translation = getTranslation($translationKey);
$result = array($arrayKey => $translation['key']);
if (/*user settings enabled translations*/) {
$result['_' . $arrayKey] = $translation['translation'];
}
return $result;
}
// usage
$translation = getTranslations('namekey', 'name');
// if you have more translations in the final array then you can use array_merge
$translation = getTranslations('namekey', 'name');
$translation = array_merge($translation, getTranslations('phonekey', 'phone'));