Localization কি?
Localization (i18n) হলো একটি প্রক্রিয়া, যার মাধ্যমে একটি অ্যাপ্লিকেশন বা ওয়েবসাইটকে এমনভাবে কাস্টমাইজ করা হয় যাতে তা বিভিন্ন ভাষা, অঞ্চল এবং সংস্কৃতির জন্য উপযুক্ত হয়। এটি শুধু ভাষা অনুবাদ নয়, বরং ডেটা ফরম্যাট, টাইমজোন, এবং ইউজার ইন্টারফেসের বিভিন্ন উপাদানও অন্তর্ভুক্ত করে।
TurboGears একটি Python ফ্রেমওয়ার্ক, যা ওয়েব অ্যাপ্লিকেশন তৈরি করতে ব্যবহৃত হয়। এটি Internationalization (i18n) এবং Localization (L10n) সাপোর্ট করে, যা আপনি বিশ্বের বিভিন্ন অঞ্চলের জন্য কাস্টমাইজড অ্যাপ্লিকেশন তৈরি করতে পারবেন।
এখানে আমরা TurboGears-এ Localization সঠিকভাবে প্রয়োগ করার জন্য কিছু Best Practices আলোচনা করব।
১. অনুবাদযোগ্য টেক্সট আলাদা করা (Extracting Translatable Text)
Localization এর শুরু হল text extraction দিয়ে। আপনার অ্যাপ্লিকেশনের সমস্ত টেক্সট (যেমন: বার্তা, বাটন, ট্যাগলাইন) এমনভাবে আলাদা করে রাখুন যাতে সহজেই এগুলোকে অনুবাদ করা যায়।
TurboGears-এ gettext ফাংশন ব্যবহার করে আপনি অনুবাদযোগ্য টেক্সটগুলো আলাদা করতে পারেন। TurboGears সাধারণত Babel ব্যবহার করে অনুবাদ পরিচালনা করে, যা একটি সাধারণ প্যাকেজ যা বিভিন্ন ভাষায় অ্যাপ্লিকেশনটি অনুবাদ করতে সাহায্য করে।
উদাহরণ:
from tg import expose
from tg.i18n import ugettext as _
class MyController(BaseController):
@expose('json')
def index(self):
return {'message': _('Hello, world!')}
এখানে, ugettext ফাংশন ব্যবহার করা হয়েছে, যা "Hello, world!" স্ট্রিংটি অনুবাদযোগ্য করে তোলে। এটি আপনার অ্যাপ্লিকেশনের ইউজার ইন্টারফেসের সমস্ত টেক্সট আলাদা করার জন্য একটি পদ্ধতি।
২. ভাষা সিলেকশন এবং ডিফল্ট ভাষা সেট করা (Language Selection and Default Language)
ব্যবহারকারীদের তাদের পছন্দ অনুযায়ী ভাষা নির্বাচন করার সুবিধা দেওয়া গুরুত্বপূর্ণ। TurboGears এ, ভাষা পরিবর্তনের জন্য আপনি session বা URL parameters ব্যবহার করতে পারেন।
ভাষা সিলেকশন উদাহরণ:
from tg.i18n import set_lang
class LanguageController(BaseController):
@expose()
def change_language(self, lang_code):
set_lang(lang_code)
return redirect('/')
এখানে, set_lang() ফাংশনটি ব্যবহারকারীর নির্বাচিত ভাষা সেট করার জন্য ব্যবহার করা হচ্ছে। এছাড়াও, আপনি ডিফল্ট ভাষা সেট করতে পারেন যা সবসময় প্রথমে প্রদর্শিত হবে।
from tg.i18n import set_lang
from tg import config
# Set default language
set_lang(config.get('i18n.default_locale', 'en'))
এটি অ্যাপ্লিকেশন লোড হলে স্বয়ংক্রিয়ভাবে ডিফল্ট ভাষা নির্বাচন করবে।
৩. বিভিন্ন ডেটা ফরম্যাট সমর্থন (Supporting Different Date Formats)
ভিন্ন অঞ্চলে ভিন্ন ধরনের date format ব্যবহৃত হয়। যেমন, ইউরোপীয় দেশে DD/MM/YYYY ফরম্যাটে তারিখ দেখানো হয়, এবং যুক্তরাষ্ট্রে MM/DD/YYYY ব্যবহৃত হয়।
TurboGears-এ আপনি Babel এবং DateFormatter ব্যবহার করে বিভিন্ন অঞ্চলের জন্য ডেটা ফরম্যাট কাস্টমাইজ করতে পারেন।
উদাহরণ:
from babel import Locale
from babel.dates import format_date
locale = Locale('en', 'US')
formatted_date = format_date(datetime.date(2021, 12, 25), locale=locale)
print(formatted_date) # 12/25/2021
এখানে, আপনি Babel ব্যবহার করে ব্যবহারকারীর নির্বাচিত ভাষার ভিত্তিতে তারিখের ফরম্যাট পরিবর্তন করতে পারবেন।
৪. ইউনিট এবং ইন্টিগ্রেশন টেস্টিং (Unit and Integration Testing)
Localization এর পরবর্তী ধাপ হল তার টেস্টিং নিশ্চিত করা। বিভিন্ন ভাষায় আপনার অ্যাপ্লিকেশনটি সঠিকভাবে কাজ করছে কিনা তা নিশ্চিত করার জন্য unit testing এবং integration testing খুবই গুরুত্বপূর্ণ।
TurboGears-এ nose অথবা pytest ব্যবহার করে টেস্টিং করা যায়। এটির মাধ্যমে আপনি বিভিন্ন ভাষায় টেক্সট অনুবাদ এবং সঠিক ফরম্যাট যাচাই করতে পারবেন।
উদাহরণ:
import unittest
from tg.i18n import ugettext as _
class TestLocalization(unittest.TestCase):
def test_translation(self):
self.assertEqual(_('Hello, world!'), 'Hola, mundo!') # Spanish translation
এখানে, test_translation() ফাংশনটি নিশ্চিত করে যে, "Hello, world!" টেক্সট সঠিকভাবে স্প্যানিশে অনুবাদ হয়েছে কি না।
৫. ডাইন্যামিক কন্টেন্ট অনুবাদ (Dynamic Content Translation)
কিছু বিষয়, যেমন ডেটা ড্রিভেন কনটেন্ট বা ব্যবহারকারী দ্বারা ইনপুটকৃত ডেটা, কখনো কখনো অনুবাদ করা প্রয়োজন হতে পারে। TurboGears আপনাকে gettext ব্যবহার করে dynamic content অনুবাদ করার সুযোগ দেয়।
উদাহরণ:
from tg.i18n import ugettext as _
class MyController(BaseController):
@expose('json')
def index(self, username):
greeting = _('Hello, ${username}!', username=username)
return {'message': greeting}
এখানে, username এর মাধ্যমে ডাইনামিক টেক্সট অনুবাদ করা হচ্ছে।
৬. Resource Bundle ব্যবহারের মাধ্যমে অনুবাদ কনফিগারেশন (Using Resource Bundles for Translations)
অন্যথায় known as .po এবং .mo ফাইল, রিসোর্স বান্ডলগুলি ভাষার অনুবাদগুলি ধারণ করে। আপনি Babel এর মাধ্যমে .po ফাইল তৈরি এবং ব্যবহার করতে পারেন। এগুলি সিস্টেমের বিভিন্ন ভাষার জন্য তৈরি করা হয় এবং স্বয়ংক্রিয়ভাবে টাইপোগ্রাফির মাধ্যমে অ্যাপ্লিকেশন ডাউনলোড ও রেন্ডার করার সময় ব্যবহৃত হয়।
৭. স্মার্ট ফর্ম্যাটিং (Smart Formatting)
আপনার অ্যাপ্লিকেশনে number formatting, currency, এবং percentage formatting সহ বিভিন্ন ধরণের ফরম্যাটিং প্রয়োজন হতে পারে। TurboGears এবং Babel এই ধরনের ফরম্যাটিং সমর্থন করে এবং বিভিন্ন ভাষায় স্বয়ংক্রিয়ভাবে ফরম্যাটিংয়ের জন্য কাজ করে।
উদাহরণ:
from babel.numbers import format_currency
formatted_price = format_currency(12345.67, 'USD', locale='en_US')
print(formatted_price) # $12,345.67
এখানে, Babel ব্যবহার করে ডলার ফরম্যাটে মুদ্রার সঠিক রূপান্তর প্রদর্শন করা হয়েছে।
সারাংশ
Localization TurboGears অ্যাপ্লিকেশনে খুবই গুরুত্বপূর্ণ, বিশেষ করে যখন আপনি বিভিন্ন ভাষা এবং সংস্কৃতির ইউজারদের জন্য অ্যাপ্লিকেশন তৈরি করছেন। TurboGears-এ Localization বাস্তবায়ন করার সময়, gettext, Babel, formatting, language selection, এবং dynamic content translation ব্যবহার করার মাধ্যমে আপনি একটি ইন্টারন্যাশনাল অ্যাপ্লিকেশন তৈরি করতে পারেন। সঠিকভাবে Localization করতে গেলে আপনাকে বিভিন্ন ভাষার কনফিগারেশন, অনুবাদ এবং ফরম্যাটিং এর ব্যাপারে সঠিক ব্যবস্থা নিতে হবে, এবং সেগুলোর টেস্টিং নিশ্চিত করতে হবে যাতে আন্তর্জাতিক ব্যবহারকারীরা অ্যাপ্লিকেশনটি সুবিধাজনকভাবে ব্যবহার করতে পারে।
Read more