เหตุใดฉันจึงไม่สามารถเรียกใช้ทั้งแอปหรือเว็บไซต์ผ่าน Google แปลภาษาและรับการแปลพื้นฐานในภาษาอื่นได้
ตอนนี้คุณสามารถ!
ชื่อ hokeylization
เป็นกระเป๋าถือซึ่งหมายถึง 'hokey localization'
มันค่อนข้างน่าเบื่อเพราะมันง่ายมาก: มันส่งสตริงไปที่ Google Translate
และเรียบง่ายแต่ทรงพลังมาก มีการสนับสนุนพิเศษสำหรับเอกสาร HTML HandlebarsJS เทมเพลต และไฟล์ Markdown
คุณสามารถแปล:
- วัตถุ JavaScript ที่มีข้อความ
- ไฟล์หรือไดเร็กทอรีจำนวนเท่าใดก็ได้ โดยจะข้ามไดเร็กทอรีซ้ำๆ เสมอ
#อ่านเป็นภาษาอื่น เอกสาร README.md นี้ได้รับการแปลโดยใช้เครื่องมือ hokeylization เป็น ทุกภาษาที่ Google Translate รองรับ!
ฉันแน่ใจว่ามันไม่สมบูรณ์แบบ แต่ฉันหวังว่าจะดีกว่าไม่ทำอะไรเลย!
🇸🇦 ภาษาอาหรับ 🇧🇩 เบงกาลี 🇩🇪 ภาษาเยอรมัน 🇺🇸 ภาษาอังกฤษ 🇪🇸 ภาษาสเปน 🇫🇷 ภาษาฝรั่งเศส 🇹🇩 เฮาซา 🇮🇳 ฮินดี 🇮🇩 ชาวอินโดนีเซีย 🇮🇹 ภาษาอิตาลี 🇯🇵 ญี่ปุ่น 🇰🇷 ภาษาเกาหลี 🇮🇳 มารันตี 🇵🇱 โปแลนด์ 🇧🇷 ภาษาโปรตุเกส 🇷🇺 รัสเซีย 🇰🇪 สวาฮีลี 🇵🇭 ภาษาตากาล็อก 🇹🇷 ภาษาตุรกี 🇵🇰 ภาษาอูรดู 🇻🇳 ภาษาเวียดนาม 🇨🇳 จีน
การแปลเฉพาะของต้นฉบับ README อาจมีข้อบกพร่อง -- * ยินดีเป็นอย่างยิ่งที่จะแก้ไข! * โปรดส่ง คำขอดึงข้อมูลบน GitHub หรือหากคุณไม่สะดวกใจที่จะทำเช่นนั้น เปิดปัญหา
เมื่อคุณสร้างปัญหา GitHub ใหม่เกี่ยวกับการแปล โปรดทำดังนี้
- รวม URL ของหน้า (คัดลอก/วางจากแถบที่อยู่ของเบราว์เซอร์)
- รวมข้อความที่ไม่ถูกต้อง (คัดลอก/วางจากเบราว์เซอร์)
- โปรดอธิบายสิ่งที่ผิด -- การแปลไม่ถูกต้องหรือไม่? การจัดรูปแบบเสียอย่างใด? *กรุณาเสนอคำแนะนำในการแปลที่ดีขึ้น หรือควรจัดรูปแบบข้อความอย่างไรให้เหมาะสม
- ขอขอบคุณ!
- ที่มา
- การสนับสนุนและการระดมทุน
- การติดตั้ง
- ตั้งค่า
- กำลังแปลไฟล์ทรัพยากรสตริง JavaScript
- การแปลไดเรกทอรีของไฟล์ข้อความ
- ตัวเลือกอื่นๆ
- คำสั่งแบทช์ JSON
ฉันกำลังพยายามเป็นนักพัฒนาซอฟต์แวร์โอเพ่นซอร์สมืออาชีพ ฉันเคยทำงานใน อุตสาหกรรมซอฟต์แวร์มาหลายปีแล้ว ฉันได้เริ่มต้นบริษัทที่ประสบความสำเร็จและขายให้กับบริษัทมหาชน ช่วงนี้ตกงาน ไม่มีงานอื่นเข้าแถวเลย
ฉันจะลองเขียนซอฟต์แวร์ที่เป็นประโยชน์และดูว่าได้ผลหรือไม่
หากคุณสนุกกับการใช้ซอฟต์แวร์นี้ ฉันยินดีเป็นอย่างยิ่งที่จะได้รับ น้อยที่สุด การบริจาครายเดือนผ่าน Patreon
ขอขอบคุณ!
ในการใช้เครื่องมือบรรทัดคำสั่ง ติดตั้งโดยใช้ npm
หรือ yarn
:
npm install -g hokeylization
yarn global add hokeylization
หากต้องการใช้เป็นไลบรารี่ ให้ติดตั้งเวอร์ชัน lite
ซึ่งเล็กกว่ามาก:
npm install -g hokeylization-lite
yarn global add hokeylization-lite
จากนั้นดูที่ความช่วยเหลือสำหรับคำสั่ง hokey
:
hokey --help
hokey -h
ต้องการดูผลลัพธ์ในภาษาของคุณหรือภาษาอื่นหรือไม่?
hokey
พยายามตรวจจับภาษาโดยอัตโนมัติจากตัวแปรสภาพแวดล้อมของเชลล์ของคุณ
คุณบังคับภาษาได้โดยการตั้งค่าตัวแปรสภาพแวดล้อม LC_ALL
:
LC_ALL=it hokey --help
โปรดทราบว่าหากคุณได้ติดตั้ง hokeylization-lite
แล้ว command help จะใช้ได้เฉพาะในภาษาอังกฤษ
ตั้งค่าตัวแปรสภาพแวดล้อม GOOGLE_TRANSLATE_PROJECT_ID
เพื่อระบุโครงการ Google แปลภาษาของคุณ
ตั้งค่าตัวแปรสภาพแวดล้อม GOOGLE_APPLICATION_CREDENTIALS
เป็นข้อมูลรับรอง JSON ที่คุณดาวน์โหลด
หลังจากค้นหาวิธีการตรวจสอบสิทธิ์บน Google Cloud ได้อย่างไร (ก็สนุกดี)
หากคุณเรียกใช้จากซอร์สโค้ด คุณสามารถใส่ไฟล์เหล่านี้ในไฟล์ .env
ในซอร์ส
ไดเร็กทอรีที่จะโหลดตอนรันไทม์ผ่าน dotenv
ตารางสตริงของคุณ ต้อง อยู่ในไฟล์ JavaScript ในรูปแบบใดรูปแบบหนึ่งจากสองรูปแบบนี้:
การส่งออก ES6:
export default {
string_key: "some value",
another_key: "another value",
... more keys ...
}
การส่งออก CommonJS
module.exports = {
string_key: "some value",
another_key: "another value",
... more keys ...
}
หากไฟล์นี้ชื่อ myfile.en.js
คุณสามารถแปลเป็นภาษาสเปนและเยอรมันด้วย:
hokey -l es,de -o myfile.LANG.js myfile.en.js
LANG
ในด้านบนเป็นแบบพิเศษ -- เป็นคำสงวนในเครื่องมือนี้!
LANG
ถูกแทนที่ด้วยรหัสภาษาสำหรับไฟล์เอาต์พุต
ดังนั้นคำสั่งดังกล่าวจึงสร้างไฟล์:
myfile.es.js
myfile.de.js
ตัวเลือก -l
/ --languages
--languages' คือรายการรหัสภาษา ISO ที่คั่นด้วยเครื่องหมายจุลภาค
รองรับโดย Google แปลภาษา
หากมีไฟล์เอาต์พุตอยู่แล้ว ไฟล์จะถูกตรวจสอบเพื่อพิจารณาว่าคีย์ใดมีอยู่แล้ว คีย์ที่มีอยู่จะไม่ถูกแปล การแปลสำหรับคีย์ที่หายไปจะถูกสร้างและต่อท้าย ไปที่ส่วนท้ายของวัตถุ JS ไฟล์ทั้งหมดจะถูกเขียนใหม่เสมอ
หากต้องการบังคับให้แปลคีย์ทั้งหมดใหม่ ให้ใช้ตัวเลือก -f
/ --force
คุณยังสามารถแปลไดเร็กทอรีของไฟล์ได้อีกด้วย hokeylization จะไปเยี่ยมทุก ๆ ซ้ำ ๆ ไฟล์ในไดเร็กทอรีและเรียกใช้เนื้อหาผ่าน Google Translate และบันทึกผลลัพธ์ ไปยังไฟล์ที่มีชื่อเหมือนกันในแผนผังไดเร็กทอรีแยกต่างหาก
เมื่อเป้าหมายของการแปลของคุณคือไดเร็กทอรี โหมดนี้จะเปิดใช้งาน
ตัวเลือก -o
/ --outfile
ระบุไดเร็กทอรีเอาต์พุต
คำเตือนใหญ่: เมื่อแปลไดเร็กทอรี อย่า ระบุไดเร็กทอรีเอาต์พุต ที่อยู่ในไดเร็กทอรีอินพุตของคุณ! หากคุณทำเช่นนี้ คุณจะ:
- ชักนำให้เกิดการเรียกซ้ำที่ไม่สิ้นสุด
- เปิดบิล Google ของคุณ
- เติมดิสก์ของคุณ
- สนุกน้อยลง
นี่คือตัวอย่างของสิ่งที่ ไม่ควรทำ:
hokey -l es -o templates/es templates # <--- DON'T DO THIS!
เมื่อดำเนินการนี้ ไฟล์ที่แปลแล้วจะถูกเขียนไปยัง templates/es
และกลายเป็นไฟล์ใหม่
ไฟล์ต้นฉบับที่จะแปล เนื่องจากอยู่ภายใต้ templates/
- กระบวนการนี้ยังคงดำเนินต่อไป
ตลอดไปอย่าทำ!
ตกลง สมมติว่าคุณมีเทมเพลตอีเมลบางส่วนในไดเรกทอรี:
templates/email/en/welcome.txt
templates/email/en/welcome.html
templates/email/en/verify-account.txt
templates/email/en/verify-account.html
templates/email/en/reset-password.txt
templates/email/en/reset-password.html
หากต้องการแปลสิ่งเหล่านี้เป็นภาษาสเปนและเยอรมัน ให้เรียกใช้:
hokey -l es,de -o templates/email/LANG templates/email/en
ข้างต้น LANG
เป็นคำสงวนและจะถูกแทนที่ด้วยรหัสภาษา ISO
จะเกิดอะไรขึ้นเมื่อการทำงานข้างต้นทำงาน:
- ไดเร็กทอรี
และ
templates/email/de` จะถูกสร้างขึ้น (หากไม่มีอยู่) - ทุกไฟล์ใน
templates/email/en
จะถูกแปลเป็นภาษาสเปนและเยอรมัน - ไฟล์เอาต์พุตที่มีอยู่จะไม่ถูกสร้างขึ้นใหม่เว้นแต่คุณจะใช้
-f
/--force
- คุณจะจบลงด้วยโครงสร้างไดเร็กทอรีและไฟล์ที่เหมือนกันภายใน
es
และde
เช่นเดียวกับที่คุณมีภายใต้en
ผ่าน -n
/ --dry-run
เพื่อแสดงสิ่งที่จะทำ แต่อย่าทำการเรียก API หรือเขียนไฟล์ใดๆ
ส่ง -f
/ --force
เพื่อสร้างการแปลใหม่เสมอ แม้ว่าจะมีอยู่แล้วก็ตาม
ส่ง -m
/ --match
เพื่อจำกัดไฟล์ที่ประมวลผลเมื่อรันในโหมดไดเรกทอรี
คุณอาจไม่ต้องการแปล ทุกไฟล์ ในไดเร็กทอรีต้นทางไปยังไดเร็กทอรีเป้าหมายของคุณเสมอไป
ค่าของตัวเลือก -m
" / --match
คือ regex (ระวังกฎการเสนอราคาเชลล์!) ที่ระบุ
ไฟล์ไหนควรแปล
หากมีข้อสงสัย คุณสามารถรวมตัวเลือกนี้กับ -n
/ --dry-run
เพื่อดูว่าไฟล์ใดจะถูกแปล
บางครั้ง -m
ของคุณตรงกับไฟล์มากเกินไป ใช้ตัวเลือก -e
/ --excludes
เพื่อยกเว้นอย่างชัดเจน
ไฟล์ที่มิฉะนั้นจะมีการจับคู่
คุณสามารถแสดงรายการ regexes ได้หลายรายการ โดยคั่นด้วยช่องว่าง
การใช้งานทั่วไปจะเป็น: --excludes node_modules dist \.git build tmp
สตริงที่จะแปลอาจมีเทมเพลต {{ handlebars }}
ที่มีวงเล็บปีกกาสองหรือสามอัน
คุณอาจ ไม่ ต้องการให้แปลเนื้อหาในเทมเพลตเหล่านั้น
ผ่าน -H
/ --handlebars
และสิ่งใดที่อยู่ภายใน {{ ... }}
จะไม่ถูกแปล
Markdown ไม่ใช่ข้อความหรือ html ดังนั้น Google แปลภาษาจึงมีปัญหาบางอย่าง
-M
/ --markdown
ช่วยให้สามารถจัดการไฟล์ markdown แบบพิเศษได้
สำหรับไฟล์ markdown หากคุณไม่ได้ใช้แฟ -M
คุณอาจพบปัญหาเหล่านี้:
- ลิงค์เสีย ในการแปล อักขระเว้นวรรคจะปรากฏขึ้นหลังจากคำอธิบายลิงก์ markdown สิ้นสุด (ด้วย
]
) และ ก่อนที่ลิงค์เป้าหมายจะเริ่มต้น (ด้วย(
) สิ่งนี้ทำให้ markdown แสดงผลไม่ถูกต้อง และ link เสียเมื่อดูเอกสาร - บล็อกโค้ดได้รับการแปล Google แปลภาษาไม่ทราบว่ามาร์กดาวน์ใดที่พิจารณาโค้ดและสิ่งใดที่ไม่เป็นเช่นนั้น
- ระยะห่างไม่ถูกต้องสำหรับบล็อคโค้ดที่เยื้อง การเว้นวรรคเป็นเรื่องยากที่จะรักษาในการแปล
- สิ่งที่อยู่ภายใน
backticks
จะได้รับการแปลเมื่อคุณต้องการให้มันเป็นค่าตามตัวอักษร
เมื่อเปิดใช้งานแฟล็ -M
/ --markdown
:
- รูปแบบ
](
จะถูกย่อเป็น](
ดังนั้นจึงแก้ไขลิงก์ markdown ที่เสียหาย - เสื้อคลุม "ไม่มีการแปล" จะถูกวางไว้รอบ ๆ บล็อคโค้ดที่เยื้อง รักษาการเยื้องที่เหมาะสม และทำให้แน่ใจว่าไม่ได้แปล
- เสื้อคลุม "ไม่มีการแปล" จะถูกวางไว้รอบข้อความภายใน
backticks
เพื่อให้แน่ใจว่าไม่ได้แปล
โดยปกติทุกอย่างจะถูกประมวลผลเป็นข้อความธรรมดา
หากเนื้อหาของคุณเป็น HTML เนื้อหาจะเสียหายเว้นแต่คุณจะผ่านตัวเลือก -p html
/ --process-as html
สำหรับการผจญภัย: เมื่อประมวลผลไฟล์ในไดเร็กทอรี คุณสามารถส่งตัวเลือก -F
/ --filter
เพื่อกรองเอาท์พุตก่อนที่จะเขียนลงระบบไฟล์
ค่าของตัวเลือกนี้ต้องเป็นพาธไปยังไฟล์ JS ที่ส่งออกฟังก์ชันชื่อ filter
ฟังก์ชัน filter
ต้องเป็น async
await
เพราะระบบจะเรียกใช้ "รอ"
ก่อนที่ไฟล์จะถูกเขียนลงดิสก์ เนื้อหาไฟล์ทั้งหมดจะถูกส่งไปยังฟังก์ชัน filter
เป็นสตริง
ค่าที่ส่งคืนจากฟังก์ชัน filter
คือสิ่งที่จะถูกเขียนไปยัง storage จริงๆ
ดังนั้นคุณจึงสามารถควบคุมสิ่งที่จะเขียนได้ในที่สุด
สคริปต์ filter
ตัวกรอง" จะถูกค้นหาในตำแหน่งต่อไปนี้ (โดยจะมี .js
ต่อท้ายตัวกรอง
ชื่อ เว้นแต่จะลงท้ายด้วย .js
)
- ไดเรกทอรีปัจจุบัน
- ไดเร็กทอรีชื่อ
.hokey-filters
ภายในไดเร็กทอรีปัจจุบัน - ไดเร็กทอรีชื่อ
${HOME}/.hokey-filters
โดยที่${HOME}
เป็นโฮมไดเร็กทอรีของผู้ใช้ปัจจุบัน - ในตัว ไดเรกทอรีตัวกรอง
สตริง filter
สามารถมีได้หลายคำ ในกรณีนี้ คำแรกคือชื่อตัวกรอง และ
คำที่เหลือจะถูกส่งผ่านเป็นอาร์กิวเมนต์ไปยังฟังก์ชัน filter
ใช้ -h
/ --help
เพื่อแสดงความช่วยเหลือ
ด้วยตัวเลือก -j
/ --json
คุณสามารถเรียกใช้คำสั่ง hokey
ประสานกันได้หลายคำสั่ง
ตามธรรมเนียมไฟล์นี้เรียกว่า hokey.json
แต่คุณสามารถตั้งชื่ออะไรก็ได้ตามต้องการ
หากคุณส่งไดเร็กทอรีเป็นตัวเลือก
-j
hokeyจะค้นหา
hokey.json` ในไดเร็กทอรีนั้น
ไฟล์ JSON ควรมีหนึ่งวัตถุ ภายในอ็อบเจ็กต์นั้น ชื่อคุณสมบัติของมันเหมือนกับ
ตัวเลือกบรรทัดคำสั่ง บวกคุณสมบัติเพิ่มเติมหนึ่งรายการชื่อ hokey
คุณสมบัติ hokey
คืออาร์เรย์ของคำสั่งที่จะเรียกใช้ คุณสมบัติที่ประกาศภายในคำสั่งเหล่านี้จะ
แทนที่การประกาศที่ซ้ำกันในวัตถุภายนอก
ภายในแต่ละอ็อบเจ็กต์ในอาร์เรย์ hokey
คุณควรระบุ name
และไฟล์อินพุตและเอาต์พุต
นี่คือตัวอย่างของ hokey.json
{
"inputLanguage": "en",
"languages": "es,fr,ja", # can also be an array of strings
"force": false,
"match": null,
"processAs": null,
"excludes": ["exclude-1", "exclude-2"],
"handlebars": false,
"markdown": false,
"regular": false,
"dryRun": false,
"filter": "theFilter.js",
"hokey": [
{
"name": "locale names",
"infile": "messages/locales_en.js",
"outfile": "messages/locales_LANG.js",
"handlebars": true
},
{
"name": "CLI messages",
"infile": "messages/en_messages.js",
"outfile": "messages/LANG_messages.js",
"handlebars": true
},
{
"name": "README",
"infile": "README.md",
"outfile": "lang/LANG/",
"excludes": ["lang/", "node_modules/", "\\.git/", "tmp/"],
"filter": "relativizeMarkdownLinks lang",
"markdown": true,
"index": "lang/README.md"
}
]
}
ส่งอาร์เรย์ของเส้นทางไฟล์เป็น infiles
แทนเส้นทางเดียว infile
ดังในตัวอย่างนี้:
{
... [
{
"name": "my docs",
"infiles": ["README.md", "INSTALL.md", "TUTORIAL.md"],
"outfile": "docs/LANG/",
"markdown": true
]
}
เมื่อแปลเป็นหลายภาษา hokey
สามารถสร้างไฟล์ดัชนีที่แสดงคำแปลทั้งหมดที่ทำขึ้น
และให้ลิงค์ไปยังพวกเขา
เมื่อสร้างดัชนี คุณสามารถมีแหล่งอินพุตได้เพียงแหล่งเดียว
ผ่านตัวเลือก -I
/ --index
ค่าคือตำแหน่งที่ไฟล์ดัชนีจะถูกสร้างขึ้น ซึ่งสามารถเป็นไฟล์ได้
หรือไดเร็กทอรี ถ้าเป็นไดเร็กทอรี ชื่อไฟล์เริ่มต้นจะถูกใช้ตามเทมเพลต (ดูด้านล่าง)
ใช้ -A
/ --index-template
เพื่อกำหนดวิธีการจัดรูปแบบเอาต์พุตดัชนี คุณสามารถระบุ 'html'
'markdown', 'text' หรือเส้นทางไฟล์ไปยังเทมเพลต HandlebarsJS ของคุณเอง
หากคุณระบุเทมเพลตของคุณเอง คุณต้องระบุไฟล์ (ไม่ใช่ไดเร็กทอรี) สำหรับ -I
/ --index
ตัวเลือก