PHP:多语言问题
我正在创建一个多语言网站,语言切换器加载所需的语言文件,但如果该文件不包含所需的条目,它将不会显示,甚至默认数组值也不可见 我这样翻译:PHP:多语言问题,php,multilingual,Php,Multilingual,我正在创建一个多语言网站,语言切换器加载所需的语言文件,但如果该文件不包含所需的条目,它将不会显示,甚至默认数组值也不可见 我这样翻译: $lang = "en"; if(isset($_GET['lang'])){ $lang = $_GET['lang']; } require_once("languages/lang_".$lang.".php"); 语言数组: <?php echo $language["USERNAME"]; ?> $language["US
$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"]; ?>
我想回显括号中的值:用户名
语言数组:
<?php echo $language["USERNAME"]; ?>
$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";
}
$lang=“en”;
如果(isset($_GET['lang']){
$lang=$_GET['lang'];
}
需要一次(“languages/lang”.$lang.“.php”);
全局$templang=$language;
功能语言($key){
全球$templang;
返回(isset($templang[$key])?$templang[$key]:“默认值”;
}
为此,您需要定义默认语言。
那样的话,我选择英语
在语言文件中,尝试不定义变量,而是返回转换数组
如果在语言文件中使用return关键字,则可以控制变量,因此可以在脚本中包含多个语言文件
语言文件
lang_en.php
<?php
return [
'username' => 'username'
];
<?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');
<?php
return [
'username' => 'username',
'no-trans' => 'not translated'
];
<?php
return [
'username' => 'user name'
];
<?php
$language["USERNAME"] = "Username";
$language["EMAIL"] = "Email";
$language["PASSWORD"] = "Password";
$language["CREATE_ACCOUNT"] = "Create account";
<?php
$language["USERNAME"] = "Nutzername";
$language["PASSWORD"] = "Passwort";
<?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');
<?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;
}
}
您可以尝试以下方法:
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");
与Andrei Todorut answer类似,您可以简单地合并2个语言文件,将默认字符串替换为已翻译字符串,而未翻译的字符串将保持不变。要实现这一点,您可以使用函数,这将达到目的。这将保留您的
$language
数组,不需要额外的函数来检查是否存在翻译的字符串等
假设您的语言文件如下所示:
$lang = "en";
if(isset($_GET['lang'])){
$lang = $_GET['lang'];
}
require_once("languages/lang_".$lang.".php");
lang_en.php
<?php
return [
'username' => 'username'
];
<?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');
<?php
return [
'username' => 'username',
'no-trans' => 'not translated'
];
<?php
return [
'username' => 'user name'
];
<?php
$language["USERNAME"] = "Username";
$language["EMAIL"] = "Email";
$language["PASSWORD"] = "Password";
$language["CREATE_ACCOUNT"] = "Create account";
<?php
$language["USERNAME"] = "Nutzername";
$language["PASSWORD"] = "Passwort";
<?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');
<?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;
}
}
因此,在与新来者讨论并更好地理解一些需求之后,这里是问题的另一个解决方案: 语言文件 lang_en.php
<?php
return [
'username' => 'username'
];
<?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');
<?php
return [
'username' => 'username',
'no-trans' => 'not translated'
];
<?php
return [
'username' => 'user name'
];
<?php
$language["USERNAME"] = "Username";
$language["EMAIL"] = "Email";
$language["PASSWORD"] = "Password";
$language["CREATE_ACCOUNT"] = "Create account";
<?php
$language["USERNAME"] = "Nutzername";
$language["PASSWORD"] = "Passwort";
<?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');
<?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;
}
}
您是否尝试过实现这一点?很遗憾,您不知道从何处开始。请在中创建一个传递数组键的函数,并检查翻译中是否存在此键,然后从翻译中返回值。否则返回默认值。我这样做了:但如果语言文件不包含数组值,在索引php中没有翻译,只是空的…使用array\u replace
函数合并EN和其他语言文件数组快速问题:将不返回任何内容,但有没有简单的方法返回数组主值(在本例中为word USERNAME)如果没有翻译?如果$language['username']
返回空值或未设置,则username
值将来自默认语言。只要测试上面的代码,你就会发现它是如何工作的。不幸的是,它不工作。如果语言文件是空的,只是空文档而没有任何翻译,那么我仍然什么也看不到。我在包含动态语言文件后进行了编辑<代码>如果(!is_array($language){$language=[];}
谢谢,但它不起作用,没有加载任何内容,翻译为空。我觉得没有人理解我的真正要求:)假设加载的语言文件是绝对空的,那么语言条目应该显示用户名或任何其他值,这些值正好出现在这个对象中: