在另一个需要的文件中使用变量
我想创建一个多语言网站,但我遇到了问题!
我会用一个例子解释给你听:
郎en.php在另一个需要的文件中使用变量
<?php
$lang = [];
$lang['hello'] = "Wellcome $userName to our website!";
?>
的index.php
<?php
$useName = "Amir";
require_once("lang-en.php");
echo $lang['hello'];
?>
现在,我想看看这个输出在我的页面中:
欢迎Amir到我们的网站!
我该怎么做?
让它看起来更复杂一点,展望未来可能会很明智。如果您将实现部件移除到单独的类中,则可以将实际使用情况和翻译的实现分开。如果您计划稍后使用gettext
(po/mo文件),则可以更轻松地进行切换。
一个简单的,但未经检验,例如将
class translate{
private $translations = [
'hello' => "Wellcome %s to our website!",
]
public function trans($key, $value)
{
return sprintf($this->translations[$key], $value);
}
}
你要知道,这是一个简单的例子,而且可能需要一些工作 - >例如,它总是假定一个变量,等等等等,但这个想法是你创建了一个具有内部实现的类和一个你调用的函数。如果你可以保持函数调用的脚印不变,你可以改变你的翻译系统的工作!
你会打电话给这个像这样
$trans = new Translate();
echo $trans->trans('hello', 'Amir');
(再说一次,我在回答框中键入这一点,没有检查语法,测试等已经做了,所以这可能是不是复制粘贴准备就绪类,但它是关于这个想法)
编辑:按要求,多一点例子。同样,没有测试过,可能是一些语法错误等,而是帮助你的想法:
class translate{
private $translations = [
'hello' => array('test' =>"Welcome %s to our website!", 'vars' => 1),
'greet' => array('test' =>"I'd like to say $s to %s ", 'vars' => 2),
]
public function trans($key, array $values)
{
// no translation
if(!isset($this->translations[$key])){
return false; // or exception if you want
}
// translation needs more (or less) variables
if($this->translations[$key][vars] !== count($values)){
return false; // or exception if you want
}
// note: now using vsprintf
return vsprintf($this->translations[$key], $values);
}
}
好的。 +1 .. –
我怎样才能做到更多的变量?例如带有这段文字的文字:“你好[阿米尔]欢迎来到我们的网站”另一篇带有这段文字的文字“嘿[阿米尔]!你确定需要为这篇文章运行[删除]动作?”。 (注意:[变量]) –
嗯,问题是,我认为,错误处理。如果做得对,你应该知道你是否可以完成对该功能的请求,并以其他方式处理该问题。但是,您可以将值作为数组或类似的东西。我可以补充一点,但最终你需要带回家的思路,并从那里开始。 – Nanne
阿米尔·阿加,
当你通过打电话或include
PHP require
行为另一个PHP文件,就好像内容所包括的文件被插入在同一直线上,并且在同一范围(除类和函数),以便你在PHP解释的视图代码看起来是这样的:
<?php
$userName = "Amir";
$lang = [];
$lang['hello'] = "Wellcome $userName to our website!";
echo $lang['hello'];
?>
所以这个代码必须显示:
Wellcome Amir到我们的网站!
但为什么它不起作用?只是因为你在你的index.php文件中写了$useName
而不是$userName
。
p.s .:其他答案使它非常复杂。只有改变$useName
到$userName
Kheyli mamnoonam azetoon,这是好的,但我需要从另一个文件包括! –
我把它作为一个例子不是解决方案。 您必须在'index.php'文件中将'$ useName'更改为'$ userName'。 –
做一个功能之一langen.php
<?php
function lang($username)
{
$lang['hello'] = $username;
echo $lang['hello'];
}
?>
该函数
<?php
require_once("lang-en.php");
lang('arun');
?>
的index.php叫你几乎有它 langen.php
<?php
//declare array
$lang = array();
$templang['hello1'] = "Wellcome ";
$templang['hello2'] = " to our website!";
//add new item in array
array_push($lang,$templang);
?>
index.php
<?php
$useName = "Amir";
require_once("langen.php");
//it is first entry of array row so [0] is 0
echo $lang[0]['hello1'];
echo $userName;
echo $lang[0]['hello2'];
//out is welcome amir to our website
?>
这是一个简单的方法太了解如何传递变量有点长的方式,但我不想这样组合,你可以看到它是如何运作的,你也可以做一些阅读有关会议的页面之间传递变量这是不包括
'欢迎'$ useName'到我们的网站' –
你在找[sprintf()](http://php.net/manual/en/function.sprintf.php) – Saty
或'str_replace '。 –