یاد بگیرید چگونه بینالمللیسازی (i18n) یکپارچه را در اپلیکیشنهای Next.js خود برای دستیابی به مخاطبان جهانی پیادهسازی کنید. این راهنما مسیریابی، ترجمه محتوا و بهترین شیوهها را پوشش میدهد.
بینالمللیسازی در Next.js: ساخت اپلیکیشنهای چندزبانه برای مخاطبان جهانی
در دنیای متصل امروز، ساخت اپلیکیشنهایی که به مخاطبان جهانی خدمات ارائه میدهند دیگر یک امر تجملی نیست، بلکه یک ضرورت است. Next.js، فریمورک قدرتمند ریاکت، ویژگیهای قوی برای پیادهسازی بینالمللیسازی (i18n) فراهم میکند و به شما امکان میدهد اپلیکیشنهای چندزبانهای بسازید که تجربهای بومیسازی شده برای کاربران در سراسر جهان ارائه میدهند. این راهنمای جامع شما را با مفاهیم، تکنیکها و بهترین شیوههای ضروری برای ساخت اپلیکیشنهای بینالمللیشده با Next.js آشنا میکند.
درک بینالمللیسازی و بومیسازی
قبل از پرداختن به جزئیات i18n در Next.js، بیایید اصطلاحات کلیدی را روشن کنیم:
- بینالمللیسازی (i18n): فرآیند طراحی و توسعه یک اپلیکیشن بهگونهای که بتوان آن را بهراحتی با زبانها و مناطق مختلف تطبیق داد، بدون اینکه نیاز به تغییرات مهندسی داشته باشد. این شامل انتزاعی کردن متن، قالببندی و سایر عناصر وابسته به منطقه (locale) است.
- بومیسازی (l10n): فرآیند تطبیق یک اپلیکیشن با یک زبان و منطقه خاص. این شامل ترجمه متن، تنظیم فرمتهای تاریخ و زمان، نمادهای ارز و موارد دیگر است.
در اصل، i18n اپلیکیشن شما را برای بومیسازی آماده میکند. با جدا کردن عناصر وابسته به زبان از کد اصلی، بومیسازی اپلیکیشن برای بازارهای مختلف آسانتر میشود.
چرا بینالمللیسازی را در Next.js پیادهسازی کنیم؟
پیادهسازی i18n در اپلیکیشن Next.js شما مزایای بیشماری دارد:
- دسترسی گستردهتر: با ارائه محتوا به زبان ترجیحی کاربران، به مخاطبان وسیعتری دست پیدا کنید.
- تجربه کاربری بهتر: تجربهای شخصیتر و جذابتر برای کاربران در مناطق مختلف ارائه دهید.
- سئوی بهبودیافته: با ارائه محتوای بومیسازی شده که مناطق جغرافیایی خاصی را هدف قرار میدهد، بهینهسازی موتور جستجو (سئو) را بهبود بخشید.
- افزایش نرخ تبدیل: با ارائه اطلاعات به زبان مادری کاربر، اعتماد و درک را تقویت کرده و نرخ تبدیل را افزایش دهید.
- حضور جهانی برند: با نشان دادن تعهد به فراگیری و توجه به مخاطبان متنوع، حضور برند جهانی قویتری ایجاد کنید.
ویژگیها و پیکربندی i18n در Next.js
Next.js از طریق ویژگیهای مسیریابی و مدیریت محتوای خود، پشتیبانی داخلی برای i18n ارائه میدهد. در ادامه، تفکیکی از ویژگیهای مهم ارائه شده است:
۱. پیکربندی i18n در فایل next.config.js
پیکربندی اصلی i18n در فایل next.config.js
قرار دارد. در اینجا یک نمونه آورده شده است:
/** @type {import('next').NextConfig} */
const nextConfig = {
i18n: {
locales: ['en', 'es', 'fr'], // آرایهای از لوکیلهای پشتیبانی شده (کدهای زبان)
defaultLocale: 'en', // لوکیل پیشفرض برای استفاده
localeDetection: true, // فعال/غیرفعال کردن تشخیص خودکار لوکیل بر اساس تنظیمات مرورگر (اختیاری)
// domains: [
// {
// domain: 'example.com',
// defaultLocale: 'en',
// },
// {
// domain: 'example.es',
// defaultLocale: 'es',
// },
// ],
},
}
module.exports = nextConfig;
توضیح:
locales
: آرایهای حاوی کدهای زبان (مثلاً'en'
برای انگلیسی،'es'
برای اسپانیایی،'fr'
برای فرانسوی) زبانهای پشتیبانی شده توسط اپلیکیشن شما. حتماً از کدهای زبان ISO 639-1 برای هماهنگی پیروی کنید.defaultLocale
: زبان پیشفرضی که اپلیکیشن شما استفاده خواهد کرد. این زبانی است که در صورت عدم مشخص شدن زبان دیگر در URL یا تشخیص از تنظیمات مرورگر کاربر، نمایش داده میشود. زبانی را انتخاب کنید که نماینده مخاطبان اصلی شما باشد.localeDetection
: یک مقدار بولی که کنترل میکند آیا Next.js بهطور خودکار زبان ترجیحی کاربر را بر اساس تنظیمات مرورگرش تشخیص میدهد یا خیر. اگر رویtrue
تنظیم شود، Next.js سعی میکند کاربر را به نسخه زبان مناسب سایت شما هدایت کند.domains
(اختیاری): آرایهای که به شما امکان میدهد لوکیلها را به دامنههای خاصی مرتبط کنید. این برای زمانی مفید است که دامنههای جداگانهای برای زبانهای مختلف دارید (مثلاًexample.com
برای انگلیسی،example.es
برای اسپانیایی).
۲. مسیریابی با پیشوندهای لوکیل
Next.js بهطور خودکار مسیرها را با لوکیل پیشوندگذاری میکند. برای مثال، اگر صفحهای در آدرس /about
داشته باشید و لوکیل 'es' (اسپانیایی) باشد، URL به /es/about
تبدیل میشود. این کار نسخههای زبانی مختلف صفحات را فعال کرده و به موتورهای جستجو امکان میدهد محتوا را برای هر لوکیل ایندکس کنند. فریمورک هدایت مجدد و مسیریابی را برای شما مدیریت میکند.
۳. استفاده از هوک `useRouter`
هوک `useRouter` از `next/router` دسترسی به لوکیل فعلی و سایر اطلاعات مسیریابی را فراهم میکند.
import { useRouter } from 'next/router';
function MyComponent() {
const router = useRouter();
const { locale, locales, defaultLocale } = router;
return (
Current locale: {locale}
Available locales: {locales.join(', ')}
Default locale: {defaultLocale}
);
}
export default MyComponent;
شیء `router` ویژگیهای کلیدی زیر را ارائه میدهد:
locale
: لوکیل انتخاب شده فعلی (مثلاً 'en'، 'es'، 'fr').locales
: آرایهای از تمام لوکیلهای پشتیبانی شده که در `next.config.js` تعریف شدهاند.defaultLocale
: لوکیل پیشفرض تنظیم شده در `next.config.js`.asPath
: مسیری که در مرورگر نمایش داده میشود، شامل پیشوند لوکیل (مثلاً/es/about
).pathname
: مسیر بدون پیشوند لوکیل (مثلاً/about
).
استراتژیهای ترجمه محتوا
هنگامی که اپلیکیشن Next.js خود را برای i18n پیکربندی کردید، باید استراتژیهایی برای ترجمه محتوای خود پیادهسازی کنید. در اینجا چندین رویکرد محبوب آورده شده است:
۱. استفاده از یک سیستم مدیریت ترجمه اختصاصی (TMS)
برای پروژههای بزرگ با زبانهای زیاد، استفاده از یک TMS به شدت توصیه میشود. گزینههای محبوب عبارتند از:
- Phrase: یک TMS مبتنی بر ابر با یکپارچهسازی برای پلتفرمهای مختلف، از جمله Next.js. ویژگیهای همکاری و گردشکارهای خودکار را ارائه میدهد.
- Localize: یک TMS مبتنی بر ابر دیگر که از طیف گستردهای از فرمتهای فایل پشتیبانی میکند و ویژگیهای مدیریت ترجمه را فراهم میکند.
- Crowdin: یک TMS قدرتمند که در جامعه متنباز بسیار محبوب است و بهخوبی با Next.js یکپارچه میشود و به تیمها اجازه میدهد محتوا را بهطور کارآمد ترجمه کنند.
مزایا:
- مدیریت متمرکز ترجمه.
- ویژگیهای همکاری برای مترجمان.
- خودکارسازی گردشکارهای ترجمه.
- یکپارچهسازی با گردشکار توسعه شما.
۲. ایجاد فایلهای ترجمه JSON
برای پروژههای کوچکتر، استفاده از فایلهای JSON برای ذخیره ترجمهها یک روش ساده و مؤثر است.
ساختار پوشه نمونه:
/src
├── locales
│ ├── en.json
│ └── es.json
├── components
│ └── MyComponent.js
└── pages
└── index.js
نمونه `en.json`:
{
"greeting": "Hello, world!",
"welcomeMessage": "Welcome to our website."
}
نمونه `es.json`:
{
"greeting": "¡Hola, mundo!",
"welcomeMessage": "Bienvenido a nuestro sitio web."
}
نمونه `MyComponent.js`:
import { useRouter } from 'next/router';
import en from '../locales/en.json';
import es from '../locales/es.json';
function MyComponent() {
const { locale } = useRouter();
const t = locale === 'es' ? es : en;
return (
{t.greeting}
{t.welcomeMessage}
);
}
export default MyComponent;
این رویکرد انعطافپذیری را فراهم میکند و برای پروژههای کوچکتر ساده است. بهطور کلی بهروزرسانی و نگهداری آن آسان است.
۳. استفاده از یک کتابخانه ترجمه
چندین کتابخانه جاوا اسکریپت، ترجمه محتوا را در کامپوننتهای ریاکت شما ساده میکنند.
next-i18next
: یک کتابخانه محبوب که بهطور خاص برای Next.js طراحی شده است. بهخوبی با این فریمورک یکپارچه میشود و ویژگیهایی مانند رندر سمت سرور (SSR) و ترجمه سمت کلاینت را فراهم میکند.react-i18next
: یک کتابخانه i18n عمومی برای ریاکت. میتوانید آن را در اپلیکیشنهای Next.js خود استفاده کنید، هرچند ممکن است نسبت بهnext-i18next
به پیکربندی بیشتری نیاز داشته باشد.
نمونه با next-i18next
(نصب: npm install next-i18next i18next react-i18next
):
یک فایل پیکربندی i18n ایجاد کنید (مثلاً i18n.js
در پوشه ریشه پروژه):
// i18n.js
import { createServerSideHelpers } from 'next-i18next'
import { i18n } from './next-i18next.config'
export function initI18next(req, res, namespaces = ['common']) {
const helpers = createServerSideHelpers(
req,
res,
i18n,
namespaces
)
return helpers
}
export { appWithTranslation } from 'next-i18next'
export { i18n }
پیکربندی Next.js خود را برای next-i18next ایجاد کنید.
// next-i18next.config.js
const { i18n } = require('./next-i18next.config');
/** @type {import('next').NextConfig} */
const nextConfig = {
reactStrictMode: true,
i18n: {
defaultLocale: 'en',
locales: ['en', 'es', 'fr'],
},
// سایر پیکربندیها
}
module.exports = nextConfig
پیکربندی و ایمپورت ترجمه را به فایل `_app.js` خود اضافه کنید:
import { appWithTranslation } from 'next-i18next';
import '../styles/globals.css';
function MyApp({ Component, pageProps }) {
return ;
}
export default appWithTranslation(MyApp);
یک پوشه ایجاد کرده و آن را با لوکیلهای ترجمههای خود پر کنید.
/public
└── locales
├── en
│ └── common.json
├── es
│ └── common.json
└── fr
└── common.json
نمونه en/common.json:
{
"greeting": "Hello, world!",
"welcomeMessage": "Welcome to our website."
}
استفاده از ترجمه در یک کامپوننت:
import { useTranslation } from 'next-i18next';
function MyComponent() {
const { t } = useTranslation('common');
return (
{t('greeting')}
{t('welcomeMessage')}
);
}
export default MyComponent;
این مثال از هوک `useTranslation` برای بازیابی ترجمهها بر اساس لوکیل فعلی استفاده میکند.
مدیریت مسیرهای پویا و تولید سایت استاتیک (SSG)
بینالمللیسازی هنگام کار با مسیرهای پویا (مانند پستهای وبلاگ، صفحات محصول) و تولید سایت استاتیک (SSG) پیچیدهتر میشود.
۱. مسیرهای پویا (مثلاً /blog/[slug])
برای مسیرهای پویا، باید مسیرهای صحیح را برای هر لوکیل در زمان ساخت با استفاده از `getStaticPaths` تولید کنید. این تابع آرایهای از مسیرهایی را برمیگرداند که Next.js باید آنها را از قبل رندر کند.
export async function getStaticPaths() {
const paths = [];
const locales = ['en', 'es', 'fr'];
const posts = await fetchPosts(); // واکشی دادههای پستهای وبلاگ
posts.forEach(post => {
locales.forEach(locale => {
paths.push({
params: {
slug: post.slug,
},
locale,
});
});
});
return {
paths,
fallback: false, // یا 'blocking' اگر میخواهید حالت بارگذاری نشان دهید
};
}
export async function getStaticProps({ params, locale }) {
const post = await getPostBySlug(params.slug, locale);
return {
props: {
post,
},
};
}
توضیح:
getStaticPaths
: این تابع بر روی پستهای وبلاگ شما پیمایش میکند و یک مسیر برای هر پست و هر لوکیل ایجاد میکند. شیءparams
حاوی پارامترهای مسیر است (مثلاً اسلاگ پست وبلاگ).locale
: این پارامتر لوکیل فعلی را فراهم میکند و به شما امکان میدهد محتوای ترجمه شده برای لوکیل خاص را واکشی کنید.fallback
: تعیین میکند که Next.js چگونه مسیرهای تعریف نشده در `getStaticPaths` را مدیریت کند. `fallback: false` صفحات 404 را برای مسیرهای تعریف نشده ایجاد میکند. `fallback: 'blocking'` صفحات را بر اساس تقاضا از قبل رندر میکند.
۲. تولید سایت استاتیک (SSG) با `getStaticProps`
در `getStaticProps`، میتوانید محتوای ترجمه شده را بر اساس پارامتر `locale` واکشی کنید.
export async function getStaticProps({ params, locale }) {
// واکشی محتوا بر اساس لوکیل و پارامترها
const { post } = await getPostBySlug(params.slug, locale);
return {
props: {
post,
},
};
}
تابع `getPostBySlug` باید محتوای ترجمه شده برای اسلاگ و لوکیل داده شده را واکشی کند، که میتواند از فایلهای ترجمه، پایگاه داده یا یک CMS بازیابی شود.
۳. رندر سمت سرور (SSR) با `getServerSideProps`
برای محتوایی که نیاز به واکشی در زمان درخواست دارد، از `getServerSideProps` استفاده کنید. این برای محتوایی که به طور مکرر تغییر میکند یا برای هر کاربر شخصیسازی شده است، مفید است.
export async function getServerSideProps({ params, locale, req, res }) {
// واکشی دادهها بر اساس لوکیل و پارامترها (مثلاً از یک پایگاه داده)
const data = await fetchData(params.slug, locale);
return {
props: {
data,
},
};
}
بهترین شیوهها برای بینالمللیسازی در Next.js
پیروی از این بهترین شیوهها به شما کمک میکند تا اپلیکیشنهای چندزبانه قوی، قابل نگهداری و کاربرپسند بسازید:
- زود برنامهریزی کنید: بینالمللیسازی را از ابتدای پروژه خود در نظر بگیرید. پیادهسازی آن از ابتدا بسیار آسانتر از اضافه کردن آن در مراحل بعدی است.
- محتوا را از کد جدا کنید: تمام متون قابل ترجمه را در فایلهای جداگانه (مانند فایلهای JSON یا یک TMS) ذخیره کنید و از هاردکد کردن متن به طور مستقیم در کامپوننتهای خود خودداری کنید.
- از یک سیستم مدیریت ترجمه (TMS) استفاده کنید: برای پروژههای بزرگتر، یک TMS میتواند فرآیند ترجمه را ساده کرده و همکاری را بهبود بخشد.
- بهطور کامل تست کنید: اپلیکیشن خود را در تمام زبانهای پشتیبانی شده تست کنید تا از ترجمههای دقیق، قالببندی صحیح و رندر مناسب در مرورگرها و دستگاههای مختلف اطمینان حاصل کنید. روی دستگاههای واقعی تست کنید، نه فقط شبیهسازها.
- زبانهای راست به چپ (RTL) را در نظر بگیرید: اگر از زبانهایی مانند عربی یا عبری پشتیبانی میکنید، اطمینان حاصل کنید که طراحی و چیدمان شما جهت متن راست به چپ را پشتیبانی میکند. Next.js این کار را به طور خودکار انجام نمیدهد، بنابراین به CSS یا راهحلهای دیگر نیاز است.
- قالببندی تاریخ و زمان را مدیریت کنید: از کتابخانهها یا توابع داخلی برای قالببندی تاریخ و زمان مطابق با لوکیل کاربر استفاده کنید. Moment.js و date-fns دو کتابخانه محبوب و مفید هستند.
- قالببندی اعداد و ارز را مدیریت کنید: اعداد و نمادهای ارز را بر اساس لوکیل کاربر به درستی قالببندی کنید.
- سئو را بهینهسازی کنید: از متا تگهای مخصوص زبان (
hreflang
) برای کمک به موتورهای جستجو در ایندکس کردن صحیح محتوای خود استفاده کنید. کدهای زبان را در URLهای خود بگنجانید. - تجربه کاربری را در اولویت قرار دهید: روشی واضح و بصری برای تغییر زبان توسط کاربران فراهم کنید. ارائه تشخیص خودکار زبان بر اساس تنظیمات مرورگر را در نظر بگیرید.
- بهروز بمانید: نسخه Next.js و کتابخانههای i18n خود را بهروز نگه دارید تا از آخرین ویژگیها و وصلههای امنیتی بهرهمند شوید.
- دسترسیپذیری (a11y) را در نظر بگیرید: اطمینان حاصل کنید که محتوای ترجمه شده شما برای کاربران دارای معلولیت قابل دسترس است. متن جایگزین برای تصاویر ارائه دهید و از ویژگیهای ARIA مناسب استفاده کنید. برای تست از صفحهخوانها استفاده کنید.
ملاحظات سئو برای وبسایتهای بینالمللیشده
بهینهسازی وبسایت بینالمللیشده شما برای موتورهای جستجو برای جذب ترافیک ارگانیک از سراسر جهان ضروری است. در اینجا برخی از بهترین شیوههای کلیدی سئو آورده شده است:
- تگهای
hreflang
: تگهایhreflang
را در<head>
HTML خود پیادهسازی کنید تا به موتورهای جستجو در مورد زبان و تنوعهای منطقهای محتوای خود اطلاع دهید. این برای سئو حیاتی است. برای مثال:<link rel="alternate" hreflang="en" href="https://example.com/en/" />
و<link rel="alternate" hreflang="es" href="https://example.com/es/" />
- URLهای مخصوص زبان: از کدهای زبان در URLهای خود استفاده کنید (مثلاً
/en/about
،/es/acerca-de
). این کار به وضوح زبان محتوا را هم به کاربران و هم به موتورهای جستجو نشان میدهد. - محتوای بومیسازی شده: محتوای خود را به صورت دقیق و طبیعی ترجمه کنید. ترجمههای ماشینی باید توسط یک فرد بومیزبان بازبینی شوند.
- عناوین و توضیحات متای بومیسازی شده: توضیحات متا و عناوین منحصربهفرد و جذابی برای هر زبان بنویسید تا نرخ کلیک در نتایج جستجو را بهبود بخشید.
- نقشههای سایت XML: نقشههای سایت XML ایجاد و ارسال کنید که شامل تمام نسخههای زبانی صفحات شما باشد.
- لینکسازی داخلی: از لینکهای داخلی مناسب بین نسخههای زبانی محتوای خود استفاده کنید.
- تحقیق کلمات کلیدی مخصوص کشور: تحقیق کلمات کلیدی را در هر زبان انجام دهید تا عباراتی را که کاربران در هر منطقه جستجو میکنند، شناسایی کنید.
مثال: ساخت یک وبلاگ چندزبانه ساده
بیایید یک مثال ساده از یک وبلاگ چندزبانه با استفاده از Next.js ایجاد کنیم. این یک تصویر ملموستر از نحوه اعمال مفاهیم مورد بحث در بالا ارائه میدهد.
۱. راهاندازی پروژه
یک پروژه جدید Next.js ایجاد کنید:
npx create-next-app my-multi-lang-blog
cd my-multi-lang-blog
۲. پیکربندی i18n (`next.config.js`)
/** @type {import('next').NextConfig} */
const nextConfig = {
reactStrictMode: true,
i18n: {
locales: ['en', 'es', 'fr'],
defaultLocale: 'en',
},
}
module.exports = nextConfig
۳. ایجاد فایلهای ترجمه
یک پوشه `locales` در دایرکتوری ریشه ایجاد کنید و فایلهای JSON زیر را اضافه کنید:
locales/en.json
:
{
"title": "Welcome to My Blog",
"postTitle": "My First Post",
"postContent": "This is the content of my first blog post."
}
locales/es.json
:
{
"title": "Bienvenido a mi Blog",
"postTitle": "Mi Primer Post",
"postContent": "Este es el contenido de mi primer publicación de blog."
}
locales/fr.json
:
{
"title": "Bienvenue sur Mon Blog",
"postTitle": "Mon Premier Article",
"postContent": "Ceci est le contenu de mon premier article de blog."
}
۴. ایجاد کامپوننت پست وبلاگ (مثلاً `components/BlogPost.js`)
import { useRouter } from 'next/router';
import en from '../locales/en.json';
import es from '../locales/es.json';
import fr from '../locales/fr.json';
function BlogPost() {
const router = useRouter();
const { locale } = router;
let translations;
switch (locale) {
case 'es':
translations = es;
break;
case 'fr':
translations = fr;
break;
default:
translations = en;
}
return (
{translations.postTitle}
{translations.postContent}
);
}
export default BlogPost;
۵. ایجاد صفحه اصلی (`pages/index.js`)
import { useRouter } from 'next/router';
import BlogPost from '../components/BlogPost';
import en from '../locales/en.json';
import es from '../locales/es.json';
import fr from '../locales/fr.json';
function HomePage() {
const router = useRouter();
const { locale, locales } = router;
let translations;
switch (locale) {
case 'es':
translations = es;
break;
case 'fr':
translations = fr;
break;
default:
translations = en;
}
return (
);
}
export default HomePage;
این مثال ساده، اصول بنیادین بینالمللیسازی در Next.js را به نمایش میگذارد. میتوانید این چارچوب پایه را گسترش دهید تا ویژگیهای پیچیدهتری مانند مسیرهای پویا و یکپارچهسازی با سیستمهای مدیریت ترجمه را شامل شود. بهبود لینکهای بالا با کامپوننت `Link` و افزودن ویژگی `locale` مناسب را در نظر بگیرید.
۶. اجرای اپلیکیشن
اپلیکیشن را با دستور زیر اجرا کنید:
npm run dev
اکنون میتوانید به وبلاگ خود در آدرسهای `http://localhost:3000` (انگلیسی)، `http://localhost:3000/es` (اسپانیایی) و `http://localhost:3000/fr` (فرانسوی) دسترسی پیدا کنید. باید ببینید که عنوان و محتوای پست وبلاگ بر اساس لوکیل انتخاب شده ترجمه شده است.
نتیجهگیری
Next.js مجموعهای جامع از ویژگیها را برای پیادهسازی بینالمللیسازی در اپلیکیشنهای وب شما فراهم میکند. با پیروی از اصول و تکنیکهای ذکر شده در این راهنما، میتوانید اپلیکیشنهای چندزبانهای بسازید که تجربیات بومیسازی شده را به کاربران در سراسر جهان ارائه میدهند. به یاد داشته باشید که استراتژی i18n خود را زود برنامهریزی کنید، روش ترجمه مناسب برای نیازهای خود را انتخاب کنید و تجربه کاربری را در اولویت قرار دهید. با برنامهریزی و اجرای دقیق، میتوانید اپلیکیشنهایی بسازید که با مخاطبان جهانی ارتباط برقرار کرده و فرصتهای جدیدی برای رشد ایجاد کنند. یادگیری مداوم، همگام بودن با آخرین نسخهها و بهترین شیوهها تضمین میکند که از ابزارها و فناوریهای خود به طور مؤثر استفاده میکنید.
با پیشرفت فناوری، انتظار میرود ویژگیهای پیشرفتهتری در زمینه i18n ظهور کنند. توانایی دستیابی به کاربران در فرهنگها و گروههای زبانی مختلف همچنان یک اولویت کلیدی برای توسعهدهندگان اپلیکیشن در سراسر جهان باقی خواهد ماند. بنابراین، تسلط بر اصول i18n یک مهارت ارزشمند است که ارزش شما را در چشمانداز توسعه جهانی امروز افزایش میدهد.