သော့များ သို့မဟုတ် နေရာကိုင်များ မပျက်စီးစေဘဲ JSON ဘာသာစကားဖိုင်ကို ဘာသာပြန်နည်း
en.json ဖိုင်တွင် မည်သည့်တန်ဖိုးများ ဘာသာပြန်ခံရသည်၊ ဖိုင်ဘာသာပြန်က မည်သည့်အရာများကို ပြန်လည်ရေးသားသည် (မှတ်ချက်များ၊ သော့အစီအစဉ်၊ ကြီးမားသော ID များ) နှင့် နေရာကိုင်များ၊ ICU အများကိန်းများနှင့် သော့များကို အခမဲ့စကရစ်ပ်၊ စမ်းသပ်ဖိုင်ဖြင့် စစ်ဆေးနည်းကို ကြည့်ပါ။

en.json ကဲ့သို့သော JSON ဘာသာစကားဖိုင်ကို ဘာသာပြန်ရန် ဖိုင်တစ်ခုလုံးကို JSON နားလည်သော ဘာသာပြန်တစ်ခုထံ ပေးပါ။ ကုန်ကြမ်းစာသားကို ချတ်ဝင်းဒိုး သို့မဟုတ် ဝဘ်ဘာသာပြန်တစ်ခုထဲသို့ ကူးထည့်ခြင်းသည် အန္တရာယ်ရှိသော နည်းလမ်းဖြစ်သည်။ JSON ကို နားလည်သော ဘာသာပြန်သည် ဖိုင်ကို ဖတ်ပြီး စာသားတန်ဖိုးများကိုသာ ဘာသာပြန်ကာ သော့များကို အတိအကျ ပြန်ရေးသားပေးသောကြောင့် သင့်အက်ပ်က ဖိုင်ကို ဆက်လက် ဖွင့်နိုင်ဆဲဖြစ်သည်။ ကူးယူပြီး ကူးထည့်ခြင်းက သော့တစ်ခုကို ဘာသာပြန်နိုင်သည်၊ ကိုးကားအမှတ်အသားကို ပြောင်းနိုင်သည် သို့မဟုတ် ကွင်းစကွင်းပိတ်တစ်ခုကို ချန်လှပ်နိုင်သည်။ ယင်းတို့ထဲမှ တစ်ခုခုက ဖိုင်ကို ပျက်စီးစေသည်။
သော့များကို ထိန်းသိမ်းထားခြင်းသည် လွယ်ကူသော အပိုင်းဖြစ်သည်။ ပြဿနာအများစုက နောက်ပိုင်းတွင် ဖြစ်ပေါ်သည်- {name} နေရာကိုင်တစ်ခု {nom} အဖြစ် ပြန်လာခြင်း၊ ICU အများကိန်းတစ်ခုက ၎င်း၏ other အခြေအနေကို ဆုံးရှုံးခြင်း၊ URL တစ်ခုကို အခြားစာသားများကဲ့သို့ ဘာသာပြန်ရန် ပို့ခြင်း၊ နှင့် ဘာသာပြန်က ဖိုင်ကိုယ်တိုင်တွင် ပြုလုပ်သော ပြောင်းလဲမှု အနည်းငယ်။ ဤလမ်းညွှန်တွင် ယင်းတို့ကို ဖော်ပြထားသည်။
ထိုအခြေအနေအားလုံးပါဝင်သော စမ်းသပ်ဖိုင် တစ်ခုကို ကျွန်ုပ်တို့ တည်ဆောက်ပြီး မူရင်းဖိုင်နှင့် ၎င်း၏ဘာသာပြန်ကို နှိုင်းယှဉ်ပေးသော အခမဲ့စစ်ဆေးစနစ် ကို ရေးသားခဲ့သည်။ ထို့အပြင် စမ်းသပ်ဖိုင်ကို BookTranslator အသုံးပြုသော JSON ခွဲခြမ်းစိတ်ဖြာခြင်းနှင့် ရေးသားခြင်းကုဒ်၏ ဒေသတွင်းမိတ္တူတစ်ခုမှတစ်ဆင့် မော်ဒယ်နေရာတွင် အမှတ်အသားတစ်ခု ထည့်သွင်း၍ လုပ်ဆောင်ခဲ့သည်၊ သို့မှသာ မည်သည့်တန်ဖိုးများ ပို့သည်နှင့် ဖိုင်မည်သို့ ပြန်လာသည်ကို အတိအကျ မြင်နိုင်မည်ဖြစ်သည်။
အမြန်အဖြေ- ဖိုင်၏ အစိတ်အပိုင်းတစ်ခုစီသည် မည်သို့ဖြစ်သွားသနည်း
| ဖိုင်၏ အစိတ်အပိုင်း | ကျွန်ုပ်တို့၏ စမ်းသပ်မှုမှ ဥပမာ | BookTranslator က ဘာလုပ်သလဲ | ဘာကို စစ်ဆေးရမလဲ |
|---|---|---|---|
| သော့များ | "greeting", "error" | အတိုင်းထားရှိသည် | ဘာမှမရှိ |
| ရိုးရိုးစာသားတန်ဖိုးများ | "Reading list" | ဘာသာပြန်ထားသည် | အဓိပ္ပာယ်၊ မျက်နှာပြင်ပေါ်ရှိ အရှည် |
| နေရာကိုင်များပါသော တန်ဖိုးများ | "Welcome back, {name}!", "Saved %s of %d chapters" | ဘာသာပြန်ထားပြီး နေရာကိုင်များကို ပို့သော စာသားထဲတွင် ထည့်သွင်းထားသည် | နေရာကိုင်အမည်များနှင့် အရေအတွက်များ (စစ်ဆေးစနစ်က လုပ်ဆောင်သည်) |
| ICU အများကိန်း မက်ဆေ့ချ်များ | "{count, plural, one {# book} other {# books}}" | စာသားတစ်ခုတည်းအဖြစ် ပို့သည် | other အခြေအနေနှင့် ပစ်မှတ်ဘာသာစကားအတွက် အများကိန်း အမျိုးအစားများ |
| အတွင်းပိုင်း HTML | "accept the <b>Terms</b>." | ဘာသာပြန်ထားသည်၊ ဘာသာပြန်ပြီးနောက် တဂ်အရေအတွက်ကို စစ်ဆေးသည် | တဂ်အမည်များနှင့် အရေအတွက်များ (စစ်ဆေးသူက ဤအရာကို လုပ်ဆောင်သည်) |
| စာသားအဖြစ် သိမ်းဆည်းထားသော URL များ | "https://example.com/help" | ဘာသာပြန်ရန် ပေးပို့ခဲ့သည် | မပြောင်းလဲဘဲ ပြန်လာခဲ့သည် |
| အက္ခရာမပါသော တန်ဖိုးများ | "2.4.1", "—", "" | ရှိသလို ထားခဲ့သည် | ဘာမှမရှိ |
နံပါတ်များ၊ true/false၊ null | 20, true | ရှိသလို ထားခဲ့သည် | အလွန်ကြီးမားသော ID များ (အောက်တွင် ကြည့်ပါ) |
| စာသားတန်းများ၏ အခင်းအကျင်းများ | ["Open", "Save", "Export as EPUB"] | ဘာသာပြန်ထားသော ဖိုင်တွင် ဘာသာပြန်ထားသည်။ ဘာသာနှစ်မျိုးဖိုင်တွင် ဘာသာမပြန်ဘဲ ထားခဲ့သည် | သင်အသုံးပြုပါက ဘာသာနှစ်မျိုးဖိုင် |
| မှတ်ချက်များ (JSONC) | // Shown on the home screen | ဖယ်ရှားခဲ့သည်။ တန်ဖိုးတစ်ခုတွင် // လည်း ပါဝင်ပါက ဖိုင်သည် ဖွင့်၍မရဖြစ်နိုင်သည် | မတင်မီ မှတ်ချက်များကို ဖယ်ရှားပါ |
ဤလမ်းညွှန်၏ ကျန်အပိုင်းတွင် အတန်းတစ်ခုစီသည် မည်သည့်နေရာမှ လာသည်နှင့် ၎င်းအတွက် မည်သို့လုပ်ဆောင်ရမည်ကို ပြသထားသည်။
အဆင့် ၁ − မတင်မီ ရင်းမြစ်ဖိုင်ကို စစ်ဆေးပါ
သင်ဘာသာပြန်ရန် စီစဉ်ထားသော ဖိုင်ပေါ်တွင် စစ်ဆေးသူကို လုပ်ဆောင်ပါ။ ၎င်းသည် Python 3 လိုအပ်ပြီး အခြားမည်သည့်အရာမျှ မလိုအပ်ပါ −
python3 check_i18n_json.py en.json
ကျွန်ုပ်တို့၏ စမ်းသပ်ဖိုင်တွင် ၎င်းက ဤသို့ထုတ်ပြခဲ့သည် −
WARN limits.projectId: 9007199254740993 is above 2^53 and can change in a JavaScript round trip; store IDs as strings
WARN error.network: a flat key with dots and a nested key resolve to the same dot path; tools that address strings by dot path can mix them up
INFO (root): 3 keys look like integers; JavaScript sorts those first and in numeric order when it rewrites the object
INFO source: 17 strings, 2 numbers
သတိပေးချက်နှစ်ခုနှင့် ကိန်းပြည့်နှင့်တူသော သော့များအကြောင်း မှတ်စုတစ်ခုစီသည် ကျွန်ုပ်တို့၏ စမ်းသပ်ဖိုင်ကို ဘာသာပြန်သူမှတစ်ဆင့် ဖြတ်သန်းစဉ် တွေ့ခဲ့ရသော ပြောင်းလဲမှုတစ်ခုစီနှင့် ကိုက်ညီပါသည်။ သင့်ဖိုင်တွင် ၎င်းတို့တစ်ခုမျှ မပါပါက အဆင့် ၃ သို့ ကျော်သွားနိုင်ပါသည်။
စစ်ဆေးသူသည် တင်းကျပ်သော JSON မဟုတ်သော ဖိုင်၊ ဥပမာ မှတ်ချက်များ သို့မဟုတ် အဆုံးတွင် ကော်မာများ ပါသောဖိုင်ကိုလည်း ငြင်းပယ်သည်၊ အကြောင်းမှာ ၎င်းသည် နောက်ပြဿနာဖြစ်သည်။
ကျွန်ုပ်တို့၏ စမ်းသပ်ဖိုင်မှ ပြန်လာခဲ့သည့်အရာ
စမ်းသပ်မှုကို ၂၀၂၆ ခုနှစ် နိုဝင်ဘာလ ၂ ရက်နေ့တွင် BookTranslator ၏ backend ရှိ လက်ရှိ JSON ကိုင်တွယ်မှုနှင့် ဆန့်ကျင်ပြီး လုပ်ဆောင်ခဲ့သည်။ မော်ဒယ်တစ်ခုကို ခေါ်ဆိုမည့်အစား စမ်းသပ်မှုက ဘာသာပြန်ရန် ပေးပို့မည့် တန်ဖိုးတိုင်းကို [ZH] နှင့် မူရင်းစာသားဖြင့် အစားထိုးခဲ့သည်။ ၎င်းက ရလဒ်ကို ခန့်မှန်းနိုင်စေသည် − ရှေ့တွင် [ZH] ပါသော မည်သည့်အရာမဆို ပေးပို့ခံခဲ့ရပြီး မပါသော မည်သည့်အရာမဆို မပေးပို့ခဲ့ပါ။ ထွက်ရှိမှုနှစ်ခုစလုံးကို ထုတ်ဝေထားသည် − ဘာသာပြန်ထားသောဖိုင် နှင့် ဘာသာနှစ်မျိုးဖိုင်။
ဘာသာပြန်ထားသော ဖိုင်
ကီးတိုင်းသည် မပြောင်းလဲဘဲ ပြန်လာခဲ့ပြီး ဖိုင်ကို ဆက်လက်ခွဲခြမ်းစိတ်ဖြာနိုင်ဆဲဖြစ်သည်။ စာလုံးများပါဝင်သော တန်ဖိုးများကို ပို့ခဲ့ပြီး ၎င်းတို့တွင် {name}, %s, ICU မက်ဆေ့ချ်, <b> တဂ်နှင့် အကူအညီ URL တို့ ပါဝင်သည်။ ဗားရှင်းစာကြောင်း "2.4.1", ဒက်ရှ်နှင့် ဗလာစာကြောင်းတို့သည် စာလုံးများ မပါဝင်သောကြောင့် မပို့ခဲ့ပါ။ နံပါတ်များနှင့် ဘူလီယန်များကို မထိခိုက်စေဘဲ ထားခဲ့သည်။
အခြားအရာလေးခု ပြောင်းလဲသွားသည်။
- စာကြောင်းတစ်ခုသည် မှားယွင်းသောကီးသို့ ရောက်သွားသည်။ ကျွန်ုပ်တို့၏ စမ်းသပ်မှုတွင် ကျွန်ုပ်တို့၏ဖိုင်တွင်
"error.network"ဟူသော ပြန့်ပြူးသောကီးတစ်ခုနှင့် "Check your connection." ဟူသော စာသားရှိပြီး ထို့အပြင်"error": { "network": "Network error" }ဟူသော ထပ်ဆင့်ကီးတစ်ခုလည်း ရှိသည်။ ဘာသာပြန်သူသည် စာကြောင်းတစ်ခုစီကို အစိတ်အပိုင်းများကြားတွင် အစက်များထားသော ၎င်း၏လမ်းကြောင်းဖြင့် ခွဲခြားသတ်မှတ်သည်၊ ထို့ကြောင့် စာကြောင်းနှစ်ခုစလုံးတွင် တူညီသောလိပ်စာerror.networkရှိသည်။ ထွက်ရှိလာသောရလဒ်တွင် ကီးနှစ်ခုစလုံးတွင် "Network error" ၏ ဘာသာပြန်ချက် ပါဝင်သည်။ "Check your connection." ပျောက်ကွယ်သွားသည်။ ဤအခြေအနေသည် တူညီသောဖိုင်တွင် ပုံစံနှစ်မျိုးလုံး လိုအပ်ပြီး ရှားပါးသော်လည်း တိတ်ဆိတ်စွာ မအောင်မြင်ပါ။ စစ်ဆေးသူက သင်မတင်မီ သတိပေးသည်။ - ကိန်းပြည့်နှင့်တူသောကီးများကို ပြန်စီခဲ့သည်။
"steps": { "10": ..., "2": ..., "1": ... }သည်"1","2","10"အဖြစ် ပြန်လာခဲ့သည်။ JavaScript သည် အရာဝတ္ထုတစ်ခုကို ပြန်လည်တည်ဆောက်သောအခါ ကိန်းပြည့်နှင့်တူသောကီးများကို ဂဏန်းအစီအစဉ်အတိုင်း အမြဲဦးစွာစာရင်းပြုစုသည်။ ကီးများနှင့် တန်ဖိုးများ ကိုက်ညီနေဆဲဖြစ်သောကြောင့် သင့်အက်ပ် ကောင်းမွန်နေသော်လည်း မူရင်းဖိုင်နှင့် နှိုင်းယှဉ်ကြည့်လျှင် ကွဲပြားမှုများ များပြားနေမည်။ - ကြီးမားသော ID တစ်ခု တိကျမှု ဆုံးရှုံးသွားသည်။
9007199254740993သည်9007199254740992အဖြစ် ပြန်လာခဲ့သည်။ JavaScript သည် နံပါတ်များကို 64-bit floating point အဖြစ် သိမ်းဆည်းပြီး 2^53 အထက်ရှိ ကိန်းပြည့်များကို အားလုံး တိကျစွာ ကိုယ်စားပြုနိုင်မည် မဟုတ်ပါ (MDN တွင်Number.MAX_SAFE_INTEGERအကြောင်း)။ ရှည်လျားသော ID များကို စာကြောင်းများအဖြစ် သိမ်းဆည်းပါ သို့မဟုတ် ၎င်းတို့ကို ဘာသာစကားဖိုင်မှ ဖယ်ထားပါ။ - ဖော်မတ်ကို ပြန်လည်ရေးသားခဲ့သည်။ ထွက်ရှိလာသောရလဒ်သည် နေရာလွတ်နှစ်ခုဖြင့် အင်ဒင်း ပြုလုပ်ထားပြီး စာကြောင်းအသစ်ဖြင့် အဆုံးသတ်သည်။ သင့်မူရင်းဖိုင်တွင် တဘ်များ သို့မဟုတ် နေရာလွတ်လေးခုကို အသုံးပြုခဲ့လျှင် ကွဲပြားမှုတွင် နေရာလွတ်ပြောင်းလဲမှုများကို မျှော်လင့်ပါ။
ကျွန်ုပ်တို့၏ စမ်းသပ်ဖိုင်တွင် ထပ်နေသောကီးများ မရှိခဲ့သော်လည်း ၎င်းတို့အကြောင်း သိထားသင့်သည်။ JavaScript ၏ JSON ခွဲခြမ်းစိတ်ဖြာသူသည် ထပ်နေသောကီးအတွက် နောက်ဆုံးတန်ဖိုးကိုသာ သိမ်းဆည်းထားသောကြောင့် အစောပိုင်းစာသားကို ဘာသာပြန်မည် မဟုတ်ပါ။ သင့်အက်ပ်သည် တူညီသော နောက်ဆုံးတန်ဖိုးကို ဖွင့်မည်ဖြစ်သောကြောင့် မြင်သာသောအရာ ပျက်စီးမည်မဟုတ်သော်လည်း စစ်ဆေးသူက ထပ်နေသောကီးများကို စာရင်းပြုစုပေးသောကြောင့် သင်က ၎င်းတို့ကို ရှင်းလင်းနိုင်သည်။
ဘာသာစကားနှစ်မျိုးဖိုင်
ဘာသာစကားနှစ်မျိုးဖိုင်သည် မူရင်းတန်ဖိုးတစ်ခုစီကို ထိန်းသိမ်းထားပြီး အဆုံးတွင် _translated ပါသော ညီအစ်ကိုကီးတစ်ခုကို ထည့်သွင်းသည်။
"greeting": "Welcome back, {name}!",
"greeting_translated": "[ZH] Welcome back, {name}!",
၎င်းသည် ပြန်လည်သုံးသပ်ရန် ကောင်းမွန်သည်၊ အကြောင်းမှာ မူရင်းနှင့် ဘာသာပြန်ချက်တို့သည် ဘေးချင်းကပ်လျက် ရှိနေသောကြောင့်ဖြစ်သည်။ ယခု ကီးတိုင်းတွင် အမွှာတစ်ခု ရှိနေသောကြောင့် ၎င်းသည် သင့်အက်ပ် ဖွင့်နိုင်သောဖိုင် မဟုတ်ပါ။ သင့်အက်ပ်တွင် ဘာသာပြန်ထားသောဖိုင်ကို အသုံးပြုပါ။
ကွက်လပ်တစ်ခု- အခင်းများအတွင်းရှိ စာကြောင်းများသည် _translated ညီအစ်ကို မရရှိပါ၊ အကြောင်းမှာ အခင်းအရာများတွင် ထည့်ရန် ကီး မရှိသောကြောင့်ဖြစ်သည်။ ကျွန်ုပ်တို့၏ စမ်းသပ်မှုတွင် "menu": ["Open", "Save", "Export as EPUB"] သည် ဘာသာစကားနှစ်မျိုးဖိုင်တွင် အင်္ဂလိပ်လို ပြန်လာခဲ့သော်လည်း ဘာသာပြန်ထားသောဖိုင်တွင် ဘာသာပြန်ထားသည်။ သင်သည် ဘာသာစကားနှစ်မျိုးဖိုင်မှ ပြန်လည်သုံးသပ်ပါက ဘာသာပြန်ထားသောဖိုင်ရှိ အခင်းများကို စစ်ဆေးပါ။
မှတ်ချက်များပါသောဖိုင်များ
ပရောဂျက်များစွာသည် ၎င်းတို့၏ ဘာသာစကားဖိုင်များ (JSONC) တွင် မှတ်ချက်များကို ထားရှိကြပြီး တင်းကျပ်သော JSON က ခွင့်မပြုပါ။ ဘာသာပြန်သူသည် ဦးစွာ တင်းကျပ်သော JSON ကို ကြိုးစားသည်။ မအောင်မြင်ပါက မှတ်ချက်များနှင့် အဆုံးတွင် ကော်မာများကို ဖယ်ရှားပြီး ထပ်မံကြိုးစားသည်။ မှတ်ချက်များကို ဖယ်ရှားခြင်းဆိုသည်မှာ စာကြောင်းတစ်ခုပေါ်ရှိ // နောက်ရှိ အရာအားလုံးကို ဖျက်ခြင်းဖြစ်ပြီး ၎င်းတွင် https:// ရှိ // လည်း ပါဝင်သည်။
ကျွန်ုပ်တို့၏ မှတ်ချက်တစ်ခုနှင့် URL တစ်ခုပါသောဖိုင် သည် လုံးဝ မဖွင့်နိုင်ခဲ့ပါ။ ပထမမှတ်ချက်တွင် ခွဲခြမ်းစိတ်ဖြာမှု မအောင်မြင်ခဲ့ပါ။ မှတ်ချက်များပါသော်လည်း မည်သည့်တန်ဖိုးတွင်မျှ // မပါသောဖိုင်သည် ကောင်းမွန်စွာ ဖွင့်နိုင်ခဲ့ပြီး မှတ်ချက်များကို ထွက်ရှိလာသောရလဒ်မှ ဖယ်ရှားခဲ့သည်။
ထို့ကြောင့်- သင့်ဖိုင်တွင် မှတ်ချက်များ ပါဝင်ပါက မတင်မီ ၎င်းတို့ကို ဖယ်ရှားပါ သို့မဟုတ် မှတ်ချက်များပါသော မိတ္တူတစ်ခုကို သိမ်းထားပြီး ဘာသာပြန်ချက်တွင် ၎င်းတို့ မပါဝင်တော့ကြောင်း လက်ခံပါ။
အဆင့် 2- ဖိုင်ကို ပြင်ဆင်ပါ
သင်သည် ဘာသာမပြန်မီ ဤပြဿနာအများစုကို ဖြေရှင်းနိုင်သည်-
- တင်းကျပ်သော JSON ဖြစ်စေပါ။ မှတ်ချက်များနှင့် အဆုံးတွင် ကော်မာများကို ဖယ်ရှားပါ။ သင့်တည်ဆောက်မှုကိရိယာက JSONC ကို ဖတ်ပါက မှတ်ချက်ထည့်ထားသောဖိုင်ကို သင့်မူရင်းအဖြစ် ထားရှိပြီး ဘာသာပြန်ရန် သန့်ရှင်းသောမိတ္တူတစ်ခုကို ထုတ်ယူပါ။
- ကီးပုံစံတစ်မျိုးတည်း အသုံးပြုပါ။ ကီးများကို ထပ်ဆင့်ထားပါ သို့မဟုတ် အစက်များဖြင့် ပြန့်ပြူးအောင် ပြုလုပ်ပါ၊ ဖိုင်တစ်ခုတည်းတွင် နှစ်မျိုးလုံး မလုပ်ပါနှင့်။ သင်သည် i18next ကို အသုံးပြုပါက ၎င်း၏
keySeparatorရွေးချယ်မှု က ကီးများရှိ အစက်များကို မည်သို့ဖတ်မည်ကို ထိန်းချုပ်သည်၊ ထို့ကြောင့် မည်သည့်အရာကိုမျှ မပြန့်ပြူးမီ ထိုဆက်တင်ကို စစ်ဆေးပါ။ - စာသားမဟုတ်သောဒေတာကို ရွှေ့ပါ။ ID များ၊ URL များ၊ အင်္ဂါရပ်အလံများနှင့် ကန့်သတ်ချက်များသည် ဘာသာစကားဖိုင်တွင် မဟုတ်ဘဲ config တွင် ရှိသင့်သည်။ URL တစ်ခု ရှိနေရမည်ဆိုပါက ၎င်းကို ထားရှိပါ၊ သို့သော် ဘာသာပြန်ပြီးနောက် ၎င်းကို စစ်ဆေးရန် မျှော်လင့်ပါ။ ကျွန်ုပ်တို့၏ ဘာသာမပြန်သင့်သောလမ်းညွှန် တွင် မည်သည့်အရာများ မူရင်းဘာသာစကားဖြင့် ဆက်လက်ရှိနေသင့်သည်ကို ဆုံးဖြတ်ပုံကို ဖော်ပြထားသည်။
- နေရာကိုင်များကို နေရာတိုင်းတွင် တူညီစွာ ရေးပါ။
{name}ကဲ့သို့သော ပုံစံတစ်မျိုးတည်းသည်{name},{{name}}နှင့်%sရောနှောထားခြင်းထက် စစ်ဆေးရန် ပိုလွယ်သည်။
အဆင့် 3- ဖိုင်တစ်ခုလုံးကို ဘာသာပြန်ပါ
သန့်ရှင်းသောဖိုင်ကို BookTranslator ၏ စာရွက်စာတမ်းဘာသာပြန်သူ သို့ တင်ပါ၊ ၎င်းသည် .json ကို ၎င်းလက်ခံသော အခြားဒေသခံပြုပြင်ခြင်းနှင့် ဖွဲ့စည်းတည်ဆောက်ထားသော စာသားဖော်မတ်များနှင့်အတူ စာရင်းပြုစုထားသည်။ ငွေပေးချေမှုမတိုင်မီ စျေးနှုန်းကို ပြသထားသည်။ လုပ်ငန်းပြီးဆုံးသောအခါ သင့်မှတ်တမ်းစာမျက်နှာတွင် ဘာသာပြန်ထားသောဖိုင်နှင့် ဘာသာစကားနှစ်မျိုးဖိုင်ကို သီးခြားဒေါင်းလုဒ်များအဖြစ် ကမ်းလှမ်းထားသည်။
စာသားကို ဘယ်လိုဘာသာပြန်သည်ဆိုသည့် အချက်နှစ်ချက်က ရလဒ်အပေါ် သက်ရောက်မှုရှိသည်။
- မော်ဒယ်သည် သင့်သော့များကို မမြင်ပါ။ တန်ဖိုးတစ်ခုစီကို နံပါတ်တပ်ထားသော အပိုင်းအဖြစ် ပို့ပြီး သော့အမည် မပါဝင်ပါ။
"button.open"နှင့်"status.open"နှစ်ခုစလုံးက "Open" ဟု ဆိုပါက တစ်ခုက ကြိယာဖြစ်ပြီး ကျန်တစ်ခုက နာမဝိသေသနဖြစ်ကြောင်း မော်ဒယ် သိရန် နည်းလမ်းမရှိပါ။ တိုတောင်းပြီး အဓိပ္ပာယ်မရှင်းလင်းသော စာသားများကို ကိုယ်တိုင် စစ်ဆေးသင့်သည်။ - တန်ဖိုးတစ်ခုစီကို သီးခြားစီ ဘာသာပြန်သည်။ သော့နှစ်ခုကို ဆက်စပ်ပေးသည့်အရာ မရှိသောကြောင့် နေရာနှစ်ခုရှိ စကားလုံးတူတစ်ခုသည် မတူညီသော ပုံစံနှစ်မျိုးဖြင့် ပြန်လာနိုင်ပြီး မတူညီသော ဘာသာပြန်ချက်နှစ်ခု လိုအပ်သော စကားလုံးတစ်ခုသည် တူညီသောပုံစံဖြင့် ပြန်လာနိုင်သည်။ BookTranslator ၏ ရွေးချယ်နိုင်သော အလိုအလျောက် ဝေါဟာရစာရင်းက အမည်များ၊ နေရာများနှင့် အထူးပြုဝေါဟာရများကို စုဆောင်းပြီး တစ်သမတ်တည်းဖြစ်စေသော်လည်း သင့်ကိုယ်ပိုင် ပုံသေဘာသာပြန်ချက်များကို ပေး၍ မရပါ။ တိကျသော ပုံစံတစ်မျိုးတည်းဖြင့် ဘာသာပြန်ရမည့် ဝေါဟာရများအတွက် ဝေါဟာရစာရင်းတစ်ခု ထားရှိပြီး ဘာသာပြန်ပြီးနောက် ထိုစာသားများကို စစ်ဆေးပါ။ ကျွန်ုပ်တို့၏ ဝေါဟာရလမ်းညွှန် တွင် မည်သို့စီစဉ်ရမည်ကို ရှင်းပြထားသည်။
Inline HTML တဂ်များကို ဘာသာပြန်ပြီးနောက် ရေတွက်ပြီး တဂ်များ မကိုက်ညီသော အပိုင်းကို ထပ်မံကြိုးစားသည်။ Curly-brace placeholder များ၊ %s ပုံစံ placeholder များနှင့် ICU syntax များကို စာသား၏ တစ်စိတ်တစ်ပိုင်းအဖြစ် ပို့သော်လည်း အလားတူ စစ်ဆေးခြင်း မပြုပါ။ ဘာသာပြန်ချက်တိုင်းတွင် အဆင့် 4 ကို လုပ်ဆောင်ပါ။
ချတ်မော်ဒယ် သို့မဟုတ် ဒေသခံမော်ဒယ် ဖြင့် ဘာသာပြန်လိုပါက တန်ဖိုးများကိုသာ ပို့ပြီး မူရင်းဖိုင်ကို ဘယ်တော့မှ မပို့ပါနှင့်။ ပြီးလျှင် script တစ်ခုဖြင့် သော့အလိုက် ပြန်ထည့်ပါ။ အောက်ပါ စစ်ဆေးမှုများသည် နည်းလမ်းနှစ်မျိုးစလုံးအတွက် သက်ဆိုင်သည်။
အဆင့် 4: ဘာသာပြန်ထားသောဖိုင်ကို စစ်ဆေးပါ
ဘာသာပြန်ချက်ကို မူရင်းနှင့် နှိုင်းယှဉ်ပါ။
python3 check_i18n_json.py en.json fr.json
၎င်းက ဘာကို ဖမ်းမိသည်ကို ပြသရန် အမှားများ ထည့်သွင်းထားသော ပြင်သစ်ဖိုင် ကို ပြုလုပ်ခဲ့သည်။ ၎င်းသည် ကိုယ်တိုင်ပြုလုပ်ထားပြီး မော်ဒယ်၏ ထွက်ရှိမှု မဟုတ်ပါ။ အဆင့် 1 ရှိ မူရင်းသတိပေးချက်များအတိုင်း ပြီးနောက် စစ်ဆေးကိရိယာက ဤသို့ ပြသခဲ့သည်။
ERROR app.greeting: placeholders differ; lost ['name'] extra ['nom']
ERROR app.help_url: urls differ; lost ['https://example.com/help'] extra ['https://example.com/aide']
ERROR app.items: ICU message has no 'other' case
ERROR app.legacy: placeholders differ; lost ['%d'] extra []
ERROR limits.maxFiles: type changed from int to str
ERROR limits.projectId: non-text value changed: 9007199254740993 -> 9007199254740992
INFO menu[1]: identical to source: 'Save'
INFO compared 20 source values, 1 unchanged strings
ထိုအရာတစ်ခုစီသည် အက်ပ်တွင် ချို့ယွင်းချက်အဖြစ် ပေါ်လာမည်။ အမည်အလွတ်၊ ချို့ယွင်းနေသော လင့်ခ်၊ အများကိန်းကို ပြသသည့်အခါ ပျက်ကျခြင်း သို့မဟုတ် မူရင်းစာသား ထွက်ပေါ်ခြင်း၊ ပျောက်ဆုံးနေသော အခန်းအရေအတွက်၊ စာသားအဖြစ် နှိုင်းယှဉ်ထားသော ကန့်သတ်ချက်။ INFO လိုင်းက မပြောင်းလဲဘဲ ပြန်လာသော စာသားများကို စာရင်းပြသည်။ အချို့သည် ကောင်းမွန်သည်၊ ဥပမာ အမှတ်တံဆိပ်အမည်များ။ ပြင်သစ်မီနူးရှိ "Save" မှာမူ မကောင်းပါ။
စစ်ဆေးကိရိယာသည် သော့များ၊ တန်ဖိုးအမျိုးအစားများ၊ စာသားမဟုတ်သော တန်ဖိုးများ၊ placeholder များ ({name}, {{name}}, %s, %1$s, %@)၊ ICU argument အမည်များ၊ HTML တဂ်များနှင့် URL များကို နှိုင်းယှဉ်သည်။ ဘာသာပြန်ချက်ကိုယ်တိုင်ကို ဆုံးဖြတ်ခြင်း မပြုပါ။
အများကိန်း ကိစ္စများ ပြောင်းလဲသင့်သည်
ICU အများကိန်းတွင် အများကိန်း အမျိုးအစားတစ်ခုစီအတွက် မက်ဆေ့ချ်တစ်ခု စာရင်းပြသည်။ အင်္ဂလိပ်တွင် အမျိုးအစားနှစ်ခုရှိသည်၊ one နှင့် other။ သို့သော် ဘာသာစကားများစွာတွင် မတူညီသော အစုအဝေးရှိသည်။ ကျွန်ုပ်တို့၏ items မက်ဆေ့ချ်အတွက် ကောင်းမွန်သော ရုရှားဘာသာပြန်ချက်တစ်ခုသည် ပုံမှန်အားဖြင့် one၊ few၊ many နှင့် other ကို အသုံးပြုမည်ဖြစ်ပြီး ဂျပန်ဘာသာပြန်ချက်တစ်ခုသည် other ကိုသာ အသုံးပြုမည်။ ထို့ကြောင့် ဤနေရာတွင် မကိုက်ညီမှုသည် အမြဲတမ်း အမှားမဟုတ်ပါ။
အမျိုးအစားများသည် Unicode CLDR အများကိန်းစည်းမျဉ်းများ မှ လာပြီး other သည် ဘာသာစကားတိုင်းတွင် ရှိသော အမျိုးအစားဖြစ်သည်။ ဤအရာများသည် CLDR 48 ဖြင့် Node.js ရှိ Intl.PluralRules က ဖော်ပြသော cardinal အမျိုးအစားများဖြစ်သည်။
| ဘာသာစကား | အများကိန်း အမျိုးအစားများ |
|---|---|
| အင်္ဂလိပ်၊ ဂျာမန် | one, other |
| ပြင်သစ်၊ စပိန်၊ ပေါ်တူဂီ | one, many, other |
| ရုရှ၊ ပိုလန် | one, few, many, other |
| အာရဗီ | zero, one, two, few, many, other |
| ဂျပန်၊ တရုတ်၊ ကိုရီးယား | အခြား |
ပြင်သစ်၊ စပိန်နှင့် ပေါ်တူဂီဘာသာတို့သည် many ကို အလွန်ကြီးမားသော ဝိုင်းထားသည့် ကိန်းဂဏန်းများဖြစ်သည့် သန်းတစ်သန်းကဲ့သို့သော ကိန်းများအတွက်သာ အသုံးပြုကြသည်၊ ထို့ကြောင့် ကိန်းအနည်းငယ်အတွက် မက်ဆေ့ခ်ျတွင် များသောအားဖြင့် ၎င်းကို မလိုအပ်ပါ။ စစ်ဆေးသည့်ကိရိယာသည် ပျောက်ဆုံးနေသော other ကို အမှားအဖြစ် အစီရင်ခံပြီး အခြားအမျိုးအစားပြောင်းလဲမှုများကို ဤဇယားနှင့် နှိုင်းယှဉ်ရန် သတိပေးချက်အဖြစ် အစီရင်ခံသည်။ မည်သည့်ဘာသာစကားအတွက်မဆို စာရင်းကို သင်ကိုယ်တိုင် ပရင့်ထုတ်နိုင်သည်-
node -e 'console.log(new Intl.PluralRules("ru").resolvedOptions().pluralCategories)'
ဘာသာပြန်သူအား အင်္ဂလိပ်ဘာသာ အခြေအနေများကို ပေးထားသည်၊ ထို့ကြောင့် ပြန်လာသည့်အရာကို စစ်ဆေးပါ။ ရုရှား သို့မဟုတ် အာရဗီ မက်ဆေ့ခ်ျတွင် one နှင့် other သာ ရှိနေသေးပါက ပျောက်ဆုံးနေသော အခြေအနေများကို ကိုယ်တိုင်ထည့်ပါ သို့မဟုတ် ဘာသာပြန်သူအား ထည့်ခိုင်းပါ။
ထို့နောက် အက်ပ်တွင် ထည့်သွင်းပါ
စစ်ဆေးသည့်ကိရိယာသည် ဖိုင်ကို ထည့်သွင်းရန် ဘေးကင်းကြောင်း သက်သေပြသည်၊ ကောင်းမွန်စွာ ဖတ်ရှုနိုင်ကြောင်း မဟုတ်ပါ။ အက်ပ်ကို ဘာသာစကားအသစ်သို့ ပြောင်းပြီး မျက်နှာပြင်များကို ကြည့်ပါ- ဂျာမန် သို့မဟုတ် ဖင်လန်ဘာသာတွင် ခလုတ်တစ်ခုကို ကျော်လွန်နေသော စကားလုံးရှည်များ၊ အာရဗီ သို့မဟုတ် ဟီဘရူးဘာသာတွင် ညာမှဘယ်သို့ စာသား၊ နှင့် သင့်ကုဒ်က ဘာသာစကားဖိုင်နှင့် သီးခြားဖော်မတ်လုပ်သော ရက်စွဲများ သို့မဟုတ် နံပါတ်များ။ ကျွန်ုပ်တို့၏ ဘာသာပြန်ခြင်းနှင့် ဒေသသတ်မှတ်ခြင်း လမ်းညွှန် တွင် စကားလုံးများအပြင် စျေးကွက်များကြားတွင် မည်သည့်အရာများ ပြောင်းလဲသွားသည်ကို ဖော်ပြထားသည်။
အဖြစ်များသော ပြဿနာများ
ဘာသာပြန်ထားသော ဖိုင်သည် ကျွန်ုပ်၏ အက်ပ်တွင် ထည့်သွင်း၍ မရပါ။ ၎င်းအပေါ်တွင် စစ်ဆေးသည့်ကိရိယာကို လုပ်ဆောင်ပါ။ စစ်ဆေးသည့်ကိရိယာက ၎င်းကို ခွဲခြမ်းစိတ်ဖြာ၍ မရပါက ဖိုင်ကို ဘာသာပြန်ပြီးနောက် တည်းဖြတ်ထားခြင်း သို့မဟုတ် မူလကတည်းက တရားဝင်မဟုတ်ခြင်း ဖြစ်သည်။ ၎င်းကို ခွဲခြမ်းစိတ်ဖြာ၍ ရပါက သော့များ သို့မဟုတ် အမျိုးအစားများအကြောင်း ERROR လိုင်းများကို ရှာပါ။
စာသားတစ်ခုသည် {count, plural, ...} ကဲ့သို့သော ကုဒ်မပြောင်းထားသော ICU မက်ဆေ့ခ်ျအဖြစ် ပေါ်လာသည်။ ICU သဒ္ဒါသည် ဘာသာပြန်ရာတွင် ပျက်သွားသည်၊ များသောအားဖြင့် ကွင်းကွက်တစ်ခု ပျောက်ဆုံးခြင်း သို့မဟုတ် other အခြေအနေ ပျောက်ဆုံးခြင်း ဖြစ်သည်။ ဖွဲ့စည်းပုံကို မူရင်းမှ ကူးယူပြီး အခြေအနေတစ်ခုစီအတွင်းရှိ စကားလုံးများကိုသာ ဘာသာပြန်ပါ။
ကျွန်ုပ်၏ ဖိုင်သည် YAML၊ .po ဖိုင် သို့မဟုတ် Markdown ဖြစ်သည်။ BookTranslator သည် ၎င်းတို့ကိုလည်း လက်ခံသည်၊ သို့သော် ဖော်မတ်တစ်ခုစီတွင် ၎င်း၏ ကိုယ်ပိုင်စည်းမျဉ်းများ ရှိသည်။ စာရွက်စာတမ်းအတွက် ကျွန်ုပ်တို့၏ Markdown ဘာသာပြန် လမ်းညွှန် ကို ကြည့်ပါ။ ဝဘ်စာမျက်နှာများအတွက် HTML ဖိုင် လမ်းညွှန် ကို ကြည့်ပါ။
သော့အသစ်များကိုသာ ဘာသာပြန်နိုင်ပါသလား။ တစ်ကြိမ်တည်း တင်သွင်းမှုအတွင်း မရပါ၊ ဖိုင်တစ်ခုလုံးကို ဘာသာပြန်သည်။ သော့အသစ်များကို သီးခြားဖိုင်တစ်ခုတွင် ထည့်ပါ၊ ၎င်းကို ဘာသာပြန်ပါ၊ ရလဒ်ကို သော့အလိုက် ပေါင်းစည်းပါ။ ပေါင်းစည်းထားသော ဖိုင်တွင် သော့တိုင်း ပါဝင်ကြောင်း စစ်ဆေးသည့်ကိရိယာက အတည်ပြုပါလိမ့်မည်။
သော့များကို ဘာသာပြန်သင့်ပါသလား။ မသင့်ပါ။ သော့များသည် သင့်ကုဒ်က ရှာဖွေသော အမှတ်အသားများ ဖြစ်သည်။ တန်ဖိုးများသာ လူများ ဖတ်ရှုရန် စာသားများ ဖြစ်သည်။
ဆက်စပ် ဆောင်းပါးများ





