Xcode 11 / iOS 13本地化问题

时间:2019-09-12 11:41:50

标签: ios xcode localization

自从在Xcode 11 GM中打开项目以来,我遇到了一个分组的UITableView无法在我的设置控制器中本地化的问题。

我使用可本地化的字符串并检查所有ObjectId是否正确。它适用于Xcode 10和iOS 12 SDK。奇怪的是,本地化在应用程序的其他任何地方都有效。只是一个TableView。

有人,有什么想法吗?我什至尝试删除本地化并再次添加。

5 个答案:

答案 0 :(得分:11)

更新:该问题似乎已在Xcode 11.2中修复

-

现在已在Xcode 11.1 GM的发行说明中将其视为一个问题。

情节提要和XIB文件中的

UITableViewCell标签在运行时不使用字符串文件中的本地化字符串值。 (52839404)

https://developer.apple.com/documentation/xcode_release_notes/xcode_11_1_release_notes/

答案 1 :(得分:9)

我在Xcode 11 GM上遇到了同样的问题。 就我而言,静态UITableViewCell中标题UILabel的本地化字符串未应用。

这是我的解决方法;

  1. 通过情节提要手动将标签的“对象ID”复制到“辅助功能标识符”中。
  2. 在UITableViewDataSource类中实现以下代码。
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = super.tableView(tableView, cellForRowAt: indexPath)
    if let label = cell.textLabel, let id = label.accessibilityIdentifier, id.count > 0 {
        let key = id + ".text"
        let localizedString = NSLocalizedString(key, tableName: "Main", comment: "")
        if key != localizedString {
            label.text = localizedString
        }
    }
    return cell
}

答案 2 :(得分:2)

Xcode 11现在已经正式发布,但是事情似乎没有改变。我还有一个带有静态单元格的表,使用objectIds可以正确定位单元格的标题,并且这种方法还可以正常工作数年。但是从iOS 13开始,我必须创建IBOutlet并在viewDidLoad中本地化静态单元格。如果有人有更好的主意,欢迎您!

答案 3 :(得分:2)

lavox提供的解决方法也对我有用。在我的应用中,我使用的是Objective-C。这是对应的:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell = [super tableView:tableView cellForRowAtIndexPath:indexPath];
    if(cell != Nil) {
        UILabel *label = cell.textLabel;
        NSString *labelId = label.accessibilityIdentifier;

        if (labelId.length > 0) {
            NSString *key = [labelId stringByAppendingString:@".text"];
            NSString *localizedString = NSLocalizedStringFromTable(key, @"Main", @"");
            if (key != localizedString) {
                label.text = localizedString;
            }
        }
    }
    return cell;
}

答案 4 :(得分:0)

我必须将我拥有的每个静态表都转换为自定义单元格。如果将其保留为“与自定义样式不同”的样式,则会失去本地化功能。 我将图像附加到您必须更改的位置。 这也意味着很多工作,您必须删除已经重新制作的每根电线,设置标签约束等。 基本上,不使用任何与“自定义”不同的样式,您还可以。

enter image description here