翻译内容的PHP代码段.这是一个好的做法吗?它能变得更好/更简单吗



我目前正在开发一个网站,该网站将由不同的gTLD提供翻译内容。(example.com、example.fr、example.de)

我们的想法是让它们都重定向到同一服务器上的相同内容,并基于gTLD,有一个简单的php例程来提供正确的语言。

以下是我用来检测域/语言的代码:

<?php
$url_tld = explode("." , $_SERVER['HTTP_HOST'] , 3);
if ($url_tld[2] == "fr") { $language = "FR"; $lang_id = 1;}
elseif ($url_tld[2] == "de") { $language = "DE"; $lang_id = 2;}
elseif ($url_tld[2] == "nl") { $language = "NL"; $lang_id = 3;}
else { $language = "EN"; $lang_id = 0;}
function txt($x) {
global $lang_id;
echo $x[$lang_id];
};

在html代码中,每当我需要不同的语言内容时,我都会运行txt函数;示例:

<h1><?=txt(['Hello World','Bonjour France','Hallo Deutschland','Hallo Nederland'])?></h1>

我尽量避免使用任何数据库,因为网站大部分都是静态的。

这种方法能变得更简单吗?或者更方便眼睛(对于那些手动更新代码的人)?

提前致以最良好的问候和感谢。

我不喜欢explode()中的3和索引中的2。它是基于什么?如果域是example.co.ukwww.example.fr怎么办?更好的用途:

$domainExtension = end(explode(".",$_SERVER['HTTP_HOST']));

然后你可以做:

switch ($domainExtension) {
case 'fr' : $language = 'FRE'; break;
case 'de' : $language = 'GER'; break;
case 'nl' : $language = 'DUT'; break;
default   : $language = 'ENG'; break;
}

正如您所看到的,switch ()使代码更加可读。为了更好的可读性,我不会不必要地缩写。我还使用了官方的三个字母的语言缩写。它有点通用,但两个字母就可以了,请参阅:

https://en.wikipedia.org/wiki/List_of_ISO_639-2_codes

就我个人而言,我不喜欢语言中的数字,这就是为什么我把它们省略了,尽管我理解你为什么使用它们。你可以做:

$texts = ['hello','Bonjour','Guten Tag','Hallo'];

但在这种情况下,你不能忽略任何语言。我会忘记数字,然后做:

$texts = ['ENG' => 'hello',
'FRE' => 'Bonjour',
'GER' => 'Guten Tag',
'DUT' => 'Hallo'];

然后,当一种语言丢失时,您可以用另一种语言替换它:

function getText($language,$texts) {
if (isset($texts[$language]) return $texts[$language];  // it is there
else return reset($texts);      // take the first
};

然后,您还可以将语言从最常用到很少使用进行排序。请注意,我没有使用全局,这是故意的。同样,您可以选择使用一个。

最后,要返回到更简单的文本列表,您可以使用另一个功能:

function setTexts($english,$french,$german,$dutch)
{
return ['ENG' => $english,
'FRE' => $french,
'GER' => $german,
'DUT' => $dutch];
}
$helloTexts = setTexts('hello','Bonjour','Guten Tag','Hallo');

然后像这样使用:

echo getText($language,$helloTexts);

但我必须强调,还有很多其他方法可以做到这一点。例如,您可以为不同的语言提供单独的包含文件。这样你就不会处理任何未使用的文本。这可能会节省一点时间,但它将是最小的,并且将同一段文本的不同翻译放在一起是很好的。

最后一个提示:兄弟可以告诉你访客喜欢的语言。参见:$_SERVER['HTTP_ACCEPT_LANGUAGE']

一个简单的方法(不需要给出id,只需获取数组的密钥):

$url_tld = 'FR';//explode("." , $_SERVER['HTTP_HOST'] , 3);
$lang_available = array('en','fr','de','nl');
$language = strtolower($url_tld);
$lang_id = array_search($language, $lang_available); 
txt(['Hello World','Bonjour France','Hallo Deutschland','Hallo Nederland']);

最新更新