しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

Xcodeからxclocのエクスポートとインポートを試す

Xcodeからxclocのエクスポートとインポートを試してみました。
xclocとは翻訳ファイル(Localization.string)などを編集しやすい形にしたファイルです。

こちらのフォーマットはxliffを改善したもので、Xcode10から使えるようになりました。

国際化自体については下記事でまとめたのでよろしければご参照下さい。

llcc.hatenablog.com

xclocのエクスポートとインポート

まずは下のようにローカライズしたStringファイルを作ります。

f:id:llcc:20220213121036p:plain

各ファイル下のように1行だけ追加しました。

CFBundleDisplayName = "アプリ名_英語";
"testKey" = "英語";

Xcodeも国際化をしておきます。

f:id:llcc:20220213122200p:plain

次にXcodeのProductのExport Localizations…から書き出しをします。

f:id:llcc:20220213121202p:plain

次画面で保存先を指定したら保存します。

f:id:llcc:20220213121305p:plain

保存すると下のように各言語用のファイルが作られます。

f:id:llcc:20220213122019p:plain

ファイルを開くと下のように各ファイルの英語・日本語がある画面になります。

f:id:llcc:20220213122953p:plain

試しにここの日本語部分を変更してみます。

f:id:llcc:20220213123011p:plain

変更したらImport Localizations...からインポートしてみます。

f:id:llcc:20220213122441p:plain

インポート時は下のように差分を見る事ができます。

f:id:llcc:20220213123123p:plain

インポート完了すると下のようにプロジェクト側も変更されます。

f:id:llcc:20220213123156p:plain

xclocの中身

xclocですが中身は下のような構成になっています。
Source ContentsにはstringファイルやStoryboardなど元ファイルが入っています。
Localized Contentsには編集用のxliffファイルが入っています。

f:id:llcc:20220213133617p:plain

xliffファイルの中身は下のようになっています。

<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd">
  <file original="MyApp/Base.lproj/Main.storyboard" source-language="en" target-language="fr" datatype="plaintext">
    <header>
      <tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="13.2.1" build-num="13C100"/>
    </header>
    <body>
      <trans-unit id="reG-Hn-ghY.text" xml:space="preserve">
        <source>Hello world</source>
        <target>Hello world</target>
        <note>Class = "UILabel"; text = "Hello world"; ObjectID = "reG-Hn-ghY";</note>
      </trans-unit>
    </body>
  </file>
  <file original="MyApp/en.lproj/InfoPlist.strings" source-language="en" target-language="fr" datatype="plaintext">
    <header>
      <tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="13.2.1" build-num="13C100"/>
    </header>
    <body>
      <trans-unit id="CFBundleDisplayName" xml:space="preserve">
        <source>アプリ名_英語</source>
        <target>アプリ名_フランス語</target>
        <note>InfoPlist.strings
  MyApp

  Created by XXXX on 2022/02/13.</note>
      </trans-unit>
      <trans-unit id="CFBundleName" xml:space="preserve">
        <source>MyApp</source>
        <note>Bundle name</note>
      </trans-unit>
    </body>
  </file>
  <file original="MyApp/en.lproj/Localizable.strings" source-language="en" target-language="fr" datatype="plaintext">
    <header>
      <tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="13.2.1" build-num="13C100"/>
    </header>
    <body>
      <trans-unit id="testKey" xml:space="preserve">
        <source>英語</source>
        <target>フランス語</target>
        <note>Localizable.strings
  MyApp

  Created by XXXX on 2022/02/13.</note>
      </trans-unit>
    </body>
  </file>
</xliff>