{"__v":1,"_id":"5544d76bd8833c0d00582831","category":{"__v":1,"_id":"5544d76ad8833c0d00582804","pages":["5544d76bd8833c0d00582824","5544d76bd8833c0d00582825","5544d76bd8833c0d00582826","5544d76bd8833c0d00582827","5544d76bd8833c0d00582828","5544d76bd8833c0d00582829","5544d76bd8833c0d0058282a","5544d76bd8833c0d0058282b","5544d76bd8833c0d0058282c","5544d76bd8833c0d0058282d","5544d76bd8833c0d0058282e","5544d76bd8833c0d0058282f","5544d76bd8833c0d00582830","5544d76bd8833c0d00582831"],"project":"55227389b4a0de0d00de7e28","version":"5544d76ad8833c0d00582801","sync":{"url":"","isSync":false},"reference":false,"createdAt":"2015-04-09T09:27:58.538Z","from_sync":false,"order":2,"slug":"_-1","title":"アドオン開発"},"project":"55227389b4a0de0d00de7e28","user":"551952063414b40d00e470cb","version":{"__v":1,"_id":"5544d76ad8833c0d00582801","forked_from":"55227389b4a0de0d00de7e2b","project":"55227389b4a0de0d00de7e28","createdAt":"2015-05-02T13:55:54.059Z","releaseDate":"2015-05-02T13:55:54.059Z","categories":["5544d76ad8833c0d00582802","5544d76ad8833c0d00582803","5544d76ad8833c0d00582804","5544d76ad8833c0d00582805","5544d76ad8833c0d00582806"],"is_deprecated":false,"is_hidden":false,"is_beta":false,"is_stable":true,"codename":"","version_clean":"4.0.0","version":"4.0"},"updates":[],"next":{"pages":[],"description":""},"createdAt":"2015-04-29T13:27:48.212Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[]},"auth":"required","params":[],"url":""},"isReference":false,"order":13,"body":"[block:api-header]\n{\n  \"type\": \"basic\",\n  \"title\": \".poファイルとは?\"\n}\n[/block]\nCS-Cartの言語ファイルは多言語対応を意識してデータベースに保存されています。4.2.4以前のバージョンのCS-Cartでは、addon.xmlにそれぞれの言語変数を用意してインストールしていましたが、新しいCS-Cartでは、[WordPress](https://ja.wordpress.org/) も利用している** gettext** による多言語化を採用しています。\n\nこれは各言語毎に.poファイルを用意することでアドオンのインストール時に言語変数がインストールされる仕組みです。[gettextについて詳しく](http://ja.wikipedia.org/wiki/Gettext) (Wikipedia)\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"ヒント\",\n  \"body\": \"WordPressでは.poファイルを編集し、最終的に .poファイルは msgfmtコマンドにより バイナリファイルにコンパイルされた.moファイルを利用しますが、CS-Cartは.poファイルを使います。\"\n}\n[/block]\n\n[block:api-header]\n{\n  \"type\": \"basic\",\n  \"title\": \".poファイル編集ツール\"\n}\n[/block]\n.poファイルを編集するにはテキストエディターでも可能ですが、[Poedit](http://sourceforge.jp/projects/sfnet_poedit/)というツールも無料で利用可能です。 \n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/oh2MHCU4Q6SrG1tCYknA_poedit.png\",\n        \"poedit.png\",\n        \"460\",\n        \"460\",\n        \"#a84c44\",\n        \"\"\n      ]\n    }\n  ]\n}\n[/block]\n\n[block:api-header]\n{\n  \"type\": \"basic\",\n  \"title\": \".poファイルの保存場所\"\n}\n[/block]\n翻訳を作成した.poファイルは以下のディレクトリに配置します。\n[block:html]\n{\n  \"html\": \"/var/langs/[言語コード]/addons/[アドオンID].po\"\n}\n[/block]\n- **言語コード** 英語はen、日本語はjaのような[ISO 639-1](http://ja.wikipedia.org/wiki/ISO_639-1%E3%82%B3%E3%83%BC%E3%83%89%E4%B8%80%E8%A6%A7) の言語コードとなります。\n- **アドオンID** アドオンのaddon.xmlで定義した識別子です。\n 例)カタログモード アドオン・・・catalog_mode\n[block:api-header]\n{\n  \"type\": \"basic\",\n  \"title\": \".poファイルの構造\"\n}\n[/block]\nこちらに日本語版アドオンの.poファイルを掲載しています。  \n[ダウンロード](https://gist.github.com/pierrefrogman/09bc75eab721c6a5c635) \n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"msgid \\\"\\\"\\nmsgstr \\\"\\\"\\n\\\"Project-Id-Version: cs-cart-latest\\\\n\\\"\\n\\\"Content-Type: text/plain; charset=UTF-8\\\\n\\\"\\n\\\"Language-Team: Japanese\\\\n\\\"\\n\\\"Language: ja_JP\\\\n\\\"\\n\\\"Plural-Forms: nplurals=1; plural=0;\\\\n\\\"\\n\\\"X-Generator: crowdin.net\\\\n\\\"\\n\\\"Last-Translator: cscartjp <info:::at:::cs-cart.jp>\\\\n\\\"\\n\\\"PO-Revision-Date: 2014-07-17 04:42-0400\\\\n\\\"\\n\\nmsgctxt \\\"Addons::name::localization_jp\\\"\\nmsgid \\\"日本語版アドオン\\\"\\nmsgstr \\\"日本語版アドオン\\\"\\n\\nmsgctxt \\\"Addons::description::localization_jp\\\"\\nmsgid \\\"CS-Cartを日本でのECサイト運用に最適化します\\\"\\nmsgstr \\\"CS-Cartを日本でのECサイト運用に最適化します\\\"\\n\\nmsgctxt \\\"SettingsSections::localization_jp::general\\\"\\nmsgid \\\"General\\\"\\nmsgstr \\\"基本設定\\\"\\n\\nmsgctxt \\\"SettingsOptions::localization_jp::elm_contact_information\\\"\\nmsgid \\\"連絡先情報\\\"\\nmsgstr \\\"連絡先情報\\\"\\n\\nmsgctxt \\\"SettingsOptions::localization_jp::jp_familyname_kana_c\\\"\\nmsgid \\\"「姓フリガナ」フィールド\\\"\\nmsgstr \\\"「姓フリガナ」フィールド\\\"\\n\\nmsgctxt \\\"SettingsOptions::localization_jp::jp_firstname_kana_c\\\"\\nmsgid \\\"「名フリガナ」フィールド\\\"\\nmsgstr \\\"「名フリガナ」フィールド\\\"\\n\\nmsgctxt \\\"SettingsOptions::localization_jp::elm_billing_information\\\"\\nmsgid \\\"請求先情報\\\"\\nmsgstr \\\"請求先情報\\\"\\n\\nmsgctxt \\\"SettingsOptions::localization_jp::jp_familyname_kana_b\\\"\\nmsgid \\\"「姓フリガナ」フィールド\\\"\\nmsgstr \\\"「姓フリガナ」フィールド\\\"\\n\\nmsgctxt \\\"SettingsOptions::localization_jp::jp_firstname_kana_b\\\"\\nmsgid \\\"「名フリガナ」フィールド\\\"\\nmsgstr \\\"「名フリガナ」フィールド\\\"\\n\\n  ..........\",\n      \"language\": \"c\",\n      \"name\": \"localization_jp.po\"\n    }\n  ]\n}\n[/block]\n\n[block:api-header]\n{\n  \"type\": \"basic\",\n  \"title\": \".poファイルの構造\"\n}\n[/block]\n## ヘッダー部分\n\n以下は英語の.poファイルです。\n日本語の場合は \"Language: ja_JP\\n\" となります。ファイルはUTF-8で作成します。\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"msgid \\\"\\\"\\nmsgstr \\\"Project-Id-Version: tygh\\\"\\n\\\"Content-Type: text/plain; charset=UTF-8\\\\n\\\"\\n\\\"Language-Team: English\\\\n\\\"\\n\\\"Language: en_US\\\"\",\n      \"language\": \"c\"\n    }\n  ]\n}\n[/block]\n## 言語変数の記述方法\n\n\n- **msgctxt** \"[言語の使用場所]\"\n- **msgid** \"[言語の識別子]\"\n- **msgstr** \"[翻訳]\"\n\n\n\n## msgctxt 言語変数の使用箇所\n\n- **Addons::name::[アドオンの識別子]** - アドオン名を翻訳\n- **Addons::description::[アドオンの識別子]** - アドオンの説明文を翻訳\n\n例)「高解像度ディスプレイ対応」 アドオン\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"msgctxt \\\"Addons::name::hidpi\\\"\\nmsgid \\\"HiDPI displays support\\\"\\nmsgstr \\\"高解像度ディスプレイ対応\\\"\\n\\nmsgctxt \\\"Addons::description::hidpi\\\"\\nmsgid \\\"Support for Retina displays\\\"\\nmsgstr \\\"Retinaディスプレイに最適化した画像を表示します\\\"\\n\\nmsgctxt \\\"Languages::text_hidpi_support_enabled\\\"\\nmsgid \\\"HiDPI support is enabled\\\"\\nmsgstr \\\"高解像度ディスプレイ対応が有効化されています\\\"\",\n      \"language\": \"c\"\n    }\n  ]\n}\n[/block]\n\n\n### アドオンの設定関連\n\n  - **SettingsSections::[アドオンの識別子]::[設定セクション名]** - アドオンの設定セクション名\n    - **SettingsOptions::[アドオンの識別子]::[設定セクション名]** - アドオンの設定オプション(変数)名\n    - **SettingsVariants::[アドオンの識別子]::[設定セクション名]::[設定値]** - アドオンの設定値\n\n例)「ポイント」アドオン設定用言語ファイル\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"msgctxt \\\"SettingsSections::reward_points::general\\\"\\nmsgid \\\"General\\\"\\nmsgstr \\\"基本設定\\\"\\n\\nmsgctxt \\\"SettingsOptions::reward_points::point_rate\\\"\\nmsgid \\\"Points Exchange Rate (PER - the number of points equal to 1 conventional unit)\\\"\\nmsgstr \\\"ポイント交換レート (PER - 基本通貨1単位に相当するポイント数)\\\"\\n\\n...........\\n  \\nmsgctxt \\\"SettingsOptions::reward_points::several_points_action\\\"\\nmsgid \\\"If several reward points can be applied, set\\\"\\nmsgstr \\\"複数種のポイントが適用されうる際の適用ポイント数\\\"\\n\\n...........\\n  \\nmsgctxt \\\"SettingsVariants::reward_points::several_points_action::minimal_absolute\\\"\\nmsgid \\\"Absolute minimal value\\\"\\nmsgstr \\\"最小値(絶対値)\\\"\\n\\nmsgctxt \\\"SettingsVariants::reward_points::several_points_action::minimal_percentage\\\"\\nmsgid \\\"Minimal percentage value\\\"\\nmsgstr \\\"最小値(%)\\\"\\n\\nmsgctxt \\\"SettingsVariants::reward_points::several_points_action::maximal_absolute\\\"\\nmsgid \\\"Absolute maximal value\\\"\\nmsgstr \\\"最大値(絶対値)\\\"\\n\\nmsgctxt \\\"SettingsVariants::reward_points::several_points_action::maximal_percentage\\\"\\nmsgid \\\"Maximal percentage value\\\"\\nmsgstr \\\"最大値(%)\\\"\",\n      \"language\": \"c\"\n    }\n  ]\n}\n[/block]\n\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/VKZ0WQgQvqb3maIioLvg_pointaddonsetting.png\",\n        \"pointaddonsetting.png\",\n        \"1023\",\n        \"938\",\n        \"#2e75c8\",\n        \"\"\n      ]\n    }\n  ]\n}\n[/block]\n### アドオンで使用する言語変数\n\n  - **Languages::[言語変数名]**\n\n\n例)「タグ」アドオンが使用する言語変数(テンプレートなどで利用する)\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"msgctxt \\\"Languages::popular_tags\\\"\\nmsgid \\\"Popular tags\\\"\\nmsgstr \\\"人気のタグ\\\"\\n\\nmsgctxt \\\"Languages::sign_in_to_enter_tags\\\"\\nmsgid \\\"Sign in to enter tags\\\"\\nmsgstr \\\"ログインしてタグを登録\\\"\\n\\nmsgctxt \\\"Languages::tag_cloud\\\"\\nmsgid \\\"Tag cloud\\\"\\nmsgstr \\\"タグクラウド\\\"\\n\\nmsgctxt \\\"Languages::my_tags\\\"\\nmsgid \\\"My tags\\\"\\nmsgstr \\\"マイタグ\\\"\",\n      \"language\": \"c\"\n    }\n  ]\n}\n[/block]\n## .tplファイルでの利用例\n\n> /design/themes/responsive/templates/addons/tags/views/tags/components/tags.tpl\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"<a href=\\\"{$config.current_url|fn_url}\\\">{__(\\\"sign_in_to_enter_tags\\\")}</a>\",\n      \"language\": \"html\"\n    }\n  ]\n}\n[/block]\n## コントローラーでの利用例\n\n> /app/addons/tags/controllers/frontend/tags.php\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"<?php\\n...\\nif (empty($_REQUEST['see']) || $_REQUEST['see'] != 'my') {\\n    $title = __('items_marked_by_tag', array(\\n        '[tag]' => $tag\\n    ));\\n} else {\\n    $title = __('my_items_marked_by_tag', array(\\n        '[tag]' => $tag\\n    ));\\n}\\n...\",\n      \"language\": \"php\"\n    }\n  ]\n}\n[/block]","excerpt":"CS-Cart4.2.4から翻訳に関する記述はaddon.xmlから.poファイルに変更になりました。","slug":"languages-and-translations-by-po-file","type":"basic","title":".poファイルによる言語ファイルの作成"}

.poファイルによる言語ファイルの作成

CS-Cart4.2.4から翻訳に関する記述はaddon.xmlから.poファイルに変更になりました。

[block:api-header] { "type": "basic", "title": ".poファイルとは?" } [/block] CS-Cartの言語ファイルは多言語対応を意識してデータベースに保存されています。4.2.4以前のバージョンのCS-Cartでは、addon.xmlにそれぞれの言語変数を用意してインストールしていましたが、新しいCS-Cartでは、[WordPress](https://ja.wordpress.org/) も利用している** gettext** による多言語化を採用しています。 これは各言語毎に.poファイルを用意することでアドオンのインストール時に言語変数がインストールされる仕組みです。[gettextについて詳しく](http://ja.wikipedia.org/wiki/Gettext) (Wikipedia) [block:callout] { "type": "info", "title": "ヒント", "body": "WordPressでは.poファイルを編集し、最終的に .poファイルは msgfmtコマンドにより バイナリファイルにコンパイルされた.moファイルを利用しますが、CS-Cartは.poファイルを使います。" } [/block] [block:api-header] { "type": "basic", "title": ".poファイル編集ツール" } [/block] .poファイルを編集するにはテキストエディターでも可能ですが、[Poedit](http://sourceforge.jp/projects/sfnet_poedit/)というツールも無料で利用可能です。 [block:image] { "images": [ { "image": [ "https://files.readme.io/oh2MHCU4Q6SrG1tCYknA_poedit.png", "poedit.png", "460", "460", "#a84c44", "" ] } ] } [/block] [block:api-header] { "type": "basic", "title": ".poファイルの保存場所" } [/block] 翻訳を作成した.poファイルは以下のディレクトリに配置します。 [block:html] { "html": "/var/langs/[言語コード]/addons/[アドオンID].po" } [/block] - **言語コード** 英語はen、日本語はjaのような[ISO 639-1](http://ja.wikipedia.org/wiki/ISO_639-1%E3%82%B3%E3%83%BC%E3%83%89%E4%B8%80%E8%A6%A7) の言語コードとなります。 - **アドオンID** アドオンのaddon.xmlで定義した識別子です。  例)カタログモード アドオン・・・catalog_mode [block:api-header] { "type": "basic", "title": ".poファイルの構造" } [/block] こちらに日本語版アドオンの.poファイルを掲載しています。 [ダウンロード](https://gist.github.com/pierrefrogman/09bc75eab721c6a5c635) [block:code] { "codes": [ { "code": "msgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: cs-cart-latest\\n\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Language-Team: Japanese\\n\"\n\"Language: ja_JP\\n\"\n\"Plural-Forms: nplurals=1; plural=0;\\n\"\n\"X-Generator: crowdin.net\\n\"\n\"Last-Translator: cscartjp <info@cs-cart.jp>\\n\"\n\"PO-Revision-Date: 2014-07-17 04:42-0400\\n\"\n\nmsgctxt \"Addons::name::localization_jp\"\nmsgid \"日本語版アドオン\"\nmsgstr \"日本語版アドオン\"\n\nmsgctxt \"Addons::description::localization_jp\"\nmsgid \"CS-Cartを日本でのECサイト運用に最適化します\"\nmsgstr \"CS-Cartを日本でのECサイト運用に最適化します\"\n\nmsgctxt \"SettingsSections::localization_jp::general\"\nmsgid \"General\"\nmsgstr \"基本設定\"\n\nmsgctxt \"SettingsOptions::localization_jp::elm_contact_information\"\nmsgid \"連絡先情報\"\nmsgstr \"連絡先情報\"\n\nmsgctxt \"SettingsOptions::localization_jp::jp_familyname_kana_c\"\nmsgid \"「姓フリガナ」フィールド\"\nmsgstr \"「姓フリガナ」フィールド\"\n\nmsgctxt \"SettingsOptions::localization_jp::jp_firstname_kana_c\"\nmsgid \"「名フリガナ」フィールド\"\nmsgstr \"「名フリガナ」フィールド\"\n\nmsgctxt \"SettingsOptions::localization_jp::elm_billing_information\"\nmsgid \"請求先情報\"\nmsgstr \"請求先情報\"\n\nmsgctxt \"SettingsOptions::localization_jp::jp_familyname_kana_b\"\nmsgid \"「姓フリガナ」フィールド\"\nmsgstr \"「姓フリガナ」フィールド\"\n\nmsgctxt \"SettingsOptions::localization_jp::jp_firstname_kana_b\"\nmsgid \"「名フリガナ」フィールド\"\nmsgstr \"「名フリガナ」フィールド\"\n\n ..........", "language": "c", "name": "localization_jp.po" } ] } [/block] [block:api-header] { "type": "basic", "title": ".poファイルの構造" } [/block] ## ヘッダー部分 以下は英語の.poファイルです。 日本語の場合は "Language: ja_JP\n" となります。ファイルはUTF-8で作成します。 [block:code] { "codes": [ { "code": "msgid \"\"\nmsgstr \"Project-Id-Version: tygh\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Language-Team: English\\n\"\n\"Language: en_US\"", "language": "c" } ] } [/block] ## 言語変数の記述方法 - **msgctxt** "[言語の使用場所]" - **msgid** "[言語の識別子]" - **msgstr** "[翻訳]" ## msgctxt 言語変数の使用箇所 - **Addons::name::[アドオンの識別子]** - アドオン名を翻訳 - **Addons::description::[アドオンの識別子]** - アドオンの説明文を翻訳 例)「高解像度ディスプレイ対応」 アドオン [block:code] { "codes": [ { "code": "msgctxt \"Addons::name::hidpi\"\nmsgid \"HiDPI displays support\"\nmsgstr \"高解像度ディスプレイ対応\"\n\nmsgctxt \"Addons::description::hidpi\"\nmsgid \"Support for Retina displays\"\nmsgstr \"Retinaディスプレイに最適化した画像を表示します\"\n\nmsgctxt \"Languages::text_hidpi_support_enabled\"\nmsgid \"HiDPI support is enabled\"\nmsgstr \"高解像度ディスプレイ対応が有効化されています\"", "language": "c" } ] } [/block] ### アドオンの設定関連 - **SettingsSections::[アドオンの識別子]::[設定セクション名]** - アドオンの設定セクション名 - **SettingsOptions::[アドオンの識別子]::[設定セクション名]** - アドオンの設定オプション(変数)名 - **SettingsVariants::[アドオンの識別子]::[設定セクション名]::[設定値]** - アドオンの設定値 例)「ポイント」アドオン設定用言語ファイル [block:code] { "codes": [ { "code": "msgctxt \"SettingsSections::reward_points::general\"\nmsgid \"General\"\nmsgstr \"基本設定\"\n\nmsgctxt \"SettingsOptions::reward_points::point_rate\"\nmsgid \"Points Exchange Rate (PER - the number of points equal to 1 conventional unit)\"\nmsgstr \"ポイント交換レート (PER - 基本通貨1単位に相当するポイント数)\"\n\n...........\n \nmsgctxt \"SettingsOptions::reward_points::several_points_action\"\nmsgid \"If several reward points can be applied, set\"\nmsgstr \"複数種のポイントが適用されうる際の適用ポイント数\"\n\n...........\n \nmsgctxt \"SettingsVariants::reward_points::several_points_action::minimal_absolute\"\nmsgid \"Absolute minimal value\"\nmsgstr \"最小値(絶対値)\"\n\nmsgctxt \"SettingsVariants::reward_points::several_points_action::minimal_percentage\"\nmsgid \"Minimal percentage value\"\nmsgstr \"最小値(%)\"\n\nmsgctxt \"SettingsVariants::reward_points::several_points_action::maximal_absolute\"\nmsgid \"Absolute maximal value\"\nmsgstr \"最大値(絶対値)\"\n\nmsgctxt \"SettingsVariants::reward_points::several_points_action::maximal_percentage\"\nmsgid \"Maximal percentage value\"\nmsgstr \"最大値(%)\"", "language": "c" } ] } [/block] [block:image] { "images": [ { "image": [ "https://files.readme.io/VKZ0WQgQvqb3maIioLvg_pointaddonsetting.png", "pointaddonsetting.png", "1023", "938", "#2e75c8", "" ] } ] } [/block] ### アドオンで使用する言語変数 - **Languages::[言語変数名]** 例)「タグ」アドオンが使用する言語変数(テンプレートなどで利用する) [block:code] { "codes": [ { "code": "msgctxt \"Languages::popular_tags\"\nmsgid \"Popular tags\"\nmsgstr \"人気のタグ\"\n\nmsgctxt \"Languages::sign_in_to_enter_tags\"\nmsgid \"Sign in to enter tags\"\nmsgstr \"ログインしてタグを登録\"\n\nmsgctxt \"Languages::tag_cloud\"\nmsgid \"Tag cloud\"\nmsgstr \"タグクラウド\"\n\nmsgctxt \"Languages::my_tags\"\nmsgid \"My tags\"\nmsgstr \"マイタグ\"", "language": "c" } ] } [/block] ## .tplファイルでの利用例 > /design/themes/responsive/templates/addons/tags/views/tags/components/tags.tpl [block:code] { "codes": [ { "code": "<a href=\"{$config.current_url|fn_url}\">{__(\"sign_in_to_enter_tags\")}</a>", "language": "html" } ] } [/block] ## コントローラーでの利用例 > /app/addons/tags/controllers/frontend/tags.php [block:code] { "codes": [ { "code": "<?php\n...\nif (empty($_REQUEST['see']) || $_REQUEST['see'] != 'my') {\n $title = __('items_marked_by_tag', array(\n '[tag]' => $tag\n ));\n} else {\n $title = __('my_items_marked_by_tag', array(\n '[tag]' => $tag\n ));\n}\n...", "language": "php" } ] } [/block]