Я нахожу, что некоторыеNSPredicateEditor
/NSPredicateEditorRowTemplate
значения локализуется автоматически OS X.Почему NSPredicateEditor автоматически локализует некоторые строки выражений? Как отключить?
Это легко наблюдать в отображении операторов: .equalTo
в строку is
.
Но я только заметил, что строки UTI сопоставляются с удобочитаемой версией этого UTI.
Ниже приведено значение "public.image"
, но оно отображается как "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)
}
Только некоторые действительны ИМП отображаются таким образом. Я не знаю, предоставляются ли в других форматах за пределами операторов и UTI автоматические локализованные строки.
Это проблема, потому что я хочу localize my NSPredicateEditor and Row Templates.
Процесс локализации предиката включает в себя сопоставление ключа с локализованным значением.
KEY: "%[left]@ %[is]@ %[right]@"
VAL: "%1$[left_display_string]@ %2$[is]@ %3$[right_display_string]@"
Проблема заключается в том, что значения в ключе должны соответствовать строкам , показанных в пользовательском интерфейсе. Не строки, первоначально установленные в левом и правом выражениях шаблона Row Template.
Итак, я не могу локализовать с помощью "public.image"
в ключе. UI по какой-то причине уже локализует это до "image"
. Если я хочу локализовать шаблон Row, я должен использовать строку "image"
. И я не знаю, как и почему эта строка "image"
выбрана.
Я мог бы определить эти строки с помощью тестирования, а затем написать таблицу, которая отображает выражение в локализованную строку. Но я предпочел бы иметь решение, которое отключает эту автоматическую локализацию, поэтому мне не нужно беспокоиться о строках, которые я не тестировал.
Почему UTI локализованы автоматически? Получают ли другие ценности одинаковое лечение?
Есть ли способ отключить автоматическую локализацию строк UTI и/или всего редактора предикатов?
Я открыл rdar: // 30468110 для Apple, чтобы добавить эти частные словари перевода в общедоступный API. – pkamb