Php 对于区域设置,存在开关或文件\u

Php 对于区域设置,存在开关或文件\u,php,Php,我创建了一个多语言网站,我想知道如何获取语言数据。好的,我的代码从浏览器中获取有关用户语言的信息,然后包括区域设置文件 获取用户语言: <?php $hl = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); ?> 包括区域设置: <?php if (file_exists('locales/".$hl.".php')){ include "locales/".$hl.".php"; }else{ include "l

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

获取用户语言:

<?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";
}
?>

有很多方法可以实现这一点,这取决于我们在代码中不知道的许多事情。例如,
locales/en.php
始终可用(即不需要
文件\u exists()
检查)。等等

即使如此,什么是最好的也可以说是个人观点

就我个人而言,对于干净、简单但不过分的问题,我更喜欢:

$hl = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
file_exists('locales/'.$hl.'.php')
    ? include 'locales/'.$hl.'.php'
    : include 'locales/en.php';
但这同样取决于您的需求和其他编码风格。例如,如果重用所确定语言的值(例如“EN”或来自服务器变量的值,例如“DE”)是有用的,那么这会更好:

$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';

第一种语言会短得多,我会用它。你可能会在我的帖子中找到一些有用的信息。它从一个直通模式中检索语言:从URL、会话、浏览器、回退。