我有大约1000个翻译短语。最好将它们存储在XML文件中,并在每个页面的顶部使用PHP读取它们,或者将它们存储在PHP文件中,该文件包含在每个页面中?什么是最好的,特别是对于表现?
备选方案1(XML文件):
<?xml version="1.0" encoding="UTF-8"?>
<language name="en">
<page name="header">
<phrase name="header_home">Home</phrase>
<phrase name="header_blogs">Blogs</phrase>
<phrase name="header_readmore">Read More</phrase>
...
</page>
...
</language>
备选方案2(PHP文件):
<?php
$header_home = "Home";
$header_blogs = "Blogs";
$header_readmore = "Read More";
...
?>
使用以下代码加载XML文件:
<?php
class Phrases{
//load phrases to PHP:
public function load_phrases($lang_id) {
$xml = new DomDocument('1.0');
//path to language directory
$lang_path=("phrases/".$lang_id.'.xml');
$xml->load($lang_path);
//phrases are inside page tags, first we must get these
$page = $xml->getElementsByTagName('page');
$page_num=$page->length;
for($i = 0; $i < $page_num; $i++) {
$page=$xml->getElementsByTagName('page')->item($i);
//get phrase tags and store them into array
foreach($page->getElementsByTagName('phrase') as $phrase) {
$phrase_name = $phrase->getAttribute('name');
$phrases[$phrase_name] = $phrase->firstChild->nodeValue;
$phrases[$phrase_name] = str_replace('\n','<br/>',$phrases[$phrase_name]);
}
}
$this->phrases=$phrases;
}
//phrases are accessed
public function lang_id() {
//determine page language
$lang = 'en';
switch(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2)){
case 'sv':
$lang = 'sv';
break;
case 'fr':
$lang = 'fr';
break;
case 'it':
$lang = 'it';
break;
case 'no':
$lang = 'no';
break;
default:
$lang = 'en';
}
$lang_id = isset($_COOKIE['lang']) ? $_COOKIE['lang'] : $lang;
//set the language cookie and update cookie expiration date
if(!isset($_COOKIE['lang'])) {
$expiration_date=time()+3600*24*7;
setcookie('lang',$lang_id,$expiration_date,'/');
}
if(!isset($lang_id) || $lang_id == NULL) $lang_id = 'en';
return $lang_id;
}
public function change_lang($lang_id) {
setcookie('lang',$lang_id,$expiration_date,'/');
}
//construct function
public function __construct() {
$this->load_phrases($this->lang_id());
}
}
?>
PHP文件加载了普通的PHP include。
答案 0 :(得分:2)
为了提高性能,PHP包含文件并不需要任何额外的外部步骤,因此与打开外部XML文件,读取和解析数据以及分配变量相比,这显然会成为性能的赢家。 / p>
但是,您可能希望检查性能增益是否在您的方案中很重要,因为现代操作系统会将小文件完全缓存在内存中,并且一千个项目不应该对总运行时间添加太多。
我建议如果您可以从Web服务器访问MySQL数据库实例,您可以考虑将它们存储在数据库中 - 性能应该大致介于XML和PHP之间,但是以这种方式使用数据库是一个很大的问题。为此目的更好的模式。