分類: 筆記x備忘

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

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

    — 舊文 —-

    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 值的命名規則,不要被翻譯了。
  • [快速筆記] 信件RWD

    如果有需要信件 RWD 功能,現在有一個框架可用,叫做 mjml:

    MJML – The Responsive Email Framework
    The only framework that makes responsive email easy. MJML is a markup language designed to reduce the pain of coding a responsive email.

    這裡有線上編輯器和各種模版可選擇:

    Responsive Email Templates
    Ready-to-use and free responsive email templates coded in MJML.

  • Mac 使用 Homebrew 安裝 php 7.3

    有時會需要更改 Mac 內建的 PHP 版本或是新增一個 PHP 來使用,這時候會需要使用 Homebrew 來安裝:

    Homebrew
    The Missing Package Manager for macOS (or Linux).

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

    安裝好 Homebrew 之後,安裝 php 7.3 會發現已經不支援了,參考 stackoverflow 會得知需要用別的來源:

    brew tap shivammathur/php
    brew install shivammathur/php/[email protected]

    注意 tap 動作只需要成功執行一次就行。

    安裝時可能會遇到的注意事項:

      1. Xcode 會提示需要更新(如果都沒更新的話),只需要按照提示更新即可。
      2. 會得到 php 的位置資訊,例如我安裝以後得到的位置就是
        /usr/local/opt/[email protected]/bin/php
      3. 要確認 install 之後有沒有正確 link ,我需要兩個版本,原版本是 8.1.14 所以並不會正確執行,也沒有必要執行。參考這裡,另外建議檢查一下 ~/.bash_profile 之中有沒有指定 PATH。

    2023-10-23 update:

    現在 PHP 已經更新到 8.2 啦,上述 brew 的方式依然可以更新,安裝時更換版本號碼即可。安裝成功後檢查 ~/.bash_profile 的 PATH 更新為新版本,之後刷新指令 source ~/.bash_profile 就行的。

  • HTTrack Website Copier 砍站工具在 MacOS 上實現

    HTTrack 是一個砍站軟體,他在 windows 上有 GUI 介面,不過在 Mac 上只有 command line 介面,也不難處理,對於下載網頁的靜態資源還是不錯用的。

    安裝和執行方法參考:

    [MAC] HTTrack Website Copier砍站軟體!移植到MAC的安裝與使用教學
    說到砍站軟體,大家第一印象不外乎就是HTTrackWebsiteCopier,說到這套砍站軟體,算是最老牌同時也是最簡易好上手的砍站軟體,說到這一個…

    滿詳盡的,這邊就不贅述。

    要注意的重點:

    1. 使用 Homebrew 安裝,在教學網頁中第一步驟為安裝 Homebrew 過程。 Homebrew 官網參考請點這裡
    2. 有需要其他安裝版本的話可以參考官網下載(這塊沒特別試過,請小心服用)。
    3. 雖然是廢話,不過還是要提醒一下,砍站軟體並不能完整複製網頁/網站,並非砍下來直接打開看就是一模一樣的。
  • PHP 源碼掃描實作,使用 SonarQube

    PHP 源碼掃描實作,使用 SonarQube

    PHP 的原始碼弱點掃描實作,這邊使用 SonarQube 的社區版,這邊實作是參考這個連結,使用 MacOS 實現。

    首先先提供相關資源網站:

    SonerQube 官網和下載網址:

    Download | SonarQube
    Get the latest LTS and version of SonarQube the leading product for Code Quality and Security from the official download page.

    SonerQube 的套件 sonarscanner 安裝文件:

    JDK 官網下載:

    JDK 安裝教學:

    MAC中安裝JDK、Maven
    一、安裝JDK 1、開啟JDK官網,選擇對應版本,並選擇maxOS系統,此處以Java 8為例。 …

    下載 SonarQube 社區版解壓縮後,在 command line 中找到執行的指令,像是 MacOS 是在資料夾/bin/macosx-universal-64/ 裡面。進入資料夾中輸入:

    ./sonar.sh console

    即可在瀏覽器 http://localhost:9000/ 中開啟網頁。預設帳號密碼 admin/admin 登入後更換密碼。

    以下重點整理:

    1. 新增專案,選擇語言等操作完成後,會產生一組程式碼,該組程式碼是提供進入要掃描的資料夾根目錄中使用的。
    2. 在掃描之前,系統會提示需要安裝 SonarScanner ,請選擇 MacOS 版本,推薦加入 bash 中方便運作,參考這裡
    3. 需要先安裝 JDK ,無法在 root 環境使用。
    4. 掃描後看結果可能心情會不太好,不過系統提到的都滿有道理的,建議改一下。
  • WordPress 個古老故事 – jQuery 使用

    WordPress 開發時會發現,使用前端的 jQuery 不能用錢字符號($),這是一個稱之為兼容模式的東西,會比較安全,但是也會發現說如果一直打 “jQuery” 這串字打久了真的會很累。整個前端文件也會落落長。

    幾個方法:

    (function($) {
    console.log($('#隨便一個 ID').length);
    })( jQuery );

    或是:

    jQuery(document).ready(function( $ ) {
    	console.log($('#隨便一個 ID').length);
    });
  • 一些常用的工具網站分享

    常用很多工具,每次都要 Google ,雖然關鍵字已經記起來的,不過還是列一個列表比較心安(?

    1. Python 線上測試,這是 2.7 版的,可以自行切換版本。這個網站還有很多程式語言線上測試的工具,可以參考選用。
    2. JSON 解析。很多 JSON 資料需要解析成能看的格式。
      Json Parser Online
      Analyze your JSON string as you type with an online Javascript parser, featuring tree view and syntax highlighting. Processing is done locally: no data send to server.
    3. JSON 編輯器。製作 API 文件需要。
      JSON Editor Online – view, edit and format JSON online
      JSON Editor Online is a web-based tool to view, edit, format, transform, and diff JSON documents.
    4. MD5 產生器。這網站中也有提供許多編碼或是加解密的工具。
      MD5 轉換 – 將字串轉換為MD5 – ez2o Studio
      利用線上將字串轉換為MD5,不需要再另外寫程式處理。

      另外有時會需要有更安全的 MD5 hash ,可以用這個 Chrome 套件:
      MD5 Hasher
      Chrome extension to generate MD5 hashes
    5. 動態指定尺寸產生圖片。這是說明文件,可以透過底下說明文件的 API 取得指定尺寸的圖片,作為測試圖片使用。
      Dynamic image resizing
      Learn how to dynamically resize & adapt images to fit the page layout by changing URL parameters. No image processing server is required.
    6. Jerry 這裡。 這有些 email 測試,QR Code 掃描等工具,是自己做有用到的功能,不定期更新。社交登入以後可以使用網站排程檢查的功能。
    7. Beautify CSS / HTML / JS 。 把壓縮過的 js / html / css 還原。
    8.  JS / CSS 壓縮。因為比較不常用 html 壓縮,所以目前用到這個。
      Minify JS and CSS online, or include the minifier in your project for on-the-fly compression.
      Minify JS and CSS online, or include the minifier in your project for on-the-fly compression.

    以上,有想到用到再補充。

     

  • PHP 使用 PHP Code 的格式印出陣列

    使用 php 有時需要把程式碼印出來,提供動態的程式範例或是安裝的初始設定用途,雖然說大部分的應用場景只會使用到一次,但是資料量大的時候也是滿麻煩的。

    這邊提供一個範例將 array 印出來並且依照 php 格式作為 php file 儲存起來:

    $data = array('a'=>'b');
    file_put_contents('test.php', '<?php $arr = ' . var_export($data, true) . ';');

    參考:

  • Line 開發自動圖文選單(Rich Menu)的小眉角

    Line 機器人開發中,有一個功能是添加不同的圖文選單。可以依據不同場景、不同用戶客製化內容:

    Using rich menus
    The LINE Developers site is a portal site for developers. It contains documents and tools that will help you use our various developer products. Creating LINE Login and Messaging API applications and …

    其中有一個 Set the default rich menu 的功能,他和 Link rich menu to user 會互動的不是很好,如果使用這兩支 API 來作為單一用戶的場景切換,很容易造成用戶需要離開當下對話視窗再重新進來才能生效。不如統一使用 Link rich menu to user  方法處理切換即可。

    參考:

    Using rich menus
    The LINE Developers site is a portal site for developers. It contains documents and tools that will help you use our various developer products. Creating LINE Login and Messaging API applications and …

  • 購物車串接第三方金流 session 會被清空的原因

    原因是出在 SameSite 的設定,請標明 cookie 中的 SameSite 屬性。

    參考:

    FAQ知識庫 | 綠界 ECPay 客服中心
    綠界金流程式串接常見技術問題。

    也請記得強制使用 https 。

    舉個例子:
    Set-Cookie: remote_session=abc123; SameSite=None; Secure

    關於 SameSite 的介紹可參考:

    SameSite | OWASP
    SameSite on the main website for The OWASP Foundation. OWASP is a nonprofit foundation that works to improve the security of software.