星期一, 18 8 月, 2025
No Result
View All Result
育心文具行

育心文具行

  • 首頁
  • 心得x體驗
  • 筆記x備忘
  • 閒談x雜記
  • 我的工具箱
  • 關於我
育心文具行
  • 首頁
  • 心得x體驗
  • 筆記x備忘
  • 閒談x雜記
  • 我的工具箱
  • 關於我
No Result
View All Result
育心文具行
Home 筆記x備忘

PHP 網站的翻譯 / 多語系,批次翻譯 php array 的方法

2024-06-17
in 筆記x備忘
Reading Time:3 mins read
A A
0

Update 2024-06-17

拜 AI 科技之賜,現在生成型的文字 AI 已經足以處理 php array 翻譯了,我使用 ChatGPT 付費版來處理翻譯,操作上就貼文件給他,直接下指令請他翻譯,參考:

ChatGPT

chatgpt.com

A conversational AI system that listens, learns, and challenges

— 舊文 —-

PHP 的多語系或是翻譯實作的形式各式各樣,像是 PO/MO 翻譯檔案、寫在 SQL 資料庫、靜態檔案或是寫在 PHP 檔案之中的作法,作法之多,從 PO/MO 檔案轉換的線上工具可以一窺一二。

這邊使用 Codeigniter 的語系系統,是用 PHP array 來處理的,這樣的形式要批次處理前置翻譯有點困難,如果要是用翻譯的 API 也要額外付費,於是用了一些比較迂迴的作法。

首先擁有的翻譯資源:

  • Poedit 軟體。因為之前有需要大量使用 wordpress 功能,需要翻譯外掛和布景主題,所以有買斷一個個人使用版本。這套工具可用來翻譯 PO/MO 格式的檔案。
  • LEMP 本地開發環境。

實作的 SOP 是這樣的:

  1. 將翻譯的 PHP 檔案全部轉換/產生新的 PO 檔案。
  2. 透過 Poedit 軟體做前置翻譯。
  3. 透過軟體內建搜尋翻譯功能初步作一次調整。
  4. 確認 PO 檔案放在和 PHP 檔案是同一個資料夾。
  5. 取出將 PO 檔案翻譯內容,替換原 PHP檔案內容。
  6. 做檢查微調。檢查 ‵/‵ 字符等兩個檔案,或是其他可能會有不同的地方。

附上其中 SOP 的 1. 和 5. 的檔案原始碼:

# php2po.php
<?php 

$PATH = dirname(__FILE__) . "/路徑";
$files = glob($PATH . '*.php');

foreach ($files as $file) {
    $lang = [];
    include $file;

    $fh = fopen($file . ".po", 'w');
    fwrite($fh, "#\n");
    fwrite($fh, "msgid \"\"\n");
    fwrite($fh, "msgstr \"\"\n");

    foreach ($lang as $key => $value) {
        $key = addslashes($key);
        $value = addslashes($value);
        fwrite($fh, "\n");
        fwrite($fh, "#. $key\n");
        fwrite($fh, "msgid \"$value\"\n");
        fwrite($fh, "msgstr \"$value\"\n");
    }
    fclose($fh);
}

# po2php.php
<?php
function get_replace_array($file)
{
    $input_lines = file_get_contents($file);
    preg_match_all('/msgid \"(.*)\"/', $input_lines, $msgids);
    preg_match_all('/msgstr \"(.*)\"/', $input_lines, $msgstrs);
    $arr = [];
    for ($i = 1; $i < count($msgids[1]); $i++) {
        // 第一個是空值
        $arr[$msgids[1][$i]] = $msgstrs[1][$i];
    }
    // var_dump($arr);die();
    return $arr;
}

$PATH = dirname(__FILE__) . "/路徑";
$files = glob($PATH . '*.php');

foreach ($files as $file) {
    $lang = [];
    include $file;

    $replace_array = get_replace_array($file . ".po");

    $php_file = file_get_contents($file);
    $_lang = [];
    foreach ($lang as $key => $value) {
        $_lang[$key] = $value;

        $value_tmp = addslashes($value);
        if (isset($replace_array[$value_tmp])) {
            $_lang[$key] = $replace_array[$value_tmp];
        }

        if ($value != $replace_array[$value]) {
            echo $key . ", " . $_lang[$key] . "
\n";
        }
    }

    file_put_contents($file, '<?php $lang = ' . var_export($_lang, true) . ';');
}

需要注意幾件事情:

  1. 買斷版的 Poedit 也是有翻譯數量上限的,不過暫時夠用就是。
  2. Poedit 在前置翻譯之前記得設定好語系,除了語系之外可以儘量讓檔案小一點,不用特別標記其他的 meta ,會產生多餘的註解檔案。
  3. 在本機操作 PHP 轉換時要注意一下 RAM 是否夠用,
  4. 檔案轉換的路徑需要自行調整,PO 檔案的命名是以原始 PHP 檔案直接加上 .po 副檔名。
  5. 如果轉換出來的 po 檔案有問題無法開啟,建議放上 po editor online 上檢查看看,或是轉換一下下載繼續處理。
  6. 如果真的無法翻譯,檔案量不大的話可以把變數拆行丟 google 翻譯 是可行的,要注意 key 值的命名規則,不要被翻譯了。
