メモです。
多言語化するときに必要なこととか・・・
hoge,php
<?php $lang = "ja_JP.UTF-8"; $domain = "hoge"; //setlocale(LC_ALL,$lang); setlocale(LC_MESSAGES,$lang); bindtextdomain($domain, __DIR__."/../locale/"); textdomain($domain); echo _("greeting")."\n"; echo gettext("greeting")."\n"; echo dgettext("hoge","error")."\n";
poファイルを作成
xgettext hoge.php
message.poが作られる
※xgettext hoge.php -o hoge.poとすると-oで指定した名前のファイルが出来上がります。
phpファイル全てを対象に_()などを抽出する場合
find . -type f -name “*.php” -exec xgettext {} +
とかするといい感じ。
作成されたpoファイル内の文字列を置換します。
sed -e ‘s/charset=CHARSET/charset=UTF-8/’ hoge.po > tmp_hoge.po
所定のディレクトリを作る※日本語と英語
mkdir -p locale/ja_JP/LC_MESSAGES/
mkdir -p locale/en_US/LC_MESSAGES/
poファイルを所定の位置へコピー
cp tmp_hoge.po locale/ja_JP/LC_MESSAGES/hoge.po
cp tmp_hoge.po locale/en_US/LC_MESSAGES/hoge.po
locale/ja_JP/LC_MESSAGES/hoge.po
# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-08-30 15:12+0900\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" #: hoge.php:9 hoge.php:10 msgid "greeting" msgstr "こんにちは世界" #: hoge.php:11 msgid "error" msgstr "エラー"
poファイルをコンパイルしmoファイルを作成
cd ./locale/【ロケール】/LC_MESSAGES/
msgfmt hoge.po
hoge.moが出来上がります。