12

iOS アプリケーションで、言語ごとに異なるフォントを使用したいシナリオがあります。

最初は、ローカライズされたバージョンの .ttf ファイルを使用することを考えました。同じファイル名とフォント名がインストールされているさまざまな言語のローカライズされたプロジェクト フォルダーに、ローカライズされた .ttf ファイルを追加しようとしました。うまくいきませんでした。

次に、さまざまな言語の InfoPlist.strings ファイルを調べました。メインの Info.plist にある「キー」文字列のキーと値の組み合わせのように見えました。配列であるキー「UIAppFonts」に対するフォントエントリを見つけました。ローカライズされたフォント ファイル名を InfoPlist.strings に配列として配置する方法がわかりません。

最後の手段として、Localizable.stings ファイルにローカライズされたフォント名を追加して、現在のロケールに従ってフォント名を選択し、フォントを使用したプロジェクト内のすべての出現箇所を置き換えることを考えています。(明らかに、それは非常に面倒です)。お気に入り:

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

誰かが以前にこれを行ったことがある場合は、助けてください。最初の 2 つのアイデアのいずれかが何らかの方法で実装できれば素晴らしいことです。

4

3 に答える 3

2

私は実際に、プロジェクト内のさまざまな言語用のさまざまなフォント ファイルを追加し、UIAppFonts に対する plist でこれを行いました。それから私は紹介しました:

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

サポートされている各言語の Localizable.strings で

次に、次を使用してアクセスしました:

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

質問で述べたように、他の 2 つのアプローチはよりエレガントに見えます。それらに関する解決策は非常に役立ちます。

于 2012-08-29T04:10:49.870 に答える
0

アプリ内で特定のものを使用するために、 andUIFontsの拡張機能を作成しました。同じ問題があり、言語ごとに異なるものを選択したため、拡張機能にもチェックを挿入しました。どのように見えた:UIButtonUILabelUIFonts

@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

ここに画像の説明を入力

setTextColor setTitleColor`の代わりにUILabel使用します。setTextsetTitleLabel" and instead of

preferredLanguages の詳細については、この Web サイトを参照してfontsください。もちろん、あなたをプロジェクトのターゲットとに追加することを忘れないでくださいplist

于 2014-01-31T12:29:59.783 に答える
0

あなたはUIAppFontsで正しい軌道に乗っています。まず、.ttf ファイルをプロジェクトの Resources フォルダーに追加します。次に、Info.plist に新しい行を追加する必要があります (InfoPlist.strings ではありませんか?)。これを行うには、plist の最後の行の右端にあるプラス記号 (+) をクリックします。または、他のプロパティを Control キーを押しながらクリックして、[新規] を選択することもできると思います。最初の列のドロップダウンから UIAppFonts を選択すると、その左側に矢印 (>) が表示されます。この矢印をクリックしてプロパティを展開すると、item0 が表示されます。そこに .ttf ファイルの名前を入力します。必要に応じて、Ctrl キーを押しながらクリックして項目を追加します。

これにより、カスタム フォントがアプリケーションに追加されます。fontWithName を使用してそれらをロードする場合、@"font-name" で指定する名前は .ttf ファイルとまったく同じ名前ではない可能性がある (通常はそうではない) ことに注意することが重要です。むしろ、[プレビュー] --> [フォント情報を表示] の下のフォント ブックに表示される名前全体です。

これはすべて問題ありませんが、何もローカライズしません。以下の行のようなものを使用して言語コードを照会し、それに基づいてロードするフォントを決定できます。

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