Est-il possible d'insérer une chaîne NSLocalizedString dans le constructeur d'interface. Par exemple définir un texte d'étiquette à une chaîne localisée au lieu d'une chaîne statique? Je déteste vraiment créer une propriété pour chaque élément nécessitant une chaîne localisée. NSLocalizedString n'est pas la méthode recommandée pour localiser les fichiers Interface Builder.iPhone: NSLocalizedString dans le constructeur d'interface?
Répondre
Ce poste pourrait avoir quelques conseils pour vous:
http://blog.wilshipley.com/2009/10/pimp-my-code-part-17-lost-in.html
Consultez ibtool
:
http://www.bdunagan.com/2009/03/15/ibtool-localization-made-easy/
Même si ce poste est vieux, pour les personnes intéressées à localisant automatiquement vos fichiers IB, vérifier ceci: https://github.com/angelolloqui/AGi18n
AVIS DE NON-RESPONSABILITÉ: Je suis le développeur de la bibliothèque
Votre lib est magique Ange! Je vous remercie. –
@Angel, je suis confronté à un problème avec votre bibliothèque. Impossible de l'installer correctement dans ma machine en utilisant une instruction curl en ligne. –
J'ai répondu à votre problème dans github, mais fondamentalement, vous n'avez pas besoin d'installer les outils si tout ce que vous voulez est d'utiliser la localisation automatique des fichiers IB. Les outils permettent d'extraire des étiquettes de IB pour vous aider à tout localiser et fusionner facilement les chaînes. –
Vous pouvez avancé de l'utilisateur Runtime Attributs définis:
http://cupobjc.blogspot.com.es/2014/04/interfaz-builder-localization.html
d'abord définir une nouvelle catégorie pour UILabel:
#import "UILabel+Localized.h"
@implementation UILabel (Localized)
-(void) setTextLocalized:(NSString *)aText{
[self setText:NSLocalizedString(aText, nil)];
}
@end
Puis, dans la Générateur d'interface, Attributs d'exécution définis par l'utilisateur:
textLocalized String votre chaîne à localisée
Très intelligent, mais ne fonctionne pas pour tous les éléments, vous finissez par écrire un tas de catégories pour chaque élément de l'interface utilisateur (ex: segmentedCotnrol, titre des pages, des boutons, etc) – aryaxt
Excellente solution. Je vous remercie! J'ai dû utiliser un attribut d'un mot ("localisable") parce qu'il a échoué avec "textLocalized". Peut-être que j'ai fait quelque chose de mal mais je commente ceci juste au cas où cela arriverait à quelqu'un d'autre (j'ai: 'cette classe n'est pas conforme à la valeur clé codage-conforme pour la clé localiséeText'). Aussi, j'ai déclaré la méthode dans 'l'interface' (c'est peut-être trivial, mais je le dis aussi). –
Vous pouvez sélectionner "Localized String" comme type de l'attribut, et la valeur est censée être la clé de chaîne ... mais cela n'a pas fonctionné. Il a simplement affiché la clé (comme "user_greeting"). –
Pour éviter de créer un groupe de catégories, créez un seul qui catégoriser les NSObject et vérifiez la isKindOfClass comme l'a suggéré. Voir le code ci-dessous:
#import "NSObject+Localized.h"
@implementation NSObject (Localized)
///
/// This method is used to translate strings in .xib files.
/// Using the "User Defined Runtime Attributes" set an entry like:
/// Key Path: textLocalized
/// Type: String
/// Value: {THE TRANSLATION KEY}
///
-(void) setTextLocalized:(NSString *)key
{
if ([self isKindOfClass:[UILabel class]])
{
UILabel *label = (UILabel *)self;
[label setText:NSLocalizedString(key, nil)];
}
else if ([self isKindOfClass:[UIButton class]])
{
UIButton *button = (UIButton *)self;
[button setTitle:NSLocalizedString(key, nil) forState:UIControlStateNormal];
}
else if ([self isKindOfClass:[UIBarButtonItem class]])
{
UIBarButtonItem *button = (UIBarButtonItem *)self;
[button setTitle:NSLocalizedString(key, nil)];
}
}
@end
J'ai fait la même chose que @OAK mentionné. Voici le code complet.
- 1. NSLocalizedString Path
- 2. Gestion de plusieurs centaines d'occurrences de NSLocalizedString
- 3. Modification de la langue de NSLocalizedString() en cours d'exécution
- 4. Dois-je sauvegarder les chaînes renvoyées par NSLocalizedString()?
- 5. iPhone: lecture NSLocalizedString à partir du fichier anglais .strings même si une autre langue est définie
- 6. Générique Type dans le constructeur
- 7. Comportement étrange dans le constructeur
- 8. Lancement infini dans le constructeur
- 9. Constructeur paramétré dans le servlet
- 10. L'itérateur STL dans le constructeur
- 11. constructeur dans l'objectif c
- 12. Arrêter le constructeur statique
- 13. créer un bouton personnalisé avec l'image dans le constructeur d'interface
- 14. contrôleur rootview dans le constructeur de l'interface?
- 15. building extensible Image dans le constructeur d'interface
- 16. HTML dans le constructeur Element de Mootools?
- 17. Microsoft Unity, paramètres dans le constructeur
- 18. membres Déclarer que dans le constructeur
- 19. Callback AJAX dans le constructeur Obj
- 20. Que signifie le colon dans un constructeur?
- 21. retour à vide dans le constructeur
- 22. Onglet Ordre dans le constructeur d'interface?
- 23. effet secondaire externe dans le constructeur
- 24. Botan :: SecureVector - Destructeur appelé dans le constructeur?
- 25. Spring Application Contexte disponible dans le constructeur
- 26. Classe Functor travaillant dans le constructeur
- 27. Classe PHP non existant dans le constructeur
- 28. Arguments du modèle C++ dans le constructeur
- 29. Erreur dans le constructeur C++ CreateThread()
- 30. Get TypeInfo dans le constructeur statique
Je n'aime pas utiliser ibtool. parce qu'il crée plusieurs fichiers nib pour chaque langue, et si vous décidez de changer l'interface, vous devez aller à chaque nib pour chaque langue et les changer tous 1 par 1 – aryaxt
Peu importe, ibtool est la bonne façon de le faire. Avoir des pointes séparées vous permet d'ajuster la taille des boutons ou même la disposition entière pour s'adapter à des chaînes plus longues ou à des attentes spécifiques à la culture. ibtool a aussi quelques fonctionnalités qui vous permettent de faire une "localisation incrémentale"; Voir 'man ibtool' pour plus d'informations. –
ibtool ne fonctionne pas correctement lors de la récupération des chaînes de localisation d'un serveur, car elles ne sont pas présentes lors de la compilation. –