Какие части можно перевести во время локализации JSON, а какие нельзя изменять?
Кнопки на странице переведены на английский язык, но программа не может найти пункт конфигурации. Такого рода сбои часто возникают при локализации JSON: каждая строка в объекте передается переводчику, а также вместе изменяются имя ключа, маршрутизация и бизнес-кодировка. Более безопасный подход — не угадывать, какие строки звучат как человеческая речь, а явно разрешить перевод каких путей.
Основные положения этой статьи
– При переводе JSON область действия должна быть ограничена путями к полям, чтобы избежать ошибочного изменения имен ключей, маршрутизации и бизнес-кодов.
- Список путей, разрешенных для перевода, должен быть определен до начала перевода, и сторона, создающая перевод, не должна расширять объем изменений.
- Помимо проверки перевода при приемке, также необходимо убедиться, что заданное имя ключа, несанкционированные пути и типы полей не изменились.
— Индекс может стать недействительным после перестановки элементов массива. При наличии стабильного идентификатора его следует использовать в первую очередь для сопоставления. — null не следует заменять текстом, а повторяющиеся ключи необходимо отклонять на этапе парсинга, а не проверять после завершения перевода.
Распространенный сбой при локализации JSON: кнопки страницы изменены на английский, но программа не может найти соответствующие элементы конфигурации. Причина обычно в том, что каждая строка в объекте передается на обработку транслятору, а имя ключа, маршрутизация и бизнес-кодировка также изменяются соответствующим образом. Эта статья написана для разработчиков и специалистов по локализации, ответственных за международную настройку. В нем объясняется, как сначала определить пути к переводимым полям, а затем выполнить приемку.
В примерах используются синтетические образцы для демонстрации методов обработки, а код проверен в изолированной среде, но это не является гарантией работоспособности всех реальных файлов или продукта. Перед обработкой важных документов, пожалуйста, сохраните оригиналы и просмотрите их по границам и пунктам приема в тексте.
Что можно перевести при локализации JSON? Вывод в одно предложение
Переведены будут только те направления копирайтинга, которые указаны заранее. Имена ключей, значения маршрутизации и бизнес-коды останутся прежними, а контрольный список приемки будет использоваться для подтверждения того, что неизмененные части действительно не были изменены.
| твоя ситуация | Рекомендуемые практики | причина |
|---|---|---|
Копирайтинг интерфейсов, например buttons.save | Поместите его в список разрешенных путей и подтвердите перед переводом. | Путь — это ясный адрес, который более надежен, чем гадать, похожа ли строка на человеческую речь. |
| Значение маршрутизации, код услуги | Оставьте все как есть и не вводите область перевода. | Программа опирается на эти значения. После модификации возникнет проблема, что элемент конфигурации не может быть найден. |
| Заполнители, фрагменты HTML, URL-адреса в полях копирования. | Добавьте правила защиты следующего уровня | Поля в пределах разрешенного пути могут по-прежнему содержать контент, который необходимо защитить. |
| элементы массива | Используйте сопоставление идентификаторов, если есть стабильный идентификатор. | После перестановки элементов индекс может указывать на другую часть копии. |
| Путь исчезает после обновления исходного файла. | Сообщите об ошибке и обновите исходную версию без автоматического возврата старого перевода. | Похожие имена полей могут привести к тому, что перевод будет написан в неправильной позиции. |
Начните с пути к полю, а не просматривайте все строки
Рассматривать buttons.save как адрес более надежно, чем заменять строку «save», когда вы ее видите. Одно и то же предложение может одновременно появляться в копии интерфейса, образцах журналов и тестовых примерах, и перевод может не потребоваться во всех трех местах.
Пути должны быть однозначно представлены с помощью кортежей или указателей JSON. При простом сращивании точек возникает неоднозначность, если само имя ключа содержит точки.
Следующий пример ограничивает только два конкретных пути, оставляя остальное содержимое без изменений. Это стратегия локализации для данной статьи, а не требование самого формата JSON. Синтетический образец содержит как текст интерфейса, так и значение маршрутизации, которое нельзя изменять, чтобы облегчить проверку границ.
Изменяйте только явно разрешенные значения за раз
import copy
source = {"buttons": {"save": "保存", "cancel": "取消"},
"route": "/settings", "version": 1}
approved = {("buttons", "save"): "Save",
("buttons", "cancel"): "Cancel"}
def apply_texts(document, replacements):
result = copy.deepcopy(document)
for path, translated in replacements.items():
if not path or not isinstance(translated, str):
raise ValueError("invalid replacement")
parent = result
for key in path[:-1]:
parent = parent[key]
key = path[-1]
if key not in parent or not isinstance(parent[key], str):
raise ValueError("target must be an existing string")
parent[key] = translated
return result
result = apply_texts(source, approved)
assert result["buttons"]["save"] == "Save"
assert result["route"] == source["route"]
assert source["buttons"]["save"] == "保存"
try:
apply_texts(source, {("version",): "one"})
except ValueError:
pass
else:
raise AssertionError("numeric field must be rejected")
Пример демонстрирует только уровень объекта, не реализует индексацию массива и не вызывает службу перевода. При отправке в реальный конвейер список разрешенных путей должен быть определен до трансляции, и стороне, генерирующей перевод, не может быть разрешено одновременно расширять область своих собственных модификаций.
Глубокое копирование может предотвратить изменение входных объектов на месте, но это не система транзакций. Персистентность по-прежнему необходимо проектировать отдельно.
Приемка зависит от неизмененных деталей
| исследовать | нормальный результат | Действия в исключительных случаях |
|---|---|---|
| Коллекция ключевых имен | соответствует исходному файлу | Запретить перезапись исходного файла |
| Несанкционированный путь | стоимость остается неизменной | Найдите модификации, выходящие за пределы |
| Тип целевого поля | Все еще строка | Отклонить неявные преобразования типов |
| недостающий путь | Четко сообщите об ошибке | Обновить исходную версию без автоматического создания полей |
Просто проверить наличие целевого языка недостаточно. Также необходимо сохранить список хешей и путей исходных файлов. Если путь удален после обновления исходного файла, старый перевод не может быть автоматически записан обратно с аналогичными именами полей.
Массивы, нулевые значения и повторяющиеся ключи необходимо рассматривать отдельно
- Массив: после перестановки элементов индекс может не указывать на исходную копию. При наличии стабильного идентификатора он используется в первую очередь для сопоставления.
- Null:
nullне является пустой строкой и не должен заменяться буквальным значением «пусто» для удобства перевода. - Дублирующийся ключ: информация о дублирующемся ключе могла быть утеряна после завершения обычного анализа JSON. Если вы хотите отклонить повторяющиеся ключи, вам следует обрабатывать их на этапе синтаксического анализа, а не дожидаться завершения перевода. Ссылка Документация Python JSON.
Этот пример подходит для локализации хорошо структурированной конфигурации, а не для произвольного автопереводчика JSON. Принимая перевод, сначала подтвердите, что структура и защищенные поля не изменились, а затем обсудите, является ли язык естественным. Последовательность устранения неполадок будет более понятной.
📊 Сравнение ядра
| Способ | упражняться | Основные риски | Применимые сценарии |
|---|---|---|---|
| Перебрать все строки | Каждая строка передается переводчику | Названия ключей, маршрутизация и бизнес-коды могут быть изменены одновременно. | Не описано в оригинальной статье |
| Белый список по пути к полю | Переводите только заранее указанные пути | Необходимо вести список путей | Хорошо структурированная локализация конфигурации |
🎯 Какой метод подходит вам?
если ты……
- Чтобы сохранить файл конфигурации интерфейса, если вы хотите, чтобы копия кнопки была переводимой, а конфигурация программы оставалась неизменной, используйте белый список путей к полям и определите список путей перед переводом.
- Элементы массива могут быть переставлены, отдавайте приоритет использованию стабильных идентификаторов для сопоставления, а не индексам.
- Исходный файл будет постоянно обновляться. Пожалуйста, сохраните хеш исходного файла и список путей. Если путь исчезнет, произойдет ошибка и старый перевод не будет автоматически записан обратно.
- Если вам необходимо обработать доставку реальных документов, составьте список разрешенных путей, исходного текста и перевода и просмотрите их один за другим.
❓ Часто задаваемые вопросы (FAQ)
1. Почему бы не перевести все строки в формате JSON напрямую?
Потому что одна и та же строка может одновременно быть копией интерфейса, именем ключа программы или бизнес-кодом. Когда каждая строка передается переводчику, имя ключа, маршрутизация и бизнес-кодировка также могут быть изменены вместе, в результате чего программа не сможет найти элемент конфигурации.
2. В чем проблема с использованием точек для соединения путей?
Если само имя ключа содержит точку, конкатенация точек приведет к неоднозначности. В исходной статье рекомендуется использовать однозначные представления, такие как кортежи или указатели JSON.
3. Достаточно ли просто проверить, включен ли в перевод целевой язык?
недостаточно. Вам также следует проверить, соответствует ли набор имен ключей исходному файлу, остается ли значение неавторизованного пути неизменным, является ли целевое поле по-прежнему строкой и сообщаются ли об отсутствующих путях явным образом как об ошибках.
4. Можно ли заменить null на текст «пусто»?
Не мочь. null не является пустой строкой и для удобства перевода не должен заменяться текстом.
5. Что следует использовать для отображения при трансляции массивов?
При наличии стабильного идентификатора он используется в первую очередь для сопоставления. Опираясь только на индекс, после перестановки элементов может быть сопоставлена неправильная копия.
📝 Резюме
Прежде чем переводить конфигурацию JSON, сначала уточните пути, допускающие перевод, а затем используйте контрольный список приемки для проверки неизмененных частей. Это облегчает обнаружение проблемы, когда что-то идет не так.
Попробуйте сейчас: загрузите документ, чтобы начать перевод, сохранив исходный макет.


