SwiftUI本地化个别字段失效问题
SwiftUI本地化个别字段失效问题

SwiftUI本地化个别字段失效问题

问题描述

在测试应用本地化的过程中,发现应用的名称没有实现本地化,还有标题也没有实现本地化。

但是,当语言为中文时,本地化是正常显示的。

代码部分:

Group {
    Text("Welcome to use")
    Text("AppName")
}
.font(.largeTitle)
.fontWeight(.semibold)

这里的AppName在本地化文件中,可以找到对应的字段信息。

在阿拉伯语言下,显示的内容应该是默认的英语标题“Banklets”。

但是,实际上这个AppName并没有实现本地化。

在中文语言下,显示的内容是本地化的中文标题“存取猪猪”。

但是这个问题,我的推测是偶发性的,因为本地化文件正常情况下,不会使用Key显示,如果有本地化,则显示本地化的内容。如果没有本地化,则显示默认语言的内容。

因此,这一问题可能跟某些内容或操作有关。

问题排查

我尝试修改Key的内容,这里的AppName是修改后的Key,问题没有得到解决。

接着,我尝试在本地化文件中添加阿拉伯语的本地化内容,添加后,内容正常显示。

虽然,这的确解决了问题,但实际上,我们不可能遇到这个问题时,重复设置所有的本地化内容。

因此我尝试修改应用的默认语言,英语的字段为“存取猪猪”:

显示的字段,仍然跟本地化没有关系。

这也就意味着,本地化的Key和对应的内容不是造成个别字段失效的原因。

然后,我把问题的原因放到View代码层面:

HStack(spacing: 0) {
    Group {
        Text("Welcome to use")
        Text("AppName")
    }
    .font(.largeTitle)
    .fontWeight(.semibold)
}

怀疑是Group只支持首个Text的本地化。我颠倒两个Text的顺序。

问题仍然存在。

然后考虑的就是应用新增字段的本地化是否失效?如果失效,那么就从新增字段的本地化问题进行解决,如果没有失效,则检查是否是失效字段的Key和内容存在某种关联。

因此,我新创建了一个内容字段,Key为“Some”,默认的英语内容为“yixie”,中文语言的内容为“一些”。

然后替换原先的AppName,如果Some在中文语言下显示“一些”,其他语言下显示“Some”,那么说明本地化文件是正常的。

最后,通过对比可以看到,中文和英语的语境下,本地化内容是正常的,而在其他语言中,默认的本地化失效,变成了显示本地化内容的Key。

总结

最终的问题结果就是,即使设置了默认语言的本地化内容,如果不单独设置其他的语言的本地化,其他语言则可能显示本地化的Key。

这一问题的是在测试的过程中发现的,之前没有发现过这一问题。因此,问题的根源可能跟大量的本地化字段导致的,前期本地化字段量少,因此功能是正常的,当字段量变多时,默认语言的本地化内容就无法覆盖其他语言的本地化,就会显示本地化字段的Key。

另一种可能就是,原本Xcode的本地化就是显示Key,默认语言的本地化仅用于作为字段参照。如果不设置本地化内容,就显示Key,如果设置本地化内容,则显示本地化内容,而不是显示默认语言的本地化。

如果是后者,则意味着本地化没有问题,而是我前期理解本地化功能存在偏差。

如果想要实现默认语言本地化覆盖其他语言的本地化,就应该考虑Key和默认语言的内容一致:

HStack(spacing: 0) {
    Group {
        Text("Welcome to use")
        Text("Banklet") // 应用名称
    }
    .font(.largeTitle)
    .fontWeight(.semibold)
}

这样就可以正常的显示应用名称。

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开放者。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注