locales的switch或file_exists

时间:2018-05-08 17:59:16

标签: php

我创建了一个多语言网站,我想知道如何获取语言数据。好吧,我的代码从浏览器获取有关用户语言的信息,然后包含语言环境文件。

获取用户语言:

<?php
$hl = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
?>

包含区域设置:

<?php
if (file_exists('locales/".$hl.".php')){
  include "locales/".$hl.".php";
}else{
  include "locales/en.php";
}

/*    VS    */

switch ($hl){
  case 'de': include "locales/de.php"; break;
  case 'fr': include "locales/fr.php"; break;
  /* ...*/
  default: include "locales/en.php";
}
?>

哪种方式最好?

1 个答案:

答案 0 :(得分:0)

有很多方法可以解决这个问题,并且取决于我们在您的代码中不了解的众多内容。例如,locales/en.php 总是可用(即不需要file_exists()检查)。等等

即便如此,可以说个人意见最好。

就个人而言,为了清洁和简单但不超过顶部,我更喜欢:

$hl = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
file_exists('locales/'.$hl.'.php')
    ? include 'locales/'.$hl.'.php'
    : include 'locales/en.php';

但是,再次取决于您以及对您的要求和其他编码风格有何意义。例如。如果重用已确定语言的值是有用的(例如&#34; EN&#34;或来自服务器变量的值,例如&#34; DE&#34;)那么这会更好:

$hl = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
$language = file_exists('locales/'.$hl.'.php')
    ? $h1
    : 'en';
include 'locales/'.$language.'.php';

// $language can be used again, eg echo "currently viewing in {$language}";

你可以把它收紧一点,但要小心它不会变得不清楚。

$browserLanguageFile = 'locales/'.substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2).'.php';
file_exists($browserLanguageFile)
    ? include $browserLanguageFile
    : include 'locales/en.php';