我正在创建一个多语言网站,语言切换器会加载所需的语言文件,但如果文件中没有包含所需的条目,则它根本不会出现,即使默认数组值不可见。
我做这样的翻译:
$lang = "en";
if(isset($_GET['lang'])){
$lang = $_GET['lang'];
}
require_once("languages/lang_".$lang.".php");
语言数组:
<?php echo $language["USERNAME"]; ?>
带翻译的语言文件:
$language["USERNAME"] = "User name";
如果语言文件不包含$language["USERNAME"] = "User name"
;然后什么也没有显示出来。我想要实现的是:如果加载的语言文件不包含翻译,则数组应返回默认值,例如:USERNAME
。
我确实检查了数组键或值是否可用于显示所需信息,但似乎检查是在加载的语言文件中完成的,如果语言文件为空,则无需显示任何内容。我只需要显示位于主PHP文件中的默认数组值。如果没有数组的翻译
<?php echo $language["USERNAME"]; ?>
我想在括号中回显值:USERNAME
。
答案 0 :(得分:3)
为此,您需要定义默认语言。 在那种情况下,我选择英语。
在您的语言文件中,请尝试不定义变量,而是返回翻译数组。
如果您在语言文件中使用return关键字,则可以控制变量,因此您可以在脚本中包含多个语言文件。
语言文件
<强> lang_en.php 强>
<?php
return [
'username' => 'username'
];
其他语言文件的方式相同。
<强>的index.php 强>
<?php
$lang = "en" // that's default language key
$GLOBALS['defaultLanguage'] = require_once('lang_'.$lang.'.php');
if(isset($_GET['lang'])){
$lang = $_GET['lang'];
}
$GLOBALS['language'] = include('lang_'.$lang.'.php');
if(!is_array($GLOBALS['language']) {
$GLOBALS['language'] = [];
}
echo translate('username');
翻译功能
/**
* @param string $key
* @return string
*/
function translate($key)
{
$language = $GLOBALS['language'];
$defaultLanguage = $GLOBALS['defaultLanguage'];
if(!isset($language[$key]) || !$language[$key]){
$language[$key] = $defaultLanguage[$key];
}
return $language[$key];
}
答案 1 :(得分:0)
语言数组:
$language["USERNAME"] = "User name";
文件脚本
$lang = "en";
if(isset($_GET['lang'])){
$lang = $_GET['lang'];
}
require_once("languages/lang_".$lang.".php");
global $templang = $language;
<?php echo language("USERNAME"); ?>
funtion language($key){
global $templang;
return (isset($templang[$key]))? $templang[$key] : "Default Value";
}
答案 2 :(得分:0)
你可以试试这个:
function getTranslatedText($key) {
if(array_key_exists($key, $array_contains_translation_text))
return $array_contains_translation_text[$key];
else
return $array_contains_common_text[$key];
}
getTranslatedText("UserName");
答案 3 :(得分:0)
类似于Andrei Todorut的回答,您可以简单地合并2个语言文件,用已翻译的默认字符串替换,其中非翻译将保持不变。要实现这一点,您可以使用array_replace
函数,这将起到作用。这将保留您的$language
数组,不需要额外的函数来检查是否存在已翻译的字符串等。
假设您的语言文件如下所示:
<强> lang_en.php 强>
<?php
return [
'username' => 'username',
'no-trans' => 'not translated'
];
<强> lang_other.php 强>
<?php
return [
'username' => 'user name'
];
多语言数组代码:
<?php
$lang = "en";
$defaultLanguage = require_once('lang_'.$lang.'.php');
if(isset($_GET['lang'])){
$lang = $_GET['lang'];
}
$translated = include('lang_'.$lang.'.php');
if(is_array($translated)) {
$language = array_replace($defaultLanguage, $translated);
} else {
$language = $defaultLanguage;
}
<强>输出强>
print_r($language);
// output:
array[
'username' => 'user name',
'no-trans' => 'not translated'
]
echo $language['username'];
// output:
user name
答案 4 :(得分:0)
因此,在与Newcomer讨论并更好地理解某些要求之后,这是问题的另一种解决方案:
语言文件
<强> lang_en.php 强>
<?php
$language["USERNAME"] = "Username";
$language["EMAIL"] = "Email";
$language["PASSWORD"] = "Password";
$language["CREATE_ACCOUNT"] = "Create account";
<强> lang_de.php 强>
<?php
$language["USERNAME"] = "Nutzername";
$language["PASSWORD"] = "Passwort";
脚本和功能
<强>的index.php 强>
<?php
require_once('translate.php');
if(isset($_GET['lang']) && file_exists('lang_'.$_GET['lang'].'.php')) {
include_once('lang_'.$_GET['lang'].'.php');
} else {
include_once('lang_en.php');
}
// print
_e('USERNAME');
// return
__('USERNAME');
<强> translate.php 强>
<?php
function _e($key) {
if(isset($language[$key])) {
echo $language[$key];
} else {
echo $key;
}
}
function __($key) {
if(isset($language[$key])) {
return $language[$key];
} else {
return $key;
}
}