iOS 国际化如何指定默认语言
怪我咯
怪我咯 2017-04-18 09:51:57
0
4
421

如题,app支持中文,英文,日文三种语言。希望在其他语言的情况下都使用英文。如何实现啊,网上看到的自己实现Localized,有没有苹果原生的方法来指定啊

怪我咯
怪我咯

走同样的路,发现不同的人生

répondre à tous(4)
巴扎黑

Changez la zone de développement dans le projet plist en en puis

<key>CFBundleDevelopmentRegion</key>
    <string>en</string>

Le principe multilingue d'Apple

Introduction du nom
Localizable.strings Fichier multilingue, utilisé pour localiser les chaînes dans l'application
InfoPlist.strings Fichier multilingue, utilisé pour localiser le nom de l'application
Base Multi-langue par défaut Le fichier , hérité et remplacé par d'autres multi-langues (chinois, anglais, ...), ne sera pas utilisé directement par iOS. Ce n'est que lorsque l'entrée correspondante n'est pas trouvée dans le fichier multi-langue correspondant qu'elle sera recherchée. dans Base, et sa fonction est la même que celle de la fonction Les valeurs par défaut des paramètres sont similaires.

Principe de recherche
Lorsque l'application est démarrée, iOS parcourra la priorité de langue définie par l'utilisateur pour correspondre aux fichiers multilingues de App
S'il y a une correspondance, la langue correspondante sera utilisée
S'il n'y a pas de correspondance, la langue correspondant à la région de développement dans la plist sera utilisée

Chinois simplifié zh-Hans
Japonais ja
Anglais en

Plus d'introduction

刘奇

Bonjour, utilisez simplement la méthode DPLocalizedString que j'ai fournie à la place de celle NSLocalizedString du système.

#define CURR_LANG   ([[NSLocale preferredLanguages] objectAtIndex:0])

+ (NSString *)DPLocalizedString:(NSString *)translation_key {
    
    NSString * LocalizableStr = NSLocalizedString(translation_key, nil);
    
    if (!([CURR_LANG rangeOfString:@"ja"].length >0) &&
        !([CURR_LANG rangeOfString:@"zh-Hant"].length >0) &&
        !([CURR_LANG rangeOfString:@"zh-Hans"].length >0)) {
        
        NSString * path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"];
        
        NSBundle * languageBundle = [NSBundle bundleWithPath:path];
        
        LocalizableStr = [languageBundle localizedStringForKey:translation_key value:@"" table:nil];
        
    }
    
    return LocalizableStr;
}
黄舟

Bonjour, je vais vous donner une idée. La mise en œuvre spécifique devra peut-être être réalisée par vous-même en fonction de vos besoins.

  1. Obtenir la langue par défaut de la machine

NSArray  *languages = [NSLocale preferredLanguages];
//获得首选语言版本
NSString *language = [languages objectAtIndex:0];

2. Déterminer la langue

if ([language hasPrefix:@"zh-Hans"]) { //简体中文
               //do...
            } else if ([language hasPrefix:@"zh-TW"] || [language hasPrefix:@"zh-HK"] || [language hasPrefix:@"zh-Hant"]) {//繁体中文  由于繁体又有台湾繁体和香港繁体之分 进行判断然后为繁体
            } else if ([language hasPrefix:@"en"]) {//英文
               
 
            }else if ([language hasPrefix:@"ja"]){//日文

            }else{
            //设置语言为英文...    
        }
Ty80

L'internationalisation d'iOS a toujours été très difficile à gérer, et j'ai toujours voulu trouver une solution plus parfaite pour résoudre le problème de l'internationalisation. J'ai partagé un article trop international auparavant, et maintenant je vais l'analyser en profondeur.
Parce que l'article a été écrit auparavant. L'article original a été mis à jour. Sera mis à jour à la fin.
1. Problèmes
1. Le responsable n'a pas donné de solution parfaite à l'internationalisation.
2. Vous ne pouvez pas spécifier d'autres langues à afficher lorsque cette langue n'est pas adaptée. La dernière langue sélectionnée sera utilisée par défaut.
3. Après une mise à jour majeure de la version, la mise à jour des données n'est pas compatible avec la version précédente.
4. L'ajout d'un fichier de ressources de langue spécifique ne correspond pas à la langue renvoyée par le code.

2. Réflexion sur le cadre d'internationalisation

En réponse aux problèmes ci-dessus, j'ai activé un plist pour gérer les problèmes d'internationalisation.
La clé et la valeur dans le plist correspondent l'une à l'autre. Si la langue actuelle est obtenue et correspond au plist, la langue actuelle sera affichée, sinon la langue spécifiée sera affichée.

3. Méthode de mise en œuvre
Ajoutez le package linguistique correspondant basé sur une langue spécifique. Utilisez NSLocalizedString pour obtenir la langue correspondante.
Obtenir la langue actuelle

NSArray * allLanguages = [defaults objectForKey:@"AppleLanguages"];
NSString * CURR_LANG = [allLanguages objectAtIndex:0]; 

Déterminer si la langue actuelle est la langue à adapter

if (![CURR_LANG hasPrefix:@"en"] && ![CURR_LANG hasPrefix:@"zh"])
{
   NSString * path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"];
   NSBundle * languageBundle = [NSBundle bundleWithPath:path];
   s = [languageBundle localizedStringForKey:translation_key value:@"" table:nil];
}

s est la langue actuelle qui n'est ni le chinois ni l'anglais. L'anglais peut être supprimé à l'heure actuelle, car que ce soit pour juger l'anglais ou non, il doit être traité en anglais. Affiché comme suit

if (![CURR_LANG hasPrefix:@"zh"])
{
   NSString * path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"];
   NSBundle * languageBundle = [NSBundle bundleWithPath:path];
   s = [languageBundle localizedStringForKey:translation_key value:@"" table:nil];
}

Lien de l'article

Il y a quelques notes dans mes notes sur la synthèse du contenu international.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal