php多語言
⑴ php如何實現一個網站多種語言
你好,做個語言包就好了,選擇英語就調用英文的語言包
希望能解決你的問題,望採納
⑵ 怎樣做php的多語言網站啊 跪求思想
建議你找一個支持多語言的框架來做,這樣簡單一些。多語言的思路很簡單,但是實際處理的時候很多具體的問題,因此不建議新手自己做。
思路參考以下示例
<?php
session_start();
if (isset($_SESSION['language']))
$language = $_SESSION['language'];
else
$language = 'zh'
$messages = array(
'zh' => array(
'str1' => '測試',
),
'en' => array(
'str1' => 'test',
),
);
?>
<html>
<body>
<h2><?php echo $messages[$language]['str1']?></h2>
</body>
</html>
不管多復雜的多語言程序,其核心都是這個,只不過翻譯內容一般是存放在文件或者資料庫中,並緩存起來,但是最終使用的時候還是會先形成如上的數組,然後輸出的。
以下是一個js版本的多語言函數,供參考
LANGUAGE = 'zh'
Languages = {'zh': {'str1': '測試', 'str2': '用戶 %name% 你好'}};
function translate(messageId, parameters) {
if (messageId === null) {
messageId = "FLAG_NULL";
}
var language = LANGUAGE;
if (Languages[language] && Languages[language][messageId]) {
messageId = Languages[language][messageId];
}
if (parameters) {
for ( var i in parameters) {
messageId = messageId.replace(eval('/%' + i + '%/g'), parameters[i]);
}
}
return messageId;
}
alert(translate('str2', {name: '張三'}));
⑶ thinkphp實現多語言切換時,資料庫數據如何也實現多語言
有兩種情況,分析如下:
1、需要中英文切換內容較少
假設我們現在正在操作的是文章表,需要根據用戶的語言環境輸出中文或英文的文章內容。
在文章表中多添加一個欄位用於存儲英文的內容,發布文章的頁面,同時上傳中英文內容即可,然後服務端通過thinkphp的多語言標識來決定讀取中文內容或者英文內容。也可以在前端模板中進行識別。
2、需要中英文切換內容較多
如果某個數據表的多個欄位或者多個數據表都需要做中英文切換,顯然在數據表裡添加多個欄位的方式就不太合適了,那將導致數據表欄位太多,不方便管理,可以採用多數據表的方式,將內容完整的分為兩份。就是把涉及到中英文切換的數據表多拷貝一份而已,裡面的數據是英文的
。管理員後台,可以同時存儲中英文內容,也可以分開存儲,你自己決定就好,讀取時同樣使用thinkphp的多語言標識判斷用戶的語言環境,來決定查詢中文表還是英文表。
另外,如果整站都需要中英文切換,也可以做分布式資料庫!
一切根據實際需求決定!
⑷ php 多語言切換
語言切換如果考慮用戶體驗的話就相對有點麻煩,分離語言模塊保存在資料庫或者指定文件中然後用php調用指定的語言是比較常用的,但是你要知道每種語言都有差異,這樣會導致樣式不一致,所以如果想要更好的用戶體驗最好也替換一下對應的css樣式。
⑸ php建站怎麼實現支持多種語言急啊,!!
最簡單的方法
用 php 的 define 實現,用全局變數也可以。
語言1.php
<?php
define('HELLO', '你好');
...
語言2.php
<?php
define('HELLO', 'hello');
...
語言3.php
<?php
define('HELLO', 'こんにちは');
...
根據選擇的語言 include 或者 require 以上文件之一即可。
PHP 代碼:
<?php echo HELLO; ?>
比較正宗的做法是用 gettext,過程相對復雜,要用專門的po編輯器編輯語言文件。
補充:
用 gettext 實現多語言的典型案例是 wordpress,你可以看看它是怎麼實現的。
⑹ 如何phpcms v9 多語言
因為phpcms v9的功能非常豐富,我們可以使用多種途徑來實現多語言,這里以實現一個中英雙語站為例來說下思路:
方法一、使用phpcms中的語言包動態切換中英文語言包實現多語言,想要什麼語言就創建什麼語言包即可,關鍵是要知道在做模板界面時裡面的文字不能直接寫死了而是使用L函數來調用對應的詞彙,比如「用戶中心」我們可以寫成「{L('member_center')}」;
方法二、使用phpcms的多站點功能來在後台創建兩個站點,並分別綁定對應的域名或目錄。然後一個使用英文模板一個使用中文模板即可;
位置:後台-設置-站點管理-添加站點。
方法三、安裝兩個phpcms系統但是使用一個phpsso模塊來實現用戶互通(在安裝系統時大概第三步有個選項是選擇「安裝全新的phpcms系統」還是「已有phpsso模塊」,第二次安裝時選擇後者即可),兩個系統分別是英文站點和中文站點。
PS:
1.語言包位置:/phpcms/languages/... 語言包以數組形式保存。
2.使用語言包來實現多語言與後兩種辦法相比只需要一套模板,但是限制是只能用於動態訪問,如果是要生成靜態頁還是使用後兩種辦法吧。
⑺ php 實現多語言切換的原理!
創建不同的語言包(文件),這里可以設置成數組。使用時包涵指定的語言包,輸出時用語言數組變數來輸出。
⑻ thinkphp3.0如何實現多語言切換
ThinkPHP內置多語言支持,如果你的應用涉及到國際化的支持,那麼可以定義相關的語言包文件。任何字元串形式的輸出,都可以定義語言常量。要啟用多語言功能,需要配置開啟多語言行為(確保你下載的是完整版本,如果不是需要單獨下載多語言檢測行為擴展),在項目的配置目錄下面的行為定義文件tags.php中,添加:
return array(
// 添加下面一行定義即可
'app_begin'=>array('CheckLang')
);
表示在app_begin標簽位置執行多語言檢測行為。
可以為項目定義不同的語言文件,框架的系統語言包目錄在系統框架的Lang目錄下面,每個語言都對應一個語言包文件,系統默認只有簡體中文語言包文件zh-cn.php ,如果要增加繁體中文 zh-tw或者英文en,只要增加相應的文件。
語言包的使用由系統自動判斷當前用戶的瀏覽器支持語言來定位,如果找不到相關的語言包文件,會使用默認的語言。如果瀏覽器支持多種語言,那麼取第一種支持語言。
ThinkPHP的多語言支持已經相當完善了,可以滿足應用的多語言需求。這里是指的是模板多語言支持,數據的多語言轉換(翻譯)不在這個范疇之內。ThinkPHP具備語言包定義、自動識別、動態定義語言參數的功能。並且可以自動識別用戶瀏覽器的語言,從而選擇相應的語言包(如果有定義)。例如:
throw_exception('新增用戶失敗!');
我們在語言包裡面增加了ADD_USER_ERROR 語言配置變數的話,在程序中的寫法就要改為:
throw_exception(L('ADD_USER_ERROR'));
也就是說,字元串信息要改成L方法和語言定義來表示。
項目語言包文件位於項目的Lang目錄下面,並且按照語言類別分子目錄存放,在執行的時候系統會自動載入,無需手動載入。
具體的語言包文件命名規范如下:
項目公共語言包
語言目錄/common.php
項目分組語言包
語言目錄/分組名.php
項目模塊語言包
不存在分組情況:語言目錄/模塊名(小寫).php
存在分組的情況:語言目錄/分組名_模塊名(小寫).php
語言子目錄採用瀏覽器的語言命名(全部小寫)定義,例如English (United States) 可以使用en-us作為目錄名。如果項目比較小,整個項目只有一個語言包文件,那可以定義common.php文件,而無需按照模塊分開定義。
語言包文件可以按照模塊來定義,每個模塊單獨定義語言包文件,文件名和模塊名稱相同,例如:
Lang/zh-cn/user.php 表示給User模塊定義簡體中文語言包文件
Lang/zh-tw/user.php 表示給User模塊定義繁體中文語言包文件
語言文件定義
ThinkPHP語言文件定義採用返回數組方式:
return array(
'lan_define'=>'歡迎使用ThinkPHP',
);
要在程序裡面設置語言定義的值,使用下面的方式:
L('define2','語言定義');
$value = L('define2');
上面的語言包是指項目的語言包,如果在提示信息的時候使用了框架底層的提示,那麼還需要定義系統的語言包,系統語言包目錄位於ThinkPHP目錄下面的Lang目錄。
通常多語言的使用是在Action控制器裡面,但是模型類的自動驗證功能裡面會用到提示信息,這個部分也可以使用多語言的特性。例如:
原來的方式是把提示信息直接寫在模型裡面定義
array('title','require','標題必須!',1),
如果使用了多語言功能的話(假設,我們在當前語言包裡面定義了' lang_var'=>'標題必須!')
還可以這樣定義模型的自動驗證
array('title','require','{%lang_var}',1),
如果要在模板中輸出語言變數不需要在Action中賦值,可以直接使用模板引擎特殊標簽來直接輸出語言定義的值:
{$Think.lang.lang_var}
可以輸出當前選擇的語言包裡面定義的 lang_var 語言定義