আমি কেন Google অনুবাদের মাধ্যমে আমার পুরো অ্যাপ বা সাইট চালাতে পারি না এবং অন্য ভাষায় একটি মৌলিক অনুবাদ পেতে পারি না?
এখন তুমি পার!
hokeylization
নামটি একটি পোর্টম্যান্টো, যার অর্থ 'হকি স্থানীয়করণ'
এটি কিছুটা হকি কারণ এটি খুব সহজ: এটি Google অনুবাদে স্ট্রিং পাঠায়
এবং এটি সহজ, তবুও খুব শক্তিশালী। এটি এইচটিএমএল নথিগুলির জন্য বিশেষ সমর্থন রয়েছে, HandlebarsJS টেমপ্লেট, এবং মার্কডাউন ফাইল।
আপনি অনুবাদ করতে পারেন:
- একটি জাভাস্ক্রিপ্ট অবজেক্ট যাতে বার্তা থাকে
- যেকোন সংখ্যক ফাইল বা ডিরেক্টরি, সবসময় ডিরেক্টরিগুলোকে আবর্তিতভাবে অতিক্রম করে
এই README.md নথিটি অনুবাদ করা হয়েছে, হোকিলাইজেশন টুল ব্যবহার করে, এতে Google অনুবাদ দ্বারা সমর্থিত প্রতিটি ভাষা!
আমি নিশ্চিত যে এটি নিখুঁত নয়, তবে আমি আশা করি এটি কিছুই না হওয়ার চেয়ে ভাল!
🇸🇦 আরবি 🇧🇩 বাংলা 🇩🇪 জার্মান 🇺🇸 ইংরেজি 🇪🇸 স্প্যানিশ 🇫🇷 ফরাসি 🇹🇩 হাউসা 🇮🇳 হিন্দি 🇮🇩 ইন্দোনেশিয়ান 🇮🇹 ইতালীয় 🇯🇵 জাপানি 🇰🇷 কোরিয়ান 🇮🇳 মারান্থি 🇵🇱 পোলিশ 🇧🇷 পর্তুগিজ 🇷🇺 রাশিয়ান 🇰🇪 সোয়াহিলি 🇵🇭 তাগালগ 🇹🇷 তুর্কি 🇵🇰 উর্দু 🇻🇳 ভিয়েতনামী 🇨🇳 চীনা
মূল README এর এই বিশেষ অনুবাদ ত্রুটি থাকতে পারে -- সংশোধনগুলি খুব স্বাগত জানাই! অনুগ্রহ করে একটি [GitHub-এ টেনে নেওয়ার অনুরোধ] পাঠান (https://github.com/cobbzilla/hokeylization/pulls), অথবা আপনি যদি এটি করতে স্বাচ্ছন্দ্যবোধ না করেন, একটি সমস্যা খুলুন
যখন আপনি একটি অনুবাদ সম্পর্কে একটি নতুন GitHub সমস্যা তৈরি করেন, অনুগ্রহ করে করুন:
- পৃষ্ঠার URL অন্তর্ভুক্ত করুন (ব্রাউজার ঠিকানা বার থেকে অনুলিপি/পেস্ট করুন)
- সঠিক পাঠ্য অন্তর্ভুক্ত করুন যা ভুল (ব্রাউজার থেকে অনুলিপি/পেস্ট)
- অনুগ্রহ করে বর্ণনা করুন কি ভুল -- অনুবাদ কি ভুল? বিন্যাস কি একরকম ভাঙ্গা?
- অনুগ্রহ করে একটি ভাল অনুবাদের পরামর্শ দিন, বা কীভাবে পাঠ্যটি সঠিকভাবে বিন্যাস করা উচিত
- ধন্যবাদ!
- সূত্র
- সমর্থন এবং তহবিল
- ইনস্টলেশন
- [সেট আপ সেটআপ)
- একটি জাভাস্ক্রিপ্ট স্ট্রিং রিসোর্স ফাইল অনুবাদ করা হচ্ছে
- টেক্সট ফাইলগুলির একটি ডিরেক্টরি অনুবাদ করা
- অন্যান্য বিকল্প
- 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
ইনস্টল করে থাকেন, তাহলে কমান্ড সহায়তা শুধুমাত্র ইংরেজিতে পাওয়া যায়
আপনার Google অনুবাদ প্রকল্প সনাক্ত করতে GOOGLE_TRANSLATE_PROJECT_ID
পরিবেশ পরিবর্তনশীল সেট করুন
আপনার ডাউনলোড করা JSON শংসাপত্রের জন্য GOOGLE_APPLICATION_CREDENTIALS
পরিবেশ পরিবর্তনশীল সেট করুন
Google ক্লাউডে প্রমাণীকরণ কীভাবে কাজ করে তা খুঁজে বের করার পরে (এটি মজাদার হতে পারে)
আপনি যদি সোর্স কোড থেকে চালাচ্ছেন, তাহলে আপনি এগুলিকে উৎসের একটি .env
ফাইলেও রাখতে পারেন
ডিরেক্টরিটি রানটাইমে dotenv এর মাধ্যমে লোড করা হবে
আপনার স্ট্রিং টেবিল অবশ্যই এই দুটি ফর্মের একটিতে একটি জাভাস্ক্রিপ্ট ফাইলে থাকতে হবে:
ES6 রপ্তানি:
export default {
string_key: "some value",
another_key: "another value",
... more keys ...
}
কমনজেএস এক্সপোর্ট
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
বিকল্পটি ISO ভাষা কোডগুলির একটি কমা দ্বারা পৃথক করা তালিকা
Google অনুবাদ দ্বারা সমর্থিত
যদি আউটপুট ফাইলটি ইতিমধ্যেই বিদ্যমান থাকে তবে কোন কীগুলি ইতিমধ্যেই বিদ্যমান তা নির্ধারণ করতে এটি পরীক্ষা করা হবে। বিদ্যমান কীগুলি অনুবাদ করা হবে না৷ অনুপস্থিত কীগুলির অনুবাদ তৈরি করা হবে এবং যুক্ত করা হবে JS অবজেক্টের শেষ পর্যন্ত। সম্পূর্ণ ফাইলটি সর্বদা পুনরায় লেখা হয়।
জোর করে সমস্ত কী পুনরায় অনুবাদ করতে, -f
/ --force
বিকল্পটি ব্যবহার করুন
আপনি ফাইলগুলির একটি ডিরেক্টরিও অনুবাদ করতে পারেন। hokeylization recursively প্রতি পরিদর্শন করা হবে ডিরেক্টরিতে ফাইল করুন এবং Google অনুবাদের মাধ্যমে এর বিষয়বস্তু চালান এবং আউটপুট সংরক্ষণ করুন একটি পৃথক ডিরেক্টরি গাছে একটি অভিন্ন নামযুক্ত ফাইলে
যখন আপনার অনুবাদের লক্ষ্য একটি ডিরেক্টরি, এই মোড সক্রিয় করা হয়
-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/es
এবংtemplates/email/de
ডিরেক্টরি তৈরি করা হবে (যদি সেগুলি বিদ্যমান না থাকে)templates/email/en
এর প্রতিটি ফাইল স্প্যানিশ এবং জার্মান ভাষায় অনুবাদ করা হবে- আপনি
-f
/--force
ব্যবহার না করলে বিদ্যমান আউটপুট ফাইলগুলি পুনরায় তৈরি করা হবে না - আপনি একটি অভিন্ন ডিরেক্টরি কাঠামো এবং
es
এবংde
এর মধ্যে ফাইলগুলি নিয়ে শেষ করবেন যেমন আপনিen
এর অধীনে আছে
কি করা হবে তা প্রদর্শন করতে -n
/ --dry-run
পাস করুন, কিন্তু আসলে কোনো API কল করবেন না বা কোনো ফাইল লিখবেন না
অনুবাদগুলিকে সর্বদা পুনরুত্পাদন করতে -f
/ --force
পাস করুন, এমনকি যদি সেগুলি ইতিমধ্যেই বিদ্যমান থাকে
ডিরেক্টরি-মোডে চলাকালীন প্রক্রিয়াকৃত ফাইলগুলিকে সীমাবদ্ধ করতে -m
/ --match
পাস করুন
আপনি সবসময় আপনার সোর্স ডিরেক্টরিতে আপনার টার্গেট ডিরেক্টরিতে প্রতিটি ফাইল অনুবাদ করতে চান না
-m
/ --match
বিকল্পের মান হল একটি রেজেক্স (শেল উদ্ধৃতি নিয়ম থেকে সাবধান!) যা নির্দিষ্ট করে
কোন ফাইল অনুবাদ করা উচিত
সন্দেহ হলে, কোন ফাইলগুলি অনুবাদ করা হবে তা দেখতে আপনি এই বিকল্পটি -n
/ --dry-run
সাথে একত্রিত করতে পারেন
কখনও কখনও আপনার -m
অনেকগুলি ফাইলের সাথে মেলে। স্পষ্টভাবে বাদ দিতে -e
/ --excludes
বিকল্পটি ব্যবহার করুন
অন্যথায় মিলে যেত যে ফাইল
আপনি স্পেস দ্বারা পৃথক করা একাধিক রেজেক্স তালিকা করতে পারেন
একটি সাধারণ ব্যবহার হবে: --excludes node_modules dist \.git build tmp
অনুবাদের স্ট্রিংগুলিতে {{ handlebars }}
টেমপ্লেট থাকতে পারে, হয় দুই বা তিনটি কোঁকড়া-বন্ধনী সহ
আপনি সম্ভবত এই টেমপ্লেটগুলির মধ্যে থাকা জিনিসগুলি অনুবাদ করতে চান না
-H
/ --handlebars
পতাকাটি পাস করুন, এবং {{ ... }}
এর মধ্যে থাকা কিছু অনুবাদ করা হবে না
মার্কডাউন পাঠ্য বা এইচটিএমএল নয়, তাই গুগল ট্রান্সলেট এর সাথে কিছু অসুবিধা রয়েছে
-M
/ --markdown
পতাকা মার্কডাউন ফাইলের জন্য বিশেষ হ্যান্ডলিং সক্ষম করে
মার্কডাউন ফাইলগুলির সাথে, আপনি যদি -M
পতাকা ব্যবহার না করেন, আপনি সম্ভবত এই সমস্যাগুলি খুঁজে পাবেন:
- ভাঙা লিঙ্ক। অনুবাদে, একটি মার্কডাউন লিঙ্ক বর্ণনা শেষ হওয়ার পরে একটি স্পেস অক্ষর উপস্থিত হয় (
]
সহ) কিন্তু এর লক্ষ্য লিঙ্কটি শুরু হওয়ার আগে ((
দিয়ে)। এর ফলে মার্কডাউন ভুলভাবে রেন্ডার হয় এবং লিঙ্কটি ডকুমেন্ট দেখার সময় ভাঙ্গা হয়। - কোড ব্লক অনুবাদ করা হয়. Google অনুবাদ জানে না কোন মার্কডাউন কোড বিবেচনা করে এবং কোনটি নয়
- ইন্ডেন্টেড কোড ব্লকের জন্য ভুল ব্যবধান। অনুবাদে ব্যবধান রক্ষা করা কঠিন
backticks
-এর ভিতরের জিনিসগুলি অনুবাদ করা হবে, যখন আপনি প্রায় সবসময়ই তাদের আক্ষরিক মান হতে চান
যখন -M
/ --markdown
পতাকা সক্ষম করা হয়:
- প্যাটার্ন
](
কে ঘনীভূত করা হবে](
এইভাবে ভাঙা মার্কডাউন লিঙ্কগুলি ঠিক করা হচ্ছে - একটি "নো অনুবাদ" মোড়ক ইন্ডেন্টেড কোড ব্লকের চারপাশে স্থাপন করা হবে, সঠিক ইন্ডেন্টেশন সংরক্ষণ করে এবং সেগুলি অনুবাদ করা হয়নি তা নিশ্চিত করে
- একটি "অনুবাদ নয়" র্যাপার
backticks
এর মধ্যে পাঠ্যের চারপাশে স্থাপন করা হবে যাতে সেগুলি অনুবাদ করা না হয়।
সাধারণত সবকিছু প্লেইন টেক্সট হিসাবে প্রক্রিয়া করা হয়
আপনার বিষয়বস্তু যদি HTML হয়, তাহলে আপনি -p html
/ --process-as html
বিকল্পটি পাস না করলে তা বিপর্যস্ত হয়ে যাবে
দুঃসাহসিকদের জন্য: একটি ডিরেক্টরিতে ফাইলগুলি প্রক্রিয়া করার সময়, আপনি -F
/ --filter
বিকল্পটি পাস করতে পারেন
ফাইল সিস্টেমে লেখার আগে আউটপুট ফিল্টার করতে
এই বিকল্পের মান অবশ্যই একটি JS ফাইলের পথ হতে হবে যা filter
নামের একটি ফাংশন রপ্তানি করে
filter
ফাংশনটি অবশ্যই async
হতে হবে কারণ await
বলা হবে
ফাইলগুলি ডিস্কে লেখার আগে, সম্পূর্ণ ফাইলের বিষয়বস্তু একটি স্ট্রিং হিসাবে filter
ফাংশনে প্রেরণ করা হবে
filter
ফাংশন থেকে রিটার্ন মান যা আসলে স্টোরেজে লেখা হবে
সুতরাং, শেষ পর্যন্ত কী লেখা হবে তার উপর আপনার সম্পূর্ণ নিয়ন্ত্রণ রয়েছে
filter
স্ক্রিপ্টটি নিম্নলিখিত অবস্থানগুলিতে সন্ধান করা হবে (ফিল্টারের সাথে .js
যুক্ত করা হবে
নাম, যদি না এটি ইতিমধ্যে .js
এ শেষ হয় )
- বর্তমান ডিরেক্টরি
- বর্তমান ডিরেক্টরির মধ্যে
.hokey-filters
নামের একটি ডিরেক্টরি ${HOME}/.hokey-filters
নামের একটি ডিরেক্টরি, যেখানে${HOME}
বর্তমান ব্যবহারকারীর হোম ডিরেক্টরি- অন্তর্নির্মিত ফিল্টার ডিরেক্টরি
filter
স্ট্রিং একাধিক শব্দ হতে পারে। এই ক্ষেত্রে, প্রথম শব্দ ফিল্টার নাম, এবং
অবশিষ্ট শব্দগুলিকে আর্গুমেন্ট হিসেবে filter
ফাংশনে পাঠানো হবে
সাহায্য দেখানোর জন্য -h
/ --help
ব্যবহার করুন
-j
/ --json
বিকল্পের সাথে, আপনি একাধিক সমন্বিত hokey
কমান্ড চালাতে পারেন
নিয়মানুযায়ী এই ফাইলটিকে hokey.json
বলা হয়, কিন্তু আপনি যা খুশি নাম দিতে পারেন
আপনি যদি একটি ডিরেক্টরিকে -j
বিকল্প হিসেবে পাস করেন, তাহলে hokey
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"
}
]
}
একটি একক পাথ infile
infileএর পরিবর্তে
infiles` হিসাবে ফাইল পাথের একটি অ্যারে পাস করুন, যেমন এই উদাহরণে:
{
... [
{
"name": "my docs",
"infiles": ["README.md", "INSTALL.md", "TUTORIAL.md"],
"outfile": "docs/LANG/",
"markdown": true
]
}
অনেক ভাষায় অনুবাদ করার সময়, hokey
একটি সূচক ফাইল তৈরি করতে পারে যা করা সমস্ত অনুবাদের তালিকা করে
এবং তাদের লিঙ্ক প্রদান করে
সূচী তৈরি করার সময়, আপনার শুধুমাত্র একটি ইনপুট উৎস থাকতে পারে
-I
/ --index
বিকল্পটি পাস করুন, মানটি হল যেখানে সূচী ফাইল তৈরি করা হবে, যা একটি ফাইল হতে পারে
বা একটি ডিরেক্টরি। যদি এটি একটি ডিরেক্টরি হয়, একটি ডিফল্ট ফাইলের নাম ব্যবহার করা হবে, টেমপ্লেটের উপর ভিত্তি করে (নীচে দেখুন)
কিভাবে সূচক আউটপুট ফর্ম্যাট করা হয় তা নির্ধারণ করতে -A
/ --index-template
ব্যবহার করুন। আপনি 'html' নির্দিষ্ট করতে পারেন,
'মার্কডাউন', 'টেক্সট' বা আপনার নিজের HandlebarsJS টেমপ্লেটের ফাইল পাথ
আপনি যদি নিজের টেমপ্লেট নির্দিষ্ট করেন, তাহলে আপনাকে অবশ্যই -I
/ --index
এর জন্য একটি ফাইল (একটি ডিরেক্টরি নয়) উল্লেখ করতে হবে।
বিকল্প