12

我在一个场景中,我想在我的 iOS 应用程序中为不同的语言使用不同的字体。

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

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

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

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

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

4

3 回答 3

2

实际上,我通过在项目中和针对 UIAppFonts 的 plist 中为不同的语言添加不同的字体文件来做到这一点。然后我介绍了:

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

在每种支持的语言的 Localizable.strings 中

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

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

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

于 2012-08-29T04:10:49.870 回答
0

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

这会将您的自定义字体添加到应用程序中。请务必注意,当您使用 fontWithName 加载它们时,您在 @"font-name" 中提供的名称可能与 .ttf 文件的名称不同(通常也不是)。相反,它是出现在字体册中预览 --> 显示字体信息下的全名。

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

NSString * language = [[NSLocale preferredLanguages] objectAtIndex:0];
于 2012-08-27T16:30:45.813 回答
0

为了在应用程序中使用特定UIFonts的内容,我创建了UIButtonand的扩展UILabel。因为我有同样的问题,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类:

在此处输入图像描述

因为UILabel您将使用setTextColorsetText代替setTitleColor`。setTitleLabel" and instead of

有关preferredLanguages 的更多信息,请查看此网站,当然不要忘记将您fonts的项目添加到Target 以及plist.

于 2014-01-31T12:29:59.783 回答