翻译一个网页使用数组函数


Translating a web page using Array function

我想使用PHP的数组函数来翻译一个网站。我已经创建了PHP文件,其中包含要翻译的所有文本的数组。

<?php 
//ESPANOL
$lang = array(
              'work' => 'Trabajo'
              'packaging' => 'Empaque'
             );

然后我在nav。php文件中调用它们,在内容部分也会调用它们

<?php include('includes/languages/es.php'); ?>
<a href="#"><?php echo $lang['work']; ?></a>

都很简单。

我想知道的是如何在不编辑HTML的情况下切换这些数组文件,这样我就不必链接到另一个'index_es.php'等。我知道链接是这样的,但我不知道它是如何工作的。

<a href="index.php?es.php>Español</a>|<a href="index.php/?en.php">English</a>

我猜我需要包括另一个文件,其中包括语言文件,然后链接可以从中选择,但我不知道代码是什么。它是否涉及在链接上方包含一个"lang_directory",然后以某种方式从那里包含??

**我也想避免使用Zend/Gettext翻译,因为我想学习这个inside out。

您可以创建包含目标语言的另一个维度。然后传递一个GET参数来选择该语言。如果语言不被认可,你可以退回到英语。这是一个例子。

$languages = array(
    'en' => array(
        'work' => 'work',
        'packaging' => 'packaging'
    ),
    'es' => array(
        'work' => 'Trabajo',
        'packaging' => 'Empaque'
    ),
);
// default language to use when the requested isn't found
$defaultLanguage = 'en';
// language requested via GET
$requested = $_GET['locale'];
// use the requested language if it exists, otherwise the default language
$language = isset($languages[$requested]) ? $requested : $defaultLanguage;
// our translations
$translation = $languages[$language];
// "work" translated based on the language
echo $translation['work'];

Español的链接是这样的

index.php?locale=es

我会保留你的数组系统,将链接更正为index.php?lang=en之类的东西,然后根据lang参数包括你的文件:

if ( isset($_GET['lang']) && file_exists('includes/languages/'.$_GET['lang'].'.php') ){
  include_once('includes/languages/'.$_GET['lang'].'.php');
}

如果你想在你的会话中保留语言参数,做这样的事情:

if ( isset($_GET['lang']) && file_exists('includes/languages/'.$_GET['lang'].'.php') ){
  $_SESSION['lang'] = $_GET['lang'];
}
if ( !isset($_SESSION['lang']) ){
  // Default language
  $_SESSION['lang'] = 'en';
}
include_once('includes/languages/'.$_SESSION['lang'].'.php');

一种方法是使用会话。

  1. 创建一个lang.php文件,用于在语言之间进行切换。

    <?php
            //Start session
            session_start();
            //Do we get a lang variable
            if (isset($_GET['lang'])) {
                    //Make sure we only get the lang filename
                    $lang = basename($_GET['lang']);
                    //If the file exists, then save it to session
                    if (file_exists('includes/languages/' . $lang . '.php'))
                            $_SESSION['lang'] = $lang;
            }
            //If the client were refered here (via hyperlink) send them back
            if (isset($_SERVER['HTTP_REFERER']))
                    header('location: ' + $_SERVER['HTTP_REFERER']);
    ?>
    
  2. 在你想要多语言的文件头,插入。

    <?php
            //Start session
            session_start();
            //Default language
            $lang = 'english';
            //If the client have set a language, use that instead
            if (isset($_SESSION['lang']))
                    $lang = $_SESSION['lang'];
            //Load language file
            include('includes/languages/' . $lang . '.php');
    ?>
    

更改语言的链接将像这样:

<a href="lang.php?lang=espanol">Español</a>|<a href="lang.php?lang=english">English</a>

Out还可以从lang.php文件中取出代码,放入一个包含的文件中,该文件将在包含语言文件之前加载,并删除HTTP_REFERER重定向。

更改语言的链接将像这样:

<a href="?lang=espanol">Español</a>|<a href="?lang=english">English</a>