2014-06-12 130 views
1

我擁有不同語言的網頁。我爲頁腳做了一個包含。最簡單的方法可能是爲每種語言設置不同的頁腳。但是,是否有可能只有一個頁腳,並改變每種語言中不同的幾句話?不同語言的頁腳

在所有頁面放在同包括:

<?php include('footer.php'); ?> 

然後,在包括只是改變什麼不同。喜歡的東西:

<footer> 

    <?php echo $text; ?> <br><br> 

</footer> 
</body> 
</html> 

<?php 
if ('<html lang="en">') 
    $text = 'Some text in English'; 
elseif ('<html lang="fr">') 
    $text = 'Français'; 
?> 

(在每一頁我有HTML語言=)

有什麼更好的方式有不同的語言頁腳?

(我剛學PHP,所以請,只是幫助我的基礎知識,從哪裏開始)

+1

PHP不Javascript,只是在頂部聲明變量並在頁腳上使用等號運算符進行比較 –

+0

爲什麼是負面的?我應該做的更好嗎? – Nrc

回答

1

好吧,首先您需要爲您希望支持的所有語言創建翻譯文件。將它們存儲在「/lang/en.php」和「/lang/fr.php」中。

「郎/ en.php」

<?php 
    return [ 
     "title" => "My site", 
     "welcome" => "Welcome", 
     "goodbye" => "Goodbye" 
    ] 
?> 

「郎/ fr.php」

<?php 
    return [ 
     "title" => "Mon site", 
     "welcome" => "Bienvenue", 
     "goodbye" => "Au revoir" 
    ] 
?> 

接下來,包括相應的語言文件在你的PHP頁面:

「 index.php「

<?php 
    $locale = $_SESSION['locale']; // this is "en" or "fr", depending on a choice the user made earlier 
    $lang = require("/lang/$locale.php"); // load "/lang/en.php" or "/lang/fr.php" 
    $user = $_SESSION['username']; // e.g. "Bart" 
?> 
<html> 
    <head> 
     <title><?php echo $lang['title']; ?></title> 
    </head> 
    <body> 
     <?php include('header.php'); ?> 
     <main>content</main> 
     <?php include('footer.php'); ?> 
    </body> 
</html> 

而我n您的頁眉/頁腳您可以使用$ lang:

「標題。PHP的」

<header> 
    <p><?php echo $lang['welcome'] . ', ' . $user; ?></p> 
</header> 

知道,你應該包括你的語言文件只在用戶將直接瀏覽網頁是很重要的(即不包括在像header.php中局部視圖)

+0

我不明白你在lang/fr.php和land/en.php中放了什麼,爲什麼只是返回[],這是什麼,函數,數組?有沒有什麼缺失? – Nrc

+0

@Nrc這是一個關聯數組,它將諸如「再見」之類的標籤映射到「Au revoir」。然後你可以簡單地使用該標籤(即'$ lang ['goodbye']'),它將被替換爲映射的字符串(即'Au revoir') – Bart

+0

好的,現在我明白了。放入外部文件$ lang = array(每個數組)並且在需要時調用它會更簡單:require「lang/fr.php」;對不起,如果它太基本了,我只是在學習。 (我一直在尋找PHP返回一個數組,我找不到它,代碼編輯器在返回點 – Nrc

0

您可以設置包含的語言,如會話:

<?php 
    session_start(); 
    $_SESSION['language'] = "EN"; 
?> 

然後在頁腳:

<?php 
    switch($_SESSION['language']) { 
     case 'EN': 
      $sentences['site_slogan'] = "This is your site slogan"; 
      $sentences['site_messag'] = "This is your site message"; 
     break; 
     case 'FA': 
      $sentences['site_slogan'] = "This is your site slogan in FA"; 
      $sentences['site_messag'] = "This is your site message in FA"; 
     break; 
    } 
    echo $sentences['site_slogan']; 
    echo $sentences['site_messag']; 
+0

我不明白爲什麼使用$ sentences ['site_slogan']?爲什麼不只是$ site_slogan =「var的內容」? – Nrc

1

您可以創建一個窮人的翻譯功能:

function translate($sentence, array $vars = null, $lang = 'en') { 
    static $table = array(); 
    if (! isset($table[$lang])) { 
     $table[$lang] = require(ROOT."/lang/{$lang}.php"); 
    } 
    $trans = isset($table[$lang][$sentence]) ? $table[$lang][$sentence] : $sentence; 
    if (! empty($vars)) { 
     $trans = strtr($trans, $vars); 
    } 
    return $trans; 
} 

然後,您可以創建一些語言文件,如:

<?php 
// ROOT/lang/de.php 
return [ 
    'Welcome :name' => 'Willkommen :name', 
    'Thank you'  => 'Danke', 
]; 

然後在腳本中可以翻譯的東西:

<header> 
    <?php echo translate('Welcome :name', [':name' => 'Bob'], 'de') ?> 
</header> 

而不是使用功能,你也可以只包括語言文件,然後使用它。

<?php 
// some-page.php 
$lang = require(ROOT."/lang/{$_SESSION['user.lang']}.php"); 
$name = $_SESSION['user.name']; 
?> 
<header> 
    <?php echo str_replace(':name', $name, $lang['Welcome :name']) ?> 
</header> 

這將需要你做更多的工作,但如果你發現它更符合你的喜好,那麼好吧。

+0

爲什麼不簡單地''lang = require(「lang/en.php」); echo $ lang [「greeting」];'? – Bart

+0

@Bart因爲那會每次加載語言文件時間的功能重刑被使用。最好將它粘貼到內存中(使用['static'變量'$ table'](http://php.net//manual/en/language.variables.scope.php#language.variables.scope.static ))比多次加載文件。 –

+2

不,但我的意思是*而不是*有一個函數,只需將第一個語句放在「根」PHP文件的頂部(僅一次),然後在所有文件中簡單地使用'$ lang'就好像它是一個全局變量? – Bart