2025年2月14日金曜日

GIMP 3 Script-Fu v3 i18n 国際化

おおぉ、GIMP 3 (3.0.0-RC3 +) では 自前の Script-Fu で 国際化 が可能です。
英語で 各項目 等を記載した上で、
日本語版 の文字列 を定義して、 日本語表記 を自動で賄える 訳です。
前から気になっていた i18n 国際化 とは?。


そう、昔の GIMP でも、国際化 はありました。
其れは、組み込みの 標準添付 されたものでの お話 でした。

嘗ての 投稿 をご覧下さい。

  GIMP 2.99 Python 寄り道 其の参
  https://shiroyuki-mot-says.blogspot.com/2022/07/gimp-29910-python-3.html
  GIMP 2.99 Python 寄り道 其の肆
  https://shiroyuki-mot-says.blogspot.com/2022/08/gimp-29910-python-4.html
  
此の下敷き(経験)があったからこその、今回の お話 。
Python のツールを流用して、
Script-Fu の 国際化 に挑戦です。

実は、GIMP 3.0.0-RC2 の頃から、状況の変化に気付いていました。
Script-Fu は v3 から plug-ins に入れられる様になった為、
個々の 独立した 領域 (Directory) が確保出来ます。
言い換えれば、
個々の Script に対しても、国際化の .mo ファイル群を同梱出来るのです!。
例えば、英語で記述したものが、
日本語版 OS なら、日本語の .mo があれば、其の形で 表示 される様になる、と。
謂わば、 標準添付のものと 類似 の環境を提供可能になったのです。

さて、
其の手順ですが、
.pot > .po > .mo と編集や変換を経て、既定の場所に格納されたファイル群を用意します。
編集は 置換文字列 を テキストエディタ で。
変換は Python の 組み込み .py を使います。

置換文字列 に該当が無ければ、元の Code 記載のまま、表示されます。
此れは、皆さんが、GIMP GUI の項目で既にご経験済みの 挙動 。

一部の解説にある様に、全てを完璧に用意するのは 必須 では無いのです。
無論、其れが Better ですが ... 。

そして、.pot 作成は、本来、gettext.py が担うのですが、
手書きでの対応でも構いません。
本来、自動生成される .pot では、
Source Code での行数(位置)が表示されていますが、
# から始まる Source Code の行数は Comment な訳で、省略が可能なのですね。
特に、自前の Code で国際化を狙うなら、
どの文字列が対象なのかは 承知 の筈。
あなたなら、手書きで書けますよね!。

さぁ、一例を。





先ずは Script-Fu v3 Code 抜粋。
此れは 非公開 の 複数レイヤー対象 のもの。

(script-fu-register-filter
  "script-fu-shiro-v3-test2"                    ;func name
  _"Test Script-Fu v3 i18n"                     ;menu label
  _"Test Script-Fu v3 Move Absolute i18n"       ;description
  "ShiroYuki_Mot"                               ;author
  "ShiroYuki_Mot"                               ;copyright notice
  "2024/11/26"                                  ;date created
  "*" ;image type on the script
  SF-ONE-OR-MORE-DRAWABLE                       ; v3 >>> additional argument
  ;SF-IMAGE       "Image"    0    ;Commment out for v3
  ;SF-DRAWABLE    "Drawable" 0    ;Commment out for v3
  SF-ADJUSTMENT  _"X " (list 60 -8000 8000 1 100 0 SF-SPINNER)
  SF-ADJUSTMENT  _"Y " (list 70 -8000 8000 1 100 0 SF-SPINNER)
  SF-OPTION      _"Type " '(_"Relative" _"Absolute")
  SF-DRAWABLE    _"Base Layer " 0
)

そして、.pot / .po の最初の部分。
はい、此れ等 は 極普通のテキストファイル です。

# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR ORGANIZATION
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION¥n"
"POT-Creation-Date: 20yy-mm-dd hh:mm東京 (標準時)¥n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE¥n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>¥n"
"Language-Team: LANGUAGE <LL@li.org>¥n"
"MIME-Version: 1.0¥n"
"Content-Type: text/plain; charset=UTF-8¥n"
"Content-Transfer-Encoding: 8bit¥n"
"Generated-By: pygettext.py 1.5¥n"

msgid ""
msgstr ""

此の最後の2行 msgid と msgstr と をコピーして必要箇所数 -1 回ペーストして行きます。
最初の msgid は Code 中の _"text" の text を。
次の msgstr は 翻訳された文字列、此処では 日本語 を。
編集して、.po とします。
一応、作業 Directory に仮保存しましょう。

  因みに、msgid のみが入ったものが .pot と呼ばれます。

こんな感じ。

... 省略 Omission

"Generated-By: pygettext.py 1.5¥n"
# Handwritten  because of .scm

msgid "Test Script-Fu v3 Move Absolute i18n"
msgstr "Test Script-Fu v3 移動 相対/絶対 i18n"

msgid "X "
msgstr "X (横座標) "

msgid "Y "
msgstr "Y (縦座標) "

... 省略 Omission

此れを、機械語にした .mo を作ります。
Windows なら、cmd.exe を起動して、作業 Directory に移動します。
そして、以下の Command を実行します。

       便宜上、2行に改行表示されていますが、実際には間に空白を挿み1行 ですので、ご留意!を。

"C:¥Program Files¥GIMP 3¥lib¥python3.12¥venv¥scripts¥nt¥python.exe"
  "C:¥Program Files¥GIMP 3¥lib¥python3.12¥Tools¥i18n¥msgfmt.py" <.po file>

上の例で言えば、

"C:¥Program Files¥GIMP 3¥lib¥python3.12¥venv¥scripts¥nt¥python.exe"
  "C:¥Program Files¥GIMP 3¥lib¥python3.12¥Tools¥i18n¥msgfmt.py" "Shiro-V3-Test2.po"

  実際には、GIMP 3.0.0-RC2 向けに作成したのですが、
  此の時は、"C:¥Program Files¥GIMP 3¥bin¥ に python.exe が無かった為、
  少し前の Version GIMP 2.99.18 のものを流用して実行しました。
  其れでも、問題無く、動いています。
  詰まり、 GIMP Version が変わっても作り直す必要はありません。

最終的には、以下のファイル群配置にして、
此れを、Windows なら、  
%USERPROFILE%¥AppData¥Roaming¥GIMP¥3.0¥plug-ins
の中に Directory として放り込みます。

F:¥GIMP¥GIMP3-RC_SCRIPTING¥SHIRO-V3-TEST2
│  Shiro-V3-Test2.scm

└─locale
    └─ja
        └─LC_MESSAGES
                Shiro-V3-Test2.mo

ja が 日本語 言語コード で、
所謂、ISO639-1 の2桁の英字 です。
参考;
https://ja.wikipedia.org/wiki/ISO_639-1%E3%82%B3%E3%83%BC%E3%83%89%E4%B8%80%E8%A6%A7
https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes
https://docs.oracle.com/cd/F25597_01/document/products/wli/docs92/xref/xqisocodes.html


参考迄に、
上の図 左側 で、Source Text とあるのは、
locale¥ja¥ の ja を jp 等 非適合の文字 に変えて実行した時のものです。
此の場合には、i18n は働かず、元の文字で表示されます。



0 件のコメント:

コメントを投稿