Je trouve que quelquesNSPredicateEditor
/NSPredicateEditorRowTemplate
valeurs sont localisées automatiquement par OS X.Pourquoi NSPredicateEditor localise-t-il automatiquement certaines chaînes d'expression? Comment désactiver?
Ceci est facilement observable dans la cartographie des opérateurs: .equalTo
à la chaîne is
.
Mais je viens de remarquer que les chaînes UTI sont en cours de mappage vers une version lisible par l'homme de cette UTI. Ci-dessous, j'ai défini "public.image"
, mais il est alors affiché sous la forme "image"
.
func setupPredicateEditor() {
let left = [NSExpression(forKeyPath: "Type")]
let operators = [NSComparisonPredicate.Operator.equalTo.rawValue as NSNumber]
let right = [
NSExpression(forConstantValue: "public.image"),
NSExpression(forConstantValue: "public.text"),
NSExpression(forConstantValue: "public.fakeUTI"),
];
let rowTemplate = NSPredicateEditorRowTemplate.init(leftExpressions: left, rightExpressions: right, modifier: .all, operators: operators, options: 0)
predicateEditor.rowTemplates = [rowTemplate]
predicateEditor.addRow(self)
}
Seuls certains IVU valides sont mises en correspondance de cette manière. Je ne sais pas si d'autres formats au-delà des opérateurs et des UTI sont donnés des chaînes localisées automatiques.
Ceci est un problème car je veux localize my NSPredicateEditor and Row Templates.
Le processus de localisation du prédicat implique l'appariement d'une clé à une valeur localisée.
KEY: "%[left]@ %[is]@ %[right]@"
VAL: "%1$[left_display_string]@ %2$[is]@ %3$[right_display_string]@"
Le problème est que les valeurs de la clé doivent correspondre aux chaînes indiquées dans l'interface utilisateur. Pas les chaînes définies à l'origine pour les expressions gauche et droite du modèle de lignes. Donc, je ne peux pas localiser avec "public.image"
dans la clé. L'interface utilisateur est pour une raison déjà localiser cela à "image"
. Si je veux localiser le modèle de ligne, je dois utiliser la chaîne "image"
à la place. Et je ne sais pas comment ou pourquoi cette chaîne "image"
est sélectionnée.
Je pourrais déterminer ces chaînes via des tests, puis écrire une table qui mappe l'expression à la chaîne localisée. Mais je préférerais avoir une solution qui désactive cette localisation automatique afin que je n'aie pas à m'inquiéter des chaînes que je n'ai pas testées.
Pourquoi les infections urinaires sont-elles localisées automatiquement? Est-ce que les autres valeurs reçoivent le même traitement?
Existe-t-il un moyen de désactiver la localisation automatique des chaînes UTI et/ou de l'éditeur de prédicat entier?
J'ai ouvert rdar: // 30468110 pour qu'Apple ajoute ces dictionnaires de traduction privés à l'API publique. – pkamb