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

时间:2012-08-27 04:11:45

标签: ios localization fonts uiappfonts

我的情况是我想在iOS应用程序中为不同的语言使用不同的字体。

起初,我想过使用.ttf文件的本地化版本。我尝试在本地化项目文件夹中为不同语言添加本地化的.ttf文件,并在其中安装相同的文件名和字体名称。它不起作用。

然后我查看了InfoPlist.strings文件中的不同语言。在我看来,它是主Info.plist中找到的'key'字符串的键值组合。我找到了关键字'UIAppFonts'的字体条目,这是一个数组。我无法弄清楚如何将InfoPlist.strings中的本地化字体文件名作为数组。

作为最后的手段,我正在考虑在Localizable.stings文件中添加本地化字体名称,以根据当前区域设置选择字体名称,并在我使用字体的任何地方替换项目中的所有实例。 (显然这很麻烦)。像:

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

如果有人之前已经这样做,请提供帮助。如果能够以某种方式实现前两个想法中的一个,那就太好了。

3 个答案:

答案 0 :(得分:2)

我实际上是通过为项目和针对UIAppFonts的plist中的不同语言添加不同的字体文件来完成此操作。然后我介绍了:

"fontName" = "English Font";
"fontName" = "Russian Font";
在Localizable.strings中为每种受支持的语言

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

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

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

答案 1 :(得分:0)

UIAppFonts正在走上正轨。首先,将.ttf文件添加到Resources文件夹下的项目中。然后,您需要在Info.plist中添加一个新行(而不是InfoPlist.strings?)。您可以通过单击plist中最后一行最右侧的加号(+)来执行此操作,或者我认为您可以按住Control键并单击任何其他属性并选择“新建”。从第一列的下拉列表中选择UIAppFonts,并在其左侧放置一个箭头(>)。单击此箭头以展开属性,您应该看到item0,在那里键入.ttf文件的名称。按住Control键并单击以根据需要添加更多项目。

这会将您的自定义字体添加到应用程序中。重要的是要注意,当您使用fontWithName加载它们时,您在@“font-name”中提供的名称可能不会(通常是IS NOT)与.ttf文件完全相同的名称。相反,它是预览中显示的字体书中的全名 - >显示字体信息。

这一切都很好,但它没有本地化任何东西。您可以使用类似下面的行来查询语言代码,然后根据它确定要加载的字体:

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

答案 2 :(得分:0)

要在应用中使用特定的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;
}

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

enter image description here

对于UILabel,您可以使用setText代替setTitleLabel" and setTextColor instead of setTitleColor`。

有关preferredLanguages look at this website的更多信息,当然不要忘记将fonts添加到Target项目以及plist

相关问题