都道府県のテキストリソースを作るのがめんどくさかったので、
- R.Swiftなどを使わず、enumを使ってテキスト取得
- VSCodeのプラグインを使って、文字置換
- 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!
完成!
翻訳精度的にやや手直しが必要な部分があるので、それは手直しするしかないです。
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" = "沖縄";