Help us understand the problem. What is going on with this article?

【iOS】都道府県のテキストリソースを楽に作った

More than 1 year has passed since last update.

都道府県のテキストリソースを作るのがめんどくさかったので、

  1. R.Swiftなどを使わず、enumを使ってテキスト取得
  2. VSCodeのプラグインを使って、文字置換
  3. linuxのpasteコマンドを使って水平結合

で、楽々対応しました。
(なお調査対応2時間、記事1時間

ソースコード

Prefecture.swift
enum Prefecture: Int {
    case hokkaido
    case aomori
    case iwate
    case miyagi
    case akita
    case yamagata
    case fukushima
    case ibaraki
    case tochigi
    case gunma
    case saitama
    case chiba
    case tokyo
    case kanagawa
    case niigata
    case toyama
    case ishikawa
    case fukui
    case yamanashi
    case nagano
    case gifu
    case shizuoka
    case aichi
    case mie
    case shiga
    case kyoto
    case osaka
    case hyogo
    case nara
    case wakayama
    case tottori
    case shimane
    case okayama
    case hiroshima
    case yamaguchi
    case tokushima
    case kagawa
    case ehime
    case kochi
    case fukuoka
    case saga
    case nagasaki
    case kumamoto
    case oita
    case miyazaki
    case kagoshima
    case okinawa

    var localizedString: String {
        let string = String(describing: self)
        let upperFirstLetterString = string.prefix(1).uppercased() + string.dropFirst()

        return NSLocalizedString(upperFirstLetterString,
                                 tableName: "Prefecture",
                                 bundle: Bundle.main,
                                 value: "",
                                 comment: "")
    }
}

1.とりあえずリソースファイル作成

ソースコードのtableNameと一致する Prefecture.strings というファイルをつくりました。

2. enumのケース一覧をコピペ

こんな感じ

prefecture-en.txt
case hokkaido
case aomori
case iwate
case miyagi
case akita
...

結果を適当な名前のテキストファイルで保存してください。
ex) prefecture-en.txt

3. caseを取り除く

find: "case "
replace: ""

で全置換

prefecture-en.txt
hokkaido
aomori
iwate
miyagi
akita
yamagata
...

4. 先頭文字置換

change-caseというVSCodeのプラグインを利用しました。

変換したい文字列を全部選択して、cmd + shift + p から Change Case UpperFirst を選択

prefecture-en.txt
Hokkaido
Aomori
Iwate
Miyagi
Akita
...

5. 翻訳

一覧のまま、Google翻訳にかけます。

prefecture-ja.txt
北海道
青森
岩手県
宮城県
秋田
...

翻訳結果を適当な名前のテキストファイルで保存します
ex) prefecture-ja.txt

6. linuxコマンドで水平結合

参考はこちら

paste
 paste -d "=" prefecture-en.txt prefecture-ja.txt
out
Hokkaido=北海道
Aomori=青森
Iwate=岩手県
...

7. 置換

一個前の出力を Prefecture.strings にコピペして、正規表現をかけます。

find: (.*)=(.*)
replace: "$1" = "$2";

で全置換。

Prefecture.strings
"Hokkaido" = "北海道";
"Aomori" = "青森";
"Iwate" = "岩手";
"Miyagi" = "宮城県";
"Akita" = "秋田";
...

テスト

GREEEEEEN!

スクリーンショット 2018-09-21 3.36.59.png

完成!

翻訳精度的にやや手直しが必要な部分があるので、それは手直しするしかないです。
swift4.2では CaseIterable が使えるようになるので、さらにいい感じかも。

shellとか正規表現とかテキストエディタの機能をドップリ使ってiOS開発楽にしたい()

完成物

Prefecture.strings
"Hokkaido" = "北海道";
"Aomori" = "青森";
"Iwate" = "岩手";
"Miyagi" = "宮城";
"Akita" = "秋田";
"Yamagata" = "山形";
"Fukushima" = "福島";
"Ibaraki" = "茨城県";
"Tochigi" = "栃木";
"Gunma" = "群馬";
"Saitama" = "埼玉";
"Chiba" = "千葉";
"Tokyo" = "東京";
"Kanagawa" = "神奈川";
"Niigata" = "新潟";
"Toyama" = "富山";
"Ishikawa" = "石川";
"Fukui" = "福井市";
"Yamanashi" = "山梨";
"Nagano" = "長野";
"Gifu" = "岐阜";
"Shizuoka" = "静岡";
"Aichi" = "愛知県";
"Mie" = "三重";
"Shiga" = "滋賀";
"Kyoto" = "京都";
"Osaka" = "大阪";
"Hyogo" = "兵庫";
"Nara" = "奈良";
"Wakayama" = "和歌山";
"Tottori" = "鳥取";
"Shimane" = "島根";
"Okayama" = "岡山";
"Hiroshima" = "広島";
"Yamaguchi" = "山口";
"Tokushima" = "徳島";
"Kagawa" = "香川";
"Ehime" = "愛媛";
"Kochi" = "高知";
"Fukuoka" = "福岡";
"Saga" = "佐賀";
"Nagasaki" = "長崎";
"Kumamoto" = "熊本市";
"Oita" = "大分";
"Miyazaki" = "宮崎";
"Kagoshima" = "鹿児島";
"Okinawa" = "沖縄";
yosshi4486
アプリケーション作るのが好きな人
https://www.wantedly.com/users/6233980
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away