2016-07-08 53 views
0

我正在使用PHP。網站的內部化 - 最佳規則

我有我需要翻譯法語,意大利語,西班牙語,...

於是我想出了兩種解決方案的系統。

解決方案1: 所有語言字符串都存儲在數據庫中,以便管理員進行簡單的編輯。所以在每個頁面上我都需要調用這個表來獲取正確的字符串。

解決方案2: 與第一個相同,只是每次更改後都會生成一個Json文件。這個Json文件將在每個頁面上調用以打印正確的字符串。

我的解決方案的女巫是最好的請求?

也許,另一種解決方案存在嗎?

謝謝。

+1

的[最佳實踐多語言網站(http://stackoverflow.com/questions/19249159/best-practice-multi-language-website) –

+0

是基於任何框架的系統可能的複製? – Edu

+0

@Edu:不,它是完整的PHP。 – miami

回答

0

使用數據庫:您可以將問題和答案放在一個列中有各種語言答案的表格中 - 它足夠簡單,然後設置一個RBAC模塊以允許特定用戶添加新的問題和答案。使用這種

questions_table: 
    question_id (int) 255 PK AUTO_INCREMENT 
    question (varchar) 160 

answers_table: 
    answer_id (int) 255 PK AUTO_INCREMENT 
    question_id (int) 255 
    language_id (int) 255 
    answer (varchar) 

language_table: 
    language_id (int) 255 PK AUTO_INCREMENT 
    language (varchar) 30 

user table and user answer table also 

,你就可以使用INNER JOIN SQL語句表之間的引用,那麼所有你需要做的就是創建一個驅動程序對象爲你連接(最好是PDO),然後回答問題,記錄對象登記,管理和前端顯示。

1

我曾經做過多種語言的項目。這是一個很大的麻煩。我不是在下面推薦我的方法,而是向你展示它作爲如何實現的一個例子。

lang.en.php

$lang = array(); 

$lang['menu'] = array(
    'home'  => 'Home', 
    'projects' => 'Projects', 
    'about' => 'About', 
    'contact' => 'Contact' 
); 

$lang['some_other_section'] = array(
    'some_value' => 'some value', 
    ... 
    ... 
); 

lang.no.php

$lang = array(); 

$lang['menu'] = array(
    'home'  => 'Hjem', 
    'projects' => 'Prosjekter', 
    'about' => 'Om', 
    'contact' => 'Kontakt' 
); 

$lang['some_other_section'] = array(
    'some_value' => 'En annen verdi', 
    ... 
    ... 
); 

現在的大麻煩是使用變量來寫應用程序中的所有文本,然後將它們添加和翻譯在每個語言文件中。

的index.php

<div class="menu"> 
    <a href="#"><?php echo $lang['menu']['home']; ?></a> 
    <a href="#"><?php echo $lang['menu']['projects']; ?></a> 
    <a href="#"><?php echo $lang['menu']['about']; ?></a> 
    <a href="#"><?php echo $lang['menu']['contact']; ?></a> 
</div> 

你將不得不設置「激活」的語言在頁面初始化一些地方。即:

<?php 
    session_start(); 

    if($_SESSION['lang'] == "en") { 

    require('lang.en.php'); 

    } elseif($_SESSION['lang'] == "no") { 

    require('lang.no.php'); 

    } 

?> 
<html> 
<head> 
... 
... 
+0

在會話中使用switch語句而不是if,使其更易於管理 – KDOT

+0

當然。這只是爲了明確解釋示例代碼。 – hesonline

+0

仍然是一個很好的例子,你應該把它改造成面向對象的方法,並使用數據庫而不是加載php文件;)儘管 – KDOT