Xcode11.1のローカライズではめられた！

# はじめに
Xcode10系から11系にあげてしばらくしてから下記のような画面を見つけた。

<img width="300" alt="en_bug" src="https://user-images.githubusercontent.com/34936885/70139916-e9d3b680-16d6-11ea-898d-43aa5804dd44.png">

？？日本語と英語混じってる:scream_cat:

# 現象
なんか同じ画面なのに一部だけローカライズできていない。

理想は下記のような表示。

| 日本語版 | 英語版 |
| --- | --- |
|![ja](https://user-images.githubusercontent.com/34936885/70139924-f0622e00-16d6-11ea-9429-20a68cf5afc7.png)|![en](https://user-images.githubusercontent.com/34936885/70139949-fe17b380-16d6-11ea-9e03-0ca4f0c89b43.png)|

Storyboardのローカライズがおかしい？ローカライズファイルは下記のようなもの

```swift:Main.strings(Japanese)
/* Class = "UILabel"; text = "かすたむ"; ObjectID = "3Iv-wk-3sA"; */
"3Iv-wk-3sA.text" = "かすたむ";

/* Class = "UINavigationItem"; title = "テスト"; ObjectID = "7pt-6w-M5O"; */
"7pt-6w-M5O.title" = "テスト";

/* Class = "UILabel"; text = "でぃてぃーる"; ObjectID = "DV3-DC-Qdc"; */
"DV3-DC-Qdc.text" = "でぃてぃーる";
.
.
.
/* Class = "UILabel"; text = "フッター"; ObjectID = "vyK-5m-pLY"; */
"vyK-5m-pLY.text" = "フッター";
```

```swift:Main.strings(English)
/* Class = "UILabel"; text = "かすたむ"; ObjectID = "3Iv-wk-3sA"; */
"3Iv-wk-3sA.text" = "Custom";

/* Class = "UINavigationItem"; title = "テスト"; ObjectID = "7pt-6w-M5O"; */
"7pt-6w-M5O.title" = "Test";

/* Class = "UILabel"; text = "でぃてぃーる"; ObjectID = "DV3-DC-Qdc"; */
"DV3-DC-Qdc.text" = "Detail";
.
.
.
/* Class = "UILabel"; text = "フッター"; ObjectID = "vyK-5m-pLY"; */
"vyK-5m-pLY.text" = "Footer";
```

なんか `static cell` の画面だけおかしい:question:

# 調査
## パーツのObjectIDを確認
よくわからないけどなんかのタイミングで `ObjectID` 変わったのかな？と思い確認してみました。

<img width="271" alt="object_id" src="https://user-images.githubusercontent.com/34936885/70139961-053ec180-16d7-11ea-8d26-9a0dfe5673db.png">

とくに問題なし:neutral_face:

## ローカライズファイルを入れ直してみる
よくわからないけどとりあえずローカライズのチェックを入れ直してファイルを再生成してみました。

<img width="269" alt="localize" src="https://user-images.githubusercontent.com/34936885/70140000-1be51880-16d7-11ea-83f1-5fe1052db37e.png">

変化なし:neutral_face:

## Xcodeのリリースノートを確認
しばらく悩んで[Xcodeのリリースノート](https://developer.apple.com/documentation/xcode_release_notes/xcode_11_1_release_notes#3386781)をみてみました。

発見:heart_eyes_cat:
>UITableViewCell labels in storyboards and XIB files do not use localized string values from the strings file at runtime. (52839404)

どうやら `UITableViewCell` の `label` がローカライズできないようです。
`TableView` の `Content` を `Static Cells` にして `Cell` の `Style` が下記いずれかの場合に起こるようです。

* Basic
* Right Detail
* Left Detail
* Subtitle

（最初のスクショは上から Basic, Right Detail, Left Detail, Subtitle, Custom のセルです）

# 対応
Xcodeのバグなのでリリースを待てばいいのですが、アプリの提出期限もあり下記のような暫定対応をしました。

1 TMPLocalizable.strings ファイルを作る  

```swift:TMPLocalizable.strings(Japanese)
"かすたむ" = "かすたむ";
"テスト" = "テスト";
"でぃてぃーる" = "でぃてぃーる";
.
.
.
"フッター" = "フッター";
```

```swift:TMPLocalizable.strings(English)
"かすたむ" = "Custom";
"テスト" = "Test";
"でぃてぃーる" = "Detail";
.
.
.
"フッター" = "Footer";
```
2 `ViewController` にローカライズ処理を書く

```swift
// FIXME: Xcodeのバグがなおったら消したい
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  let cell = super.tableView(tableView, cellForRowAt: indexPath)
    if let text = cell.textLabel?.text {
      cell.textLabel?.text = tmpLocalizedString(text)
    }
    if let text =  cell.detailTextLabel?.text {
      cell.detailTextLabel?.text = tmpLocalizedString(text)
    }
    return cell
}
    
private func tmpLocalizedString(_ key: String) -> String {
  return NSLocalizedString(key, tableName: "TMPLocalizable", comment: "")
}
```

これで表示は想定通りになります。

# さいごに
上記のような対応で無事ローカライズ対応することができました！！！が、対応後すぐにバグが修正されたXcode11.2がリリースされました...

私はそっと `revert` しました:see_no_evil: