【问题标题】:How to use different fonts for different languages in an iOS application?如何在 iOS 应用程序中为不同的语言使用不同的字体?
【发布时间】:2014-01-31 20:29:59
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

标签: ios localization fonts uiappfonts


【解决方案1】:

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

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

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

然后我使用:

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

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

【讨论】:

    【解决方案2】:

    为了在应用程序中使用特定的UIFonts,我创建了UIButton 和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,您将使用setText 而不是setTitleLabel" and setTextColorinstead ofsetTitleColor`。

    如需更多信息到preferredLanguages look at this website,当然不要忘记将您的fonts 添加到项目Target 和plist。

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

      • 我宁愿寻找一种方法来针对 UIAppFonts 在“InfoPlist.strings”中引入一些东西。这样我就可以在代码中调用字体的名称,它会选择正确的字体。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多