Quelles parties peuvent être traduites lors de la localisation JSON et lesquelles ne doivent pas être modifiées ?
Les boutons de la page sont traduits en anglais, mais le programme ne trouve pas l'élément de configuration. Ce type d'échec se produit souvent dans la localisation JSON : chaque chaîne de l'objet est transmise au traducteur, et le nom de la clé, le routage et l'encodage métier sont également modifiés ensemble. Une approche plus sûre ne consiste pas à deviner quelles chaînes ressemblent à de la parole humaine, mais à autoriser explicitement la traduction de quels chemins.
Un échec courant dans la localisation JSON est le suivant : les boutons de page ont été modifiés en anglais, mais le programme ne trouve pas les éléments de configuration correspondants. La raison en est généralement que chaque chaîne de l'objet est transmise au traducteur pour traitement, et que le nom de la clé, le routage et le codage métier changent également en conséquence. Cet article est destiné aux développeurs et au personnel de localisation responsable de la configuration internationale. Il explique comment délimiter d'abord les chemins de champ traduisibles, puis procéder à l'acceptation.
Les exemples utilisent des échantillons synthétiques pour démontrer les méthodes de traitement, et le code a été vérifié dans un environnement isolé, mais cela ne représente pas une garantie de tous les fichiers réels ou des performances du produit. Avant de traiter des documents importants, veuillez conserver les originaux et les examiner en fonction des limites et des éléments d'acceptation du texte.
Que peut-on traduire lors de la localisation JSON ? Conclusion en une phrase
Seuls les chemins de rédaction répertoriés à l'avance seront traduits. Les noms de clé, les valeurs de routage et les codes commerciaux resteront les mêmes, et une liste de contrôle d'acceptation sera utilisée pour confirmer que les pièces inchangées n'ont effectivement pas été modifiées.
| votre situation | Pratiques recommandées | raison |
|---|---|---|
Rédaction d'interfaces, telles que buttons.save | Mettez-le dans la liste des chemins autorisés et confirmez-le avant la traduction. | Le chemin est une adresse claire, ce qui est plus fiable que de deviner si la chaîne ressemble à une parole humaine. |
| Valeur de routage, code de service | Laissez-le tel quel et n'entrez pas dans le champ de traduction | Le programme s'appuie sur ces valeurs. Après modification, il y aura un problème selon lequel l'élément de configuration est introuvable. |
| Espaces réservés, extraits HTML, URL dans les champs de copie | Ajouter des règles de protection de niveau supérieur | Les champs situés dans le chemin autorisé peuvent toujours contenir du contenu qui doit être protégé |
| éléments du tableau | Utiliser le mappage d'ID lorsqu'il existe un ID stable | Une fois les éléments réorganisés, l'index peut pointer vers un autre morceau de copie |
| Le chemin disparaît après la mise à jour du fichier source | Signalez une erreur et mettez à jour la version source sans réécrire automatiquement l'ancienne traduction. | Des noms de champs similaires peuvent entraîner une mauvaise position de la traduction. |
Commencez par le chemin du champ au lieu de parcourir toutes les chaînes
Traiter buttons.save comme une adresse est plus fiable que de remplacer la chaîne « save » lorsque vous la voyez. La même phrase peut apparaître simultanément dans la copie d'interface, les exemples de journaux et les cas de test, et la traduction peut ne pas être requise aux trois endroits.
Les chemins doivent être représentés sans ambiguïté à l'aide de tuples ou de pointeurs JSON. Lors d'un simple épissage avec des points, une ambiguïté se produira si le nom de la clé lui-même contient des points.
L'exemple suivant limite uniquement deux chemins spécifiques, laissant les autres contenus tels quels. Il s'agit d'une stratégie de localisation pour cet article, et non d'une exigence du format JSON lui-même. L'exemple synthétique contient à la fois un texte d'interface et une valeur de routage qui ne doit pas être modifiée pour faciliter la vérification des limites.
Ne modifiez que les valeurs explicitement autorisées à la fois
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")
L'exemple démontre uniquement le niveau objet, n'implémente pas l'indexation de tableau et n'appelle pas le service de traduction. Lors de la soumission au pipeline réel, la liste des chemins autorisés doit être déterminée avant la traduction, et la partie générant la traduction ne peut pas être autorisée à étendre la portée de ses propres modifications en même temps.
La copie profonde peut empêcher la modification des objets d'entrée sur place, mais il ne s'agit pas d'un système de transaction. La persistance doit encore être conçue séparément.
L'acceptation dépend des pièces inchangées
| examiner | résultat normal | Actions en cas d'exception |
|---|---|---|
| Collection de noms de clés | conforme au fichier source | Empêcher l'écrasement du fichier d'origine |
| Chemin non autorisé | la valeur reste inchangée | Trouver des modifications hors limites |
| Type de champ cible | Encore une chaîne | Rejeter les conversions de type implicites |
| chemin manquant | Signaler clairement une erreur | Mettre à jour la version source sans créer automatiquement de champs |
Il ne suffit pas de vérifier que « la langue cible est présente ». Une liste des hachages et des chemins des fichiers sources doit également être enregistrée. Si le chemin est supprimé après la mise à jour du fichier source, l'ancienne traduction ne peut pas être automatiquement réécrite avec des noms de champs similaires.
Les tableaux, les valeurs nulles et les clés en double doivent être considérés séparément
- Array : Une fois les éléments réorganisés, l'index peut ne plus pointer vers la copie originale. Lorsqu'il existe un ID stable, l'ID est utilisé en premier pour le mappage.
- Null :
nulln'est pas une chaîne vide et ne doit pas être remplacée par le littéral « vide » pour faciliter la traduction. - Clé en double : les informations de clé en double peuvent avoir été perdues une fois l'analyse JSON normale terminée. Si vous souhaitez rejeter les clés en double, vous devez les gérer pendant la phase d'analyse au lieu d'attendre la fin de la traduction. Référence Documentation PythonJSON.
Cet exemple convient à une localisation de configuration bien structurée, et non à un traducteur automatique JSON arbitraire. Lorsque vous acceptez la traduction, vérifiez d'abord que la structure et les champs protégés n'ont pas changé, puis discutez si la langue est naturelle. La séquence de dépannage sera plus claire.
📊 Comparaison de base
| Chemin | pratique | Principaux risques | Scénarios applicables |
|---|---|---|---|
| Parcourir toutes les chaînes | Chaque chaîne est donnée au traducteur | Les noms de clés, les routages et les codes commerciaux peuvent être modifiés ensemble | Non couvert dans l'article d'origine |
| Liste blanche par chemin de champ | Traduisez uniquement les chemins spécifiés à l’avance | Besoin de maintenir la liste des chemins | Localisation de configuration bien structurée |
🎯 Quelle méthode vous convient ?
si tu……
- Pour conserver le fichier de configuration de l'interface, si vous souhaitez que la copie du bouton soit traduisible et que la configuration du programme reste inchangée, veuillez utiliser la liste blanche des chemins de champ et déterminer la liste des chemins avant la traduction.
- Les éléments du tableau peuvent être réorganisés, veuillez donner la priorité à l'utilisation d'ID stables pour le mappage au lieu de vous fier aux index.
- Le fichier source sera continuellement mis à jour. Veuillez enregistrer le hachage du fichier source et la liste des chemins. Si le chemin disparaît, une erreur se produira et l'ancienne traduction ne sera pas automatiquement réécrite.
- Si vous devez traiter la livraison de documents réels, veuillez dresser une liste de révision des chemins autorisés, du texte original et de la traduction, et les réviser un par un.
❓ Questions fréquemment posées (FAQ)
1. Pourquoi ne pas traduire directement toutes les chaînes en JSON ?
Parce que la même chaîne peut être à la fois une copie d’interface, un nom de clé de programme ou un code commercial. Lorsque chaque chaîne est transmise au traducteur, le nom de la clé, le routage et le codage métier peuvent également être modifiés ensemble, empêchant le programme de trouver l'élément de configuration.
2. Quel est le problème avec l'utilisation de points pour relier les chemins ?
Si le nom de la clé lui-même contient un point, la concaténation de points entraînera une ambiguïté. L'article original recommande d'utiliser des représentations sans ambiguïté telles que des tuples ou des pointeurs JSON.
3. Suffit-il simplement de vérifier si la langue cible est incluse dans la traduction ?
pas assez. Vous devez également vérifier si l'ensemble des noms de clé est cohérent avec le fichier source, si la valeur du chemin non autorisé reste inchangée, si le champ cible est toujours une chaîne et si les chemins manquants sont explicitement signalés comme erreurs.
4. null peut-il être remplacé par le texte « vide » ?
Ne peut pas. null n'est pas une chaîne vide et ne doit pas être remplacé par du texte pour faciliter la traduction.
5. Que faut-il utiliser pour le mappage lors de la traduction de tableaux ?
Lorsqu'il existe un ID stable, l'ID est utilisé en premier pour le mappage. En s'appuyant uniquement sur l'index, une mauvaise copie peut correspondre une fois les éléments réorganisés.
📝Résumé
Avant de traduire la configuration JSON, clarifiez d'abord les chemins qui permettent la traduction, puis utilisez la liste de contrôle d'acceptation pour vérifier les parties inchangées. Cela facilite la localisation du problème en cas de problème.


