0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Shopify テーマのカスタマイズ画面を翻訳する

Posted at

???「有料で買ったテーマ超かっこいいやん、ウェーイ」
Zakime「やばいっすね」
???「このテーマ、カスタマイズ画面(管理画面)の項目が英語やん」
Zakime「わかりやすいしクールでいいですね」
???「(英語分からないから)日本語にしないと操作できないね」
Zakime「?」
???「ということで日本語にしよっか」
Zakime「???」
???「君が」
Zakime「??????」
???「じゃあ、よろしく」
Zakime「ハイ、ヨロコンデー」

schema の翻訳

Shopify の各テーマには「言語を編集」がありますが、これはフロント(実際にストアページに表示される部分)の翻訳はできますが、カスタマイズ画面の項目の翻訳はできないみたいです(できたらすいません)。

ということで、わざわざファイル単位で翻訳作業を行ったので、その手順を紹介したいと思います。

本来テーマ開発者側でやるべきだし何より普通に面倒なので、良い子のみんなと上司と部下とその他あらゆる人類は英語のまま使おうね!

Shopify テーマにおける翻訳の仕組み(概要)

Shopify テーマのトップレベルには locales という名前のフォルダが存在しており、その中にある json 形式のファイルを翻訳データとして読み込んでいます。
このフォルダには .json ファイルと .schema.json ファイルの2種類のファイルを置くことができ、それぞれ用途が異なります。

テーマによっては(翻訳データを準備していないために)ファイルが存在しない場合もあります。

.json ファイル

このファイルはフロント(実際にストアページに表示される部分)の翻訳を記述することができ、「言語を編集」を通して翻訳を書き換えることができます。

ファイル名については、例えば英語のデータは en.json、日本語のデータは ja.json などと、あらかじめ決められた命名規則(言語の省略名.json)にしたがってファイルを作成します。そのうちの一つは、例えば ja.json が用意されていない場合に我々ジャパニーズピーポーがアクセスしても使えるように、一致する言語がない場合にデフォルトとして使用されるファイルとして xx.default.json のような名前でデフォルトのファイルとして指定します。(多くのテーマでは英語:en.default.json だと思います)。

"日本語訳のファイルは準備しているが、漏れがある・エラーがある" のような場合はその箇所だけ default.json のデータが使われます。さらに default.json にもデータがない場合はその箇所にエラーの文字が表示されます。

.schema.json ファイル

このファイルはテーマのカスタム画面(管理画面)の翻訳を記述することができますが、.json ファイルと違いコードを直接編集しないと書き換えることができません。本記事が対象とするファイルです。

ファイルの命名については.json ファイルと同様で、en.default.schema.jsonja.schema.json のように行います。

Shopify テーマにおける翻訳の仕組み(詳細)

例えばカスタマイズ画面(管理画面)で下記の画像のように表示されている場合、
shopify_custom_page.png
それぞれの項目の名前はそれぞれのファイルで定義されています。
例えば(このテーマの場合は)「Popup」は popup.liquid、「Header」は header.liquidschema で定義されています。
下記の画像は header.liquid からの抜粋です。
shopify_headerr.png
例えば "Header" を "へっだー" に変更すると、管理画面でも "へっだー" と表示されます。
shopify_header_after.png

ということで、全てのファイルの全ての該当箇所を上記のように書き換えると翻訳できるわけですが、これだと一つの言語しか対応することができません。
そこで .schema.json ファイルの出番となります。

locales フォルダに該当のファイルが存在する場合、各ファイルは自動的にそのデータを取得するようになっています。
例えば下記のような翻訳データを準備した場合、

ja.schema.json
{
  "sections": {
    "header": {
      "name": "ヘッダー",
      "settings": {
        "use_sticky_header": {
          "label": "ヘッダーを常に表示する"
        }
      }
    }
  }
}

header.lquid では t:sections.header.name とすると "ヘッダー" が、t:sections.header.settings.use_sticky_header.label とすると "ヘッダーを常に表示する" を取得できます。先頭のt:は liquid の作法です。「そもそもこの書き方、何?」という方は「json」でググってください。

上記の翻訳データは、Shopify の無料公式テーマである "Dawn" を参考に命名していますが、好きな名前を付けて大丈夫です。私は "sections" => 各ファイル名 => 階層があれば階層名 => id名 で命名しています。

以上、各セクションの翻訳について言及してきました。
管理画面にある「テーマの設定」は config > settings_schema.json で定義されています。
これらはセクションに属していないため、翻訳データでは下記のようにセクションと階層を分けると良いでしょう。

ja.schema.json
{
 "settings_schema": {
    ここに settings_schema.json に対応する翻訳データ
 }
  "sections": {
    ここに各セクションに対応する翻訳データ
  }
}

locales フォルダに元から .schema.json ファイルが存在する場合は、それをコピーしてファイル名を変更し、該当する文字を翻訳するだけで機能します。上記の手順はそもそも .schema.json ファイルが一つも存在しない場合の手順です。

読み返すと…正直、分かりづらいし中途半端な記事だなと思いましたが…このまま投稿させていただきますっ \サーセンッ/ \メンドクサイッ/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?