如何在iOS应用程序中为不同的语言使用不同的字体?

13

我有一个需求,希望在我的iOS应用程序中为不同的语言使用不同的字体。

一开始,我考虑使用本地化版本的.ttf文件。我尝试在不同语言的本地化项目文件夹中添加带有相同文件名和字体名称的本地化.ttf文件。但这并没有起作用。

然后,我查看了不同语言的InfoPlist.strings文件。它似乎是主要Info.plist中找到的“key”字符串的键值组合。我发现了针对键“UIAppFonts”的字体条目,它是一个数组。我无法弄清楚如何将本地化的字体文件名作为数组放入InfoPlist.strings中。

最后,我考虑在Localizable.stings文件中添加本地化的字体名称,根据当前语言环境选择字体名称,并替换我在项目中使用字体的所有出现位置(显然这很麻烦)。例如:

UIFont *font = [UIFont fontWithName:NSLocalizedString(@"font-name", nil) size:16];

如果有人以前做过这个,请协助一下。如果能够实现前两个想法中的任意一个,那就太好了。


可能是http://stackoverflow.com/questions/9051658/ios-localization-can-i-use-2-ttf-file-in-the-plist的重复问题。 - Imran Raheem
3个回答

3

我曾通过在项目中为不同语言添加不同的字体文件,并在UIAppFonts的plist中进行设置来完成此操作。然后我引入了:

"fontName" = "English Font";
"fontName" = "Russian Font";

每种支持的语言都需要在Localizable.strings中进行翻译。

然后我使用以下方式访问:

UIFont *font = [UIFont fontWithName:NSLocalizedString(@"fontName", nil) size:16];

正如我在问题中提到的,其他两种方法似乎更加优雅。任何与这些方法相关的解决方案都将非常有帮助。


1
为了在我的应用程序中使用特定的UIFonts,我创建了一个UIButtonUILabel的扩展。因为我遇到了同样的问题,需要为不同的语言选择不同的UIFonts,所以我还在我的扩展中插入了一个检查。代码如下:
@implementation MyButton{
    NSString *_language;
}

- (void)awakeFromNib{
    
    _language = [[NSLocale preferredLanguages] objectAtIndex:0];        
    [self setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    [self.titleLabel setFont:[self whichFontShouldBeUsed]];
}

- (UIFont *)whichFontShouldBeUsed{
    
    UIFont *fontToUse = [UIFont fontWithName:@"Basic Font"
                                        size:self.titleLabel.font.pointSize];
    
    if( [_language isEqualToString:@"tr"] &&
        [_language isEqualToString:@"pl"] ){
        fontToUse = [UIFont fontWithName:@"Another Font" 
                                    size:self.titleLabel.font.pointSize];
    } else if( [_language isEqualToString:@"ja"] &&
               [_language isEqualToString:@"tr"] ){
        
        fontToUse = [UIFont boldSystemFontOfSize:self.titleLabel.font.pointSize];
    } else if( [_language isEqualToString:@"ru"] ){
        fontToUse = [UIFont fontWithName:@"Another Font"
                                    size:self.titleLabel.font.pointSize + 2.0f];
    }
    
    return fontToUse;
}

这样可以自动切换字体。接下来,您只需在 Interface Builder 中添加此类即可。选择您想要的 UIButton 并添加您的自定义 UIButton 类:

enter image description here

对于UILabel,你应该使用setText而不是setTitleLabel,并且使用setTextColor而不是setTitleColor

如需更多关于preferredLanguages的信息,请查看此网站,当然别忘了将你的fonts添加到项目目标中,并且也要添加到plist中。


0

使用UIAppFonts是正确的做法。首先,在资源文件夹下添加.ttf文件。然后,需要在Info.plist中添加一行新的内容(不是InfoPlist.strings?)。您可以通过点击plist中最后一行右侧的加号(+)或者控制单击任何其他属性并选择“新建”来完成此操作。在第一列的下拉菜单中选择UIAppFonts,这将在其左侧放置一个箭头(>)。单击此箭头以展开该属性,您应该会看到item0,输入您的.ttf文件名称。如有必要,可以通过控制单击添加更多项目。

这将向应用程序添加自定义字体。重要的是要注意,当您使用fontWithName加载它们时,您提供的@"font-name"名称可能与.ttf文件的确切名称不同(通常不同)。相反,它是整个名称,就像在Font Book下的预览 ->显示字体信息中显示的那样。

所有这些都很好,但它并没有本地化任何内容。您可以使用以下代码查询语言代码,然后根据该代码决定加载哪种字体:

NSString * language = [[NSLocale preferredLanguages] objectAtIndex:0];

我更倾向于在“InfoPlist.strings”中引入一些内容,以针对UIAppFonts。这样我就可以在代码中调用字体名称,并选择正确的字体。 - sajid.chingchong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接