我编写了一个简单的Translate类,它存储一个常量关联数组。关键是源语言,值是目标语言的翻译。如何在此数组中搜索给定键并返回其值(此处为translation)?
namespace utils;
abstract class Translate
{
private const WORDS = array (
"Welcome" => "خوش آمدید",
"Access denied" => "دسترسی امکان پذیر نمی باشد",
) ;
/**
* Returns the translation of the given word.
* Returns the given word as is if $dont_translate is set to false
* @param string $word
* @param boolean $dont_translate
*/
public static function get($word, $dont_translate = false){
$data = WORDS;
foreach($row as $data) {
}
}
}
在我的代码中,我使用此函数如下:
if($loggedIn) {
echo '<p class="center">'. Translate::get('Welcome ') . $username;
}
else {
die("<p class='center'>" . Translate::get('Access denied ') . " </p>");
}
答案 0 :(得分:2)
我已经改变了第二个参数,因为它可能会让人感到困惑,因为它有双重的负面条件(不要翻译为假是恕我直言,逻辑不如翻译为真)...
/**
* Returns the translation of the given word.
* Returns the given word as is if $translate is set to false
* @param string $word
* @param boolean $translate
*/
public static function get($word, $translate = true){
$word = trim($word);
if ( $translate ) {
if ( isset(self::WORDS[$word]) ) {
$trans = self::WORDS[$word];
}
else {
$trans = false;
}
}
else {
$trans = $word;
}
return $trans;
}
如果翻译单词不存在,则返回false,很容易更改为返回原始值。
刚刚在输入中添加了trim()
,因为我注意到您的示例中有空格。
虽然我不是这种编码风格的忠实粉丝(它使代码不易清晰),如果你使用PHP 7 null coalesce operator,你可以使用稍短的...
public static function get($word, $translate = true){
return ( $translate )?(self::WORDS[trim($word)]??false):trim($word);
}
答案 1 :(得分:1)
您最好开始阅读PHP数组的手册: http://php.net/manual/de/language.types.array.php
但这里永远不会是一个友好的初学者代码片段:
if (isset(self::WORDS['Access denied'])) {
echo self::WORDS['Access denied'];
} else {
echo 'No key found'
}
答案 2 :(得分:1)
试试这个
public static function get($word, $dont_translate = false){
$data = WORDS;
$str = isset($data[$word]) ? $data[$word] : $word;
return $str;
}