#ios #localization
#iOS #локализация
Вопрос:
При локализации моего приложения я обнаружил много дубликатов из-за оболочки.
Например, я хочу использовать «готово» и «Done». Должен ли я иметь два отдельных значения ключа для перевода, или я должен использовать «Готово» и ввести его в нижний регистр?
В некоторых языках разные слова, если они в верхнем регистре или нет?
Каковы плюсы / минусы использования одного ключа вместо двух.
Комментарии:
1. IMO (именно к этому стремится этот вопрос), то, как вы подходите к этому, зависит от того, какие языки вы хотите поддерживать. Простой пример — зайти в Google Translate и поставить «готово» и «Done» напротив русского. Using done gives you сделанный while Done gives Готово. Я не говорю по-русски, поэтому не знаю, допустимо ли это, но существует потенциал для уникальных переводов на разных языках. С другой стороны, в других языках отсутствует понятие заглавных букв, и это не повлияет.
2. Да — я думаю, реальный вопрос в том .. Есть ли в некоторых языках разные слова, если они в верхнем регистре или нет? И если нет, то каковы плюсы / минусы использования одного ключа вместо двух.
Ответ №1:
Как правило, вы не должны думать о том, что отдельные слова локализуются изолированно. Вам следует подумать о локализации элементов пользовательского интерфейса и локализации намерений. Итак, вместо «готово» вы имеете в виду «метку для кнопки, которую пользователь нажимает, чтобы указать, что они выполнены». Это может переводиться иначе, чем «метка, указывающая на то, что задача завершена». Они могут быть написаны заглавными буквами по-разному, но это могут быть совершенно разные слова или разные спряжения / склонения / роды в зависимости от грамматики.
Вот почему поле комментария NSLocalizedString
так важно. Если оно пустое или просто повторяет ключ, то вы, вероятно, неправильно подходите к локализации.
В качестве самого простого примера рассмотрим просьбу переводчика перевести слово «огонь». В английском языке мы используем одно и то же слово в «ревущем огне» и «стрелять из пистолета». Вы не можете перевести это слово без контекста; а в контексте вы можете указать, хотите ли вы, чтобы оно было написано с заглавной буквы, если это уместно.
Все это говорит о том, что иногда у вас есть абсолютно одинаковое значение для двух разных элементов пользовательского интерфейса, и вы абсолютно хотите использовать один и тот же перевод для них обоих, чтобы избежать путаницы, но в одном случае вы хотите другую заглавную букву по эстетическим соображениям. В этом случае вам следует перевести то, что вам удобно (обычно версию в нижнем регистре), а затем использовать localizedCapitalized
или localizedUppercase
для его корректировки. Я часто использую это для того, чтобы сделать кнопки заглавными.
Но вы правы в том, что иногда написание слова с заглавной буквы может изменить его значение, что сводится к комментированию ваших фраз локализации, чтобы переводчик знал, какое написание использовать. И если ваше значение и контекст не совсем совпадают, вам, вероятно, понадобятся два ключа.
Отвечая на ваш основной вопрос, в английском языке есть слова, которые означают разные вещи в зависимости от того, как они написаны с заглавной буквы (см. Ссылку CodeBender), но в других языках также действуют совсем другие правила. В немецком языке все существительные пишутся с заглавной буквы, но не пишутся с заглавной буквы некоторые прилагательные, которые в английском пишутся с заглавной буквы. (Сравните «американский автомобиль» и «das amerikanische Auto»). В русском языке совсем другие правила для заглавных букв, чем в английском (в русском языке заглавная буква, Россия , а в русском — нет, русский). В русском языке также обычно заглавными буквами пишется только первая буква в определенных фразах, в то время как в английском каждое слово пишется с заглавной буквы (например, названия книг). So…it это сложно. А для того, чтобы носитель языка чувствовал себя естественно, обычно требуется переводчик-человек, который знает, что они переводят.
Комментарии:
1. Аналогия с использованием «fire» для двух разных значений помогла мне более четко понять. Теперь я буду использовать элементы пользовательского интерфейса в качестве ключа. Спасибо.
2. Я бы на самом деле подумал о том, чтобы не привязывать его к элементу пользовательского интерфейса. Скорее контекст. Причина этого в том, что у вас может быть 2 разных элемента пользовательского интерфейса, которым требуется одно и то же точное слово / предложение в зависимости от контекста. Значит ли это, что вы повторно используете контекстный ключ пользовательского интерфейса? Или создать новый для другого элемента пользовательского интерфейса? Если вы выберете это, вы можете захотеть рассматривать ключи элемента пользовательского интерфейса как псевдоним фактического ключа. Черт возьми, я работал над высоколокализованными продуктами и создавал инфраструктуру для них. Итак, мой комментарий основан на жестких признаках ошибки.
Ответ №2:
Основываясь на вашем комментарии, вы хотели бы знать, будут ли целевые языки, на которые вы хотите перевести, содержать заглавные буквы.
Заглавная буква — это слово, которое меняет свое значение (и иногда произношение), когда оно пишется с заглавной буквы
Не зная много о вашей конкретной ситуации, на этот вопрос невозможно ответить.
Однако, предполагая, что вы можете выполнить проверку по целевым языкам и подтвердить, что это не повлияет на вас, я бы рекомендовал вам использовать единый стиль для ваших слов. Это приносит вам пользу несколькими способами:
- Если вы платите за свои переводы, то вы экономите $
- Устраняя дубликаты, вы снижаете риск противоречивых переводов (некоторые фирмы-переводчики могут распределять слова между отдельными лицами)
- Вы отделяете слово от того, как оно отображается в вашем приложении, что позволяет вам свободно корректировать заглавные буквы позже, если потребуется, или для других приложений в будущем