JSON स्थानिकीकरणादरम्यान कोणते भाग भाषांतरित केले जाऊ शकतात आणि कोणते भाग बदलू नयेत?
पृष्ठावरील बटणे इंग्रजीमध्ये भाषांतरित केली आहेत, परंतु प्रोग्राम कॉन्फिगरेशन आयटम शोधू शकत नाही. JSON लोकॅलायझेशनमध्ये अशा प्रकारची अपयश अनेकदा येते: ऑब्जेक्टमधील प्रत्येक स्ट्रिंग अनुवादकाकडे सोपवली जाते आणि मुख्य नाव, राउटिंग आणि व्यवसाय एन्कोडिंग देखील एकत्र बदलले जातात. एक सुरक्षित दृष्टीकोन म्हणजे कोणत्या स्ट्रिंगचा आवाज मानवी भाषणासारखा आहे याचा अंदाज लावणे नाही, तर कोणत्या मार्गांचे भाषांतर स्पष्टपणे करण्याची परवानगी देणे आहे.
JSON लोकॅलायझेशनमध्ये एक सामान्य अपयश आहे: पृष्ठ बटणे इंग्रजीमध्ये बदलली गेली आहेत, परंतु प्रोग्रामला संबंधित कॉन्फिगरेशन आयटम सापडत नाहीत. याचे कारण सहसा असे आहे की ऑब्जेक्टमधील प्रत्येक स्ट्रिंग प्रक्रियेसाठी अनुवादकाकडे सुपूर्द केली जाते आणि मुख्य नाव, राउटिंग आणि व्यवसाय एन्कोडिंग देखील त्यानुसार बदलतात. हा लेख आंतरराष्ट्रीय कॉन्फिगरेशनसाठी जबाबदार असलेल्या विकासक आणि स्थानिकीकरण कर्मचाऱ्यांसाठी लिहिलेला आहे. हे प्रथम भाषांतर करण्यायोग्य फील्ड पथ कसे रेखाटायचे आणि नंतर स्वीकार कसे करायचे हे स्पष्ट करते.
उदाहरणे प्रक्रिया पद्धती प्रदर्शित करण्यासाठी सिंथेटिक नमुने वापरतात आणि कोड एका वेगळ्या वातावरणात तपासला गेला आहे, परंतु हे सर्व वास्तविक फाइल्स किंवा उत्पादन कार्यक्षमतेची हमी दर्शवत नाही. महत्त्वाच्या कागदपत्रांवर प्रक्रिया करण्यापूर्वी, कृपया मूळ कागदपत्रे ठेवा आणि मजकूरातील सीमा आणि स्वीकृती आयटमनुसार त्यांचे पुनरावलोकन करा.
JSON लोकॅलायझेशन दरम्यान काय भाषांतर केले जाऊ शकते? एका वाक्याचा निष्कर्ष
केवळ आगाऊ सूचीबद्ध केलेले कॉपीरायटिंग पथ भाषांतरित केले जातील, आणि मुख्य नावे, राउटिंग मूल्ये आणि व्यवसाय कोड समान राहतील, आणि न बदललेले भाग खरोखर बदललेले नाहीत याची पुष्टी करण्यासाठी स्वीकृती चेकलिस्ट वापरली जाईल.
| तुमची परिस्थिती | शिफारस केलेल्या पद्धती | कारण |
|---|---|---|
इंटरफेस कॉपीरायटिंग, जसे की buttons.save | अनुमत पथ सूचीमध्ये ठेवा आणि भाषांतर करण्यापूर्वी त्याची पुष्टी करा. | मार्ग हा एक स्पष्ट पत्ता आहे, जो स्ट्रिंग मानवी भाषणासारखा आहे की नाही याचा अंदाज लावण्यापेक्षा अधिक विश्वासार्ह आहे. |
| राउटिंग मूल्य, सेवा कोड | ते जसे आहे तसे सोडा आणि भाषांतराची व्याप्ती टाकू नका | कार्यक्रम या मूल्यांवर अवलंबून असतो. बदल केल्यानंतर, एक समस्या असेल की कॉन्फिगरेशन आयटम सापडत नाही. |
| प्लेसहोल्डर, HTML स्निपेट्स, कॉपी फील्डमधील URL | पुढील-स्तरीय संरक्षण नियम जोडा | अनुमत मार्गातील फील्डमध्ये अद्याप संरक्षित करणे आवश्यक असलेली सामग्री असू शकते |
| ॲरे घटक | स्थिर आयडी असताना आयडी मॅपिंग वापरा | घटकांची पुनर्रचना केल्यानंतर, अनुक्रमणिका कॉपीच्या दुसऱ्या भागाकडे निर्देश करू शकते |
| स्त्रोत फाइल अद्यतनित केल्यानंतर मार्ग अदृश्य होतो | त्रुटीची तक्रार करा आणि जुने भाषांतर स्वयंचलितपणे परत न लिहिता स्त्रोत आवृत्ती अद्यतनित करा. | तत्सम फील्ड नावांमुळे भाषांतर चुकीच्या स्थितीत लिहिले जाऊ शकते |
सर्व स्ट्रिंग्स ट्रॅव्हर्स करण्याऐवजी फील्ड मार्गाने प्रारंभ करा
buttons.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ही रिकामी स्ट्रिंग नाही आणि भाषांतराच्या सोयीसाठी अक्षरशः "रिक्त" ने बदलली जाऊ नये. - डुप्लिकेट की: सामान्य JSON पार्सिंग पूर्ण झाल्यानंतर डुप्लिकेट की माहिती गमावली जाऊ शकते. तुम्हाला डुप्लिकेट की नाकारायच्या असल्यास, तुम्ही भाषांतर पूर्ण होण्याची वाट पाहण्याऐवजी पार्सिंग स्टेज दरम्यान त्या हाताळल्या पाहिजेत. संदर्भ Python JSON दस्तऐवजीकरण.
हे उदाहरण सु-संरचित कॉन्फिगरेशन स्थानिकीकरणासाठी योग्य आहे, अनियंत्रित JSON स्वयं-अनुवादक नाही. भाषांतर स्वीकारताना, प्रथम रचना आणि संरक्षित फील्ड बदललेले नाहीत याची खात्री करा आणि नंतर भाषा नैसर्गिक आहे की नाही यावर चर्चा करा. समस्यानिवारण क्रम अधिक स्पष्ट होईल.
📊 मुख्य तुलना
| मार्ग | सराव | मुख्य धोके | लागू परिस्थिती |
|---|---|---|---|
| सर्व स्ट्रिंगद्वारे पुनरावृत्ती करा | प्रत्येक स्ट्रिंग अनुवादकाला दिली जाते | मुख्य नावे, राउटिंग आणि व्यवसाय कोड एकत्र बदलले जाऊ शकतात | मूळ लेखात समाविष्ट नाही |
| फील्ड मार्गानुसार श्वेतसूची | केवळ आगाऊ निर्दिष्ट केलेल्या मार्गांचे भाषांतर करा | पथ सूची राखणे आवश्यक आहे | सु-संरचित कॉन्फिगरेशन स्थानिकीकरण |
🎯 तुमच्यासाठी कोणती पद्धत योग्य आहे?
जर तुम्ही...
- इंटरफेस कॉन्फिगरेशन फाइल राखण्यासाठी, जर तुम्हाला बटणाची प्रत भाषांतर करण्यायोग्य हवी असेल आणि प्रोग्राम कॉन्फिगरेशन अपरिवर्तित ठेवायचे असेल, तर कृपया फील्ड पथ व्हाइटलिस्ट वापरा आणि भाषांतर करण्यापूर्वी पथ सूची निश्चित करा.
- ॲरे घटकांची पुनर्रचना केली जाऊ शकते, कृपया निर्देशांकांवर अवलंबून न राहता मॅपिंगसाठी स्थिर आयडी वापरण्यास प्राधान्य द्या.
- स्त्रोत फाइल सतत अद्यतनित केली जाईल. कृपया स्त्रोत फाइल हॅश आणि पथ सूची जतन करा. मार्ग अदृश्य झाल्यास, एक त्रुटी येईल आणि जुने भाषांतर स्वयंचलितपणे परत लिहिले जाणार नाही.
- जर तुम्हाला वास्तविक दस्तऐवजांच्या वितरणावर प्रक्रिया करायची असेल, तर कृपया परवानगी असलेल्या मार्गांची, मूळ मजकूराची आणि भाषांतराची पुनरावलोकन सूची तयार करा आणि त्यांचे एक-एक करून पुनरावलोकन करा.
❓ वारंवार विचारले जाणारे प्रश्न (FAQ)
१. JSON मधील सर्व स्ट्रिंग्सचे थेट भाषांतर का करत नाही?
कारण तीच स्ट्रिंग एकाच वेळी इंटरफेस कॉपी, प्रोग्राम की नाव किंवा व्यवसाय कोड असू शकते. जेव्हा प्रत्येक स्ट्रिंग अनुवादकाला सुपूर्द केली जाते, तेव्हा मुख्य नाव, राउटिंग आणि व्यवसाय एन्कोडिंग देखील एकत्र बदलले जाऊ शकते, ज्यामुळे प्रोग्रामला कॉन्फिगरेशन आयटम सापडत नाही.
२. पाथ विभाजित करण्यासाठी ठिपके वापरण्यात काय अडचण आहे?
की नावातच पीरियड असल्यास, डॉट कॉन्कॅटनेशनमुळे अस्पष्टता निर्माण होईल. मूळ लेख ट्यूपल्स किंवा जेएसओएन पॉइंटर्स सारख्या अस्पष्ट प्रतिनिधित्व वापरण्याची शिफारस करतो.
३. भाषांतरामध्ये लक्ष्यित भाषा समाविष्ट आहे की नाही हे तपासणे पुरेसे आहे का?
पुरेसे नाही की नावांचा संच स्त्रोत फाइलशी सुसंगत आहे की नाही, अनधिकृत पथाचे मूल्य अपरिवर्तित आहे की नाही, लक्ष्य फील्ड अद्याप एक स्ट्रिंग आहे की नाही आणि गहाळ पथ स्पष्टपणे त्रुटी म्हणून नोंदवले आहेत की नाही हे देखील तपासले पाहिजे.
४. null ला "रिक्त" मजकूराने बदलता येईल का?
करू शकत नाही. null ही रिकामी स्ट्रिंग नाही आणि भाषांतराच्या सोयीसाठी मजकुराने बदलली जाऊ नये.
5. ॲरेचे भाषांतर करताना मॅपिंगसाठी काय वापरावे?
जेव्हा एक स्थिर आयडी असतो, तेव्हा आयडी मॅपिंगसाठी प्रथम वापरला जातो. केवळ निर्देशांकावर अवलंबून राहून, घटकांची पुनर्रचना केल्यानंतर चुकीची प्रत संबंधित असू शकते.
📝 सारांश
JSON कॉन्फिगरेशनचे भाषांतर करण्यापूर्वी, प्रथम भाषांतरास अनुमती देणारे मार्ग स्पष्ट करा आणि नंतर न बदललेले भाग तपासण्यासाठी स्वीकृती चेकलिस्ट वापरा. जेव्हा काहीतरी चूक होते तेव्हा समस्या शोधणे हे सोपे करते.
हे आता वापरून पहा: मूळ लेआउट कायम ठेवून भाषांतर सुरू करण्यासाठी दस्तऐवज अपलोड करा