Share22Tweet14
Previous Post

[快速筆記] 信件RWD

Next Post

檢查與轉換檔案編碼,使用 Chrome 瀏覽器和 Sublime 3 文字編輯器

Related Posts

筆記x備忘

LLM 生成參數清單與說明

這是一篇關於 LLM 生成參數的清單/說...

2025-08-15
100
心得x體驗

使用 google 的 Gemini CLI 來製作字幕

技術心得文摘要 本文介紹如何使用 Goo...

2025-08-10
100
閒談x雜記

2025-07-29 社交模式檢討

整理回想一些這週的對話,在檢討也許自己應...

2025-07-29
100
閒談x雜記

2025-07-25 社交模式檢討

2025-07-25 鬼門開了快一半,也...

2025-07-25
100
心得x體驗

2025-07-12 N8N Workshop 筆記心得

N8N Workshop 筆記心得 主講...

2025-07-13
100
筆記x備忘

我的威力彩夢。Telegram 樂透彩機器人

在 2025 年 6 月 24 日台灣威...

2025-06-27
100
Load More
Next Post

檢查與轉換檔案編碼,使用 Chrome 瀏覽器和 Sublime 3 文字編輯器

壓力測試 - ab(ApacheBench)指令的操作與結果說明

Hestiacp 安裝筆記

全站搜尋

No Result
View All Result

關於我

育心文具行

Jerry Lin

程式設計師

育心文具行是一家文具店,老闆的小兒子是一個設計師,職業是設計程式,興趣是設計人,倒是還沒有實作的機會。
--
所有的相遇都不是巧合。
在廣告公司待了三年有兩年多在做內容產品,離職後繼續在內容產業走了四年多,最後選則離開台灣的公司體制在家 SOHO ,碰上了 2020 年疫情才知道原來自己這是走在時代的潮流尖端。 感謝許多老闆和貴人相助,至今目前尚能存活,在台北街頭努力著。

近期文章

  • LLM 生成參數清單與說明
  • 使用 google 的 Gemini CLI 來製作字幕
  • 2025-07-29 社交模式檢討
  • 2025-07-25 社交模式檢討
  • 2025-07-12 N8N Workshop 筆記心得

分類

  • 心得x體驗 (47)
  • 筆記x備忘 (79)
  • 閒談x雜記 (15)

贊助買咖啡

Facebook Instagram RSS

標籤

android ci4 cloudflare Codeigniter codeigniter 4 flutter git ios linode linux MAC macos nginx php plugin QBQ!問題背後的問題 server work sublime sublime text vps vue.js vue3 What if What If? 如果這樣,會怎樣? wordpress 備份 原則 團隊,從傳球開始 團隊,從傳球開始:五百年都難以超越的 UCLA 傳奇教練伍登培養優越人才和團隊的領導心法 外掛 如果這樣,會怎樣?:胡思亂想的搞怪趣問 正經認真的科學妙答 媒體識讀 工作的原則 心得 意志力 活動心得 灰階思考 第三部分 第二部分 第四部分 股癌 自慢10 自慢10:18項修練 謝孟恭 讀書心得

文章分類

  • 心得x體驗 (47)
  • 筆記x備忘 (79)
  • 閒談x雜記 (15)

近期文章

  • LLM 生成參數清單與說明
  • 使用 google 的 Gemini CLI 來製作字幕
  • 2025-07-29 社交模式檢討
  • 2025-07-25 社交模式檢討
  • 2025-07-12 N8N Workshop 筆記心得

近期留言

  • 「Bolin Lai」於〈WordPress 之中藍新金流開啟後, Elementor 外掛有時會打不開的問題處理〉發佈留言
  • 「Jerry Lin」於〈WordPress 之中藍新金流開啟後, Elementor 外掛有時會打不開的問題處理〉發佈留言
  • 「JCL」於〈WordPress 之中藍新金流開啟後, Elementor 外掛有時會打不開的問題處理〉發佈留言

文章月曆

2025 年 8 月
日 一 二 三 四 五 六
 12
3456789
10111213141516
17181920212223
24252627282930
31  
« 7 月    

© 2020 hipster.crazyjerry.studio - a blog about experience, notes and nonsense, by Jerry Lin.

No Result
View All Result
  • 首頁
  • 心得x體驗
  • 筆記x備忘
  • 閒談x雜記
  • 我的工具箱
  • 關於我

© 2020 hipster.crazyjerry.studio - a blog about experience, notes and nonsense, by Jerry Lin.