实现多语言PHP的最佳方法 - php

首先,我知道关于多语言功能有很多答案,我没有找到想要的答案。

我考虑了可以使用的三种方式。每次我向Web表单界面添加新值时,都需要使用PHP创建语言文件。

前两个是相似的-使用数组或在特定语言文件中定义,并在运行开始时将其包括在内。
但是在这种情况下,我可能会加载数千个定义或数组,而仅在每个页面中使用几个。

第三种方法是创建每次使用关键字或完整短语调用的函数,并使用IF -s或switch选择正确的术语(如果不匹配,则返回调用的键)。

最好的方法是什么?
我决定做一些测试。我尝试了三种不同的方法,并测量了所需的时间和内存:

我定义了一个数组(22个值),并在1到1,000,000之间运行-使用%运算符选择要使用的内容并将其设置在变量上,以检查调用值-三个值之一

花费时间:0.476591110229秒
内存:6536字节

我使用了相同的数组(22个值),并使用函数-return $arr[$string];对其进行了调用(仅用于方便的工作方式,如果需要,可以将其更改为其他方式)

花费时间:0.960635185242秒
内存:6704字节

我创建了一个带有字符串列表的函数,并使用switch-> case选择返回的字符串

花费时间:1.46953487396秒
内存:848字节

好了,现在的问题是什么才是正确的选择-喜欢时间还是喜欢记忆。

并且如果站点很大并且会占用大量内存-我无法更改它,因为它是使用数组构建的-如果它可以与函数一起使用,那么我可以随时对其进行更改。

参考方案

就代码而言,类似这样的东西对您来说将非常有用。它必须基于用户的选择(从按钮或菜单中选择一种语言)或基于浏览语言(这不是最好的选择)。

index.php

<?php

// verify the user's choice
if ($_POST[lang] == "en") 
{
    include_once("en_language.php");
}

if ($_POST[lang] == "pt") 
{
    include_once("pt_language.php");
}

// calling a lable in your page
echo LABEL_MENU;


// the rest of your file
...
?>

en_language.php

<?php
// ENGISH Language file
define('LABEL_MENU','Main Menu');

// the whole file with the labels of your system

?>

pt_language.php

<?php
// PORTUGUESE Language file
define('LABEL_MENU','Menu Principal');

// the whole file with the labels of your system

?>

补充

如果您希望使用数组类型,而不是使用带有define()的Constant值,但是我不确定什么比。更快。

$arrays = array("MAIN_MENU" => "Main Menu", "LEFT_MENU" => "Left Menu"); 
echo $arrays["MAIN_MENU"];

PHP strtotime困境 - php

有人可以解释为什么这在我的服务器上输出为true吗?date_default_timezone_set('Europe/Bucharest'); var_dump( strtotime('29.03.2015 03:00', time()) === strtotime('29.03.2015 04:00�…

PHP-全局变量的性能和内存问题 - php

假设情况:我在php中运行一个复杂的站点,并且我使用了很多全局变量。我可以将变量存储在现有的全局范围内,例如$_REQUEST['userInfo'],$_REQUEST['foo']和$_REQUEST['bar']等,然后将许多不同的内容放入请求范围内(这将是适当的用法,因为这些数据指的是要求自…

PHP Count数组元素 - php

嗨,有人可以解释为什么这会返回“数组由0个元素组成”。 :$arr = array(1,3,5); $count = count($arr); if ($count = 0) { echo "An array is empty."; } else { echo "An array has $count elements.…

PHP:从函数返回值并直接回显它? - php

这可能是一个愚蠢的问题,但是……的PHPfunction get_info() { $something = "test"; return $something; } html<div class="test"><?php echo get_info(); ?></div> 有没有办…

php-casperjs获取内部文本 - php

我正在为casperjs使用php包装器-https://github.com/alwex/php-casperjs我正在网上自动化一些重复的工作,我需要访问一个项目的innerText,但是我尚不清楚如何从casperjs浏览器访问dom。我认为在js中我会var arr = document.querySelector('label.input…