2017-04-01 79 views
0

我想创建一个多语言网站,但我遇到了问题!
我会用一个例子解释给你听:

郎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到我们的网站!

我该怎么做?

+0

'欢迎'$ useName'到我们的网站' –

+0

你在找[sprintf()](http://php.net/manual/en/function.sprintf.php) – Saty

+0

或'str_replace '。 –

回答

3

让它看起来更复杂一点,展望未来可能会很明智。如果您将实现部件移除到单独的类中,则可以将实际使用情况和翻译的实现分开。如果您计划稍后使用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); 
    } 
} 
+0

好的。 +1 .. –

+0

我怎样才能做到更多的变量?例如带有这段文字的文字:“你好[阿米尔]欢迎来到我们的网站”另一篇带有这段文字的文字“嘿[阿米尔]!你确定需要为这篇文章运行[删除]动作?”。 (注意:[变量]) –

+0

嗯,问题是,我认为,错误处理。如果做得对,你应该知道你是否可以完成对该功能的请求,并以其他方式处理该问题。但是,您可以将值作为数组或类似的东西。我可以补充一点,但最终你需要带回家的思路,并从那里开始。 – Nanne

0

阿米尔·阿加,

当你通过打电话或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

+0

Kheyli mamnoonam azetoon,这是好的,但我需要从另一个文件包括! –

+0

我把它作为一个例子不是解决方案。 您必须在'index.php'文件中将'$ useName'更改为'$ userName'。 –

0

做一个功能之一langen.php

<?php 
function lang($username) 
{  
$lang['hello'] = $username; 
echo $lang['hello'];   
} 
?> 

该函数

<?php 
require_once("lang-en.php"); 
lang('arun'); 
?> 
0

的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 
?> 

这是一个简单的方法太了解如何传递变量有点长的方式,但我不想这样组合,你可以看到它是如何运作的,你也可以做一些阅读有关会议的页面之间传递变量这是不包括

相关问题