WordPress-Languages-wpmen.ir

گاهی برای شما پیش می آید که قالبی رو می سازید که می خواهید غیر از زبان خود زبان های دیگر را نیز پشتیبانی کند.چشم پوشی از دیگر زبان ها بسیار ساده است اما این یک عادت بسیار بد می باشد که ممکن است خرید های بسیاری از قالبتان را از دست دهید .(دقت کنید این پست درباره اینست که شما قالبی را بسازید که برای فروش به غیر از ۱ خریدار می باشد).

نکته توضیحاتی که میدهیم راجع به محتوای قالب به صورت پیشفرض است که معمولا متون sample یا نمونه را می آورد و محتوای سایت شما ممکن است هرچیزی باشد

از ۱۰ کشوری که "قالب وردپرس" را جستوجو می کنند فقط یکی از تنها یک زبان بومی انگلیسی (ایالات متحده آمریکا) است و ۹ تای دیگر با زبان دیگری هستند.آمار دیگری که می آید و بدانید از ۲۶۹ قالب در پایگاه وردپرس با برچسب آماده ترجمه 1500  قالب زده شده با زبان های مختلف

چگونه کار می کند

هنگامی که شما  یک قالب را می سازید معمولا  به سادگی  مثلا پیام خطاهای ۴۰۴ را در صفحه  404 یا برچسب هایی مانند نظرات و نویسندگان را hardcode می کنید یعنی پیام های دلخواه خود را می نویسید و برای تغییر آن ، آن ها را دوباره عوض می کنید. اگر کاربر  وردپرس شما  به عنوان مثال  آلمانی باشد  ، این قطعه از متن هنوز هم به زبان انگلیسی نمایش داده شود.راه حل آن اینست که از متونی که استفاده  می کنیم از یکی از ۴ تابعی که وردپرس برای این کار تعبیه شده اند استفاده کرده و از آنها  متون درست را   return یا  echo بگیریم. هنگامی که شما متون خود را با استفاده از این توابع فراخوانی می کنید یک فایل حاوی ترجمه همه می باشد که هنگام لود شدن بارگذاری می شود.مثلا به جای Our partners همراهان ما هنگام تنظیمات فارسی قلب می آید.

سه فایل های ترجمه که استفاده می کنیم وجود دارد:

.pot (Portable Object Template)

این یک فایل الگو است که شامل مرجع به هر رشته متن در موضوع  که نیاز به ترجمه است می باشد. این فایل حاوی هر گونه ترجمه می باشد. این یک فایل متنی است.

.po (Portable Object)

ساخته شده از فایل POT، شامل تمام منابع رشته ای به عنوان ترجمه  یک زبان خاص. این هم یک فایل متنی است که می تواند ویرایش شود.

.mo (Machine Object)

نسخه دودویی از فایل po. با استفاده از کد ماشین، فایل را می توان مورد استفاده قرار گیرد بسیار سریع تر از جایگزین متن ساده آن

 

مرحله ۱ چهار تابع مربوط به ترجمه  

هر یک از این  چهار تابع  نیاز به حداقل یکآرگومان می باشد شامل متنی برای ترجمه آن . توابع عبارتند از:

__()

(دو زیرخط) تابع پایه ای است که شما اکثریت  زمان از آن  استفاده  می کنید. متن زبان درست را بر می گرداند.(یعنی اگر فارسی بودید ، فارسی را و اگر انگلیسی بودید انگلیسی را)

_e()

همان () __ است که فقط به جای بازگرداندن متن آن را چاپ می کند.

_n()

برای متونی که  دارای پتانسیل جمع شدن دارند ، به عنوان مثال اگر شما نظرات را بخواهید نمایش  دهید ، ممکن است  خروجی یا "X نظرات " و یا "Xنظر " می باشد  بسته به چگونه بسیاری از نظرات که شما می خواهید نمایش دهید.

_x()

برای زمانی  مفید است که ترجمه کلمه بستگی به زمینه دارد. پست ممکن است معنی اسمی را  دهد یا یک معنی فعلی که به محتوا بستگی دارد.برای ترجمه بسیار مهم است که برای شناخت  اینکه ترجمه معنای دقیق تری داشته باشد. 


حال به مثال های هرکدام می پردازیم

__() & _e()

این ساده ترین تابع برای ترجمه  می باشد که  وردپرس ارائه کرده است . اجازه دهید یک نگاه یک نمونه از هر ۲ را نمایش دهیم:

 

<?php
if( is_single() ) { //If this is a "post"
    echo __( 'This is a post.' );
}
?>

 

<?php
if( is_single() ) { //If this is a "post"
    _e( 'This is a post.' );
}
?>

این دو تابع دقیقا یک کار را انجام می دهند.در متن "This is a post" که در دو کد بالا آمده  در صورت وجود در فایل mo. نتیجه را باز می گرداند.()e_ و ()__ فقط آرگومانی  را منتقل می کند که ما می خواهیم ترجمه کنیم.بحث دوم اختیاری در دسترس است و ما به که بعدا به آن می پردازیم.

تنها تفاوت بین این دو است ()__  نیاز به دستور echo دارد. اجازه دهید مثالی بزنیم که در آن() __ بهتر از ()e_ عمل می کند.

<?php
the_content( __( 'Click here to read more' ) );
?>

به جای عبور یک رشته به تابع  ()the_content ما از()__ استفاده می کنیم به طوری که متن را می توان ترجمه کرد.اگر ما از ()e_ در اینجا استفاده کرده بودیم شما متن Click here to read more را در سند به جای ()the_content (یا متن مربوط به پست) چاپ می کردید که باعث مشکلاتی می شود.


_n()

 

در قبل هم گفتیم که این تابع خاصیت جمع و مفرد بودن یک متنی که باید ترجمه شود را می گیرد که با نظرات بود که می خواهیم اگر تعداد نظرات جمع بود به طور مثال بنویسد ۱نظر یا نظرات :۳۴ نظر

در زیر ۲ نمونه که نمونه بالایی تابع دوم می باشد و مثال پایینی برای تابع ()n_ می باشد که برای وضوح مثال آن را می گوییم

 

<?php
if(get_comments_number() == 1) {
    _e( 'There is a comment' );
} else {
    _e( 'There are comments' );
}
?>
<?php
echo _n( 'There is a comment' , 'There are comments' , get_comments_number() );
?>

در تابع بالا  در حالت جمع  There are comments را چاپ کرده و در حالت مفرد There is a comment را چاپ می کند .پس  این تابع ۳ پارامتر دارد که اولی مفرد ، دومی جمع و سومی تعداد نظر و یا چیزی که ما میخواهیم به آن ارجاع دهیم. 



_x() & _ex()

 

حال بیایید درباره ترجمه یک فایل  pot. صحبت کنیم.و شما با یک ورودی "scroll" مواجه می شوید.آیا شما می خواهید یک تکه کاغذ رول شده را تفسیر کنید یا به سمت بالا یا پایین وب سایت حرکت کنید؟شما واقعا می توانید برای توصیف برخی از زمینه هایی  که  نیاز به ترجمه آن دارید  زمینه ای فراهم نمایید .

این توابع توانایی این کار را  با خصیصه اجباری دوم که از شما توضیحات کوتاه شده برای تشریح آن عبارت یا کلمه را می خواهد  به شما می دهند.مثال زیر را در نظر بگیرید.

<?php
echo _x( 'post link' , 'A link to the post' );
_ex( 'post link' , 'Submit a link' );
?>

 

مثال بالا تفاوت بین ()x_ و ()ex_ را نمایش می دهد.مانند e که با e_ است برای ساختن تابع چاپ خروجی به جای بازگشت آن.

برای هردوی آن اولین پارامتر متن ماست که می خواهیم ترجمه شود و دومی یک نظر یا یادداشت درباره ترجمه متنی که می خواهیم آن را بسازیم شفاف توضیح می دهد.


تکنیک های پیشرفته

اجازه دهید که یک وضعیت که در آن متن می خواهید برای تولید است از یک رشته متنی با نتیجه یک تابع یا مقدار یک متغیر در جایی در داخل آن قرار داده تشکیل شده است. شما ممکن است وسوسه به راست چیزی شبیه به این:

<?php
$color = the_color();
_e( "You have chosen the $color theme" );
?>

هنگامی که فایل pot. خود را نصب می کنید ویرایگشر POEdit این را نادیده خواهد گرفت برای اینکه نمی خواهد در بین یک جمله از یک متغیر استفاده کند.دلیل آن اینست که شما یک رشته ای را از متغیر You have chosen the $color theme  برای فایل pot. ارسال می کنید.اما زمانی که برای جستوجوی ترجمه برای  زمانی که اسکریپت اجرا شده باشد برای رشته ای که   You have chosen the $color theme  را پیدا نخواهد کرد.

<?php
$color = the_color();
echo __( 'You have chosen the ' ) . $color . __( ' theme.' );
?>

اسکریپت در حال حاضر قادر به ترجمه می باشد.اما برای ترجمه به خاطر اینکه جمله شکسته شده است مشکل می باشد.این جمله ممکن است که حتی  به بعضی زبان هایی که تا حد زیادی از لحاظ نحوی ُ‌ ترجمه نشود مانند زبان آلمانی که  در آن کلمه انتخاب  در پایان جمله می آید.شما نیاز به یک مشکل گشایی که این دو رشته را از هم جدا کند ُنیاز دارید و  اینکه "theme" بری همه نباید "theme" ترجمه شود.

راه حل آن اینست که از یک رشته متن واحد که دستور تک نقل قول می باشد.این برای زمانی که توابع() printf یا  ()sprintf فراخوانی می شوندمفید است.اجازه دهید کدی را که نیاز داریم مشاهده کنیم.

<?php
echo sprintf( __( 'You have chosen the %s theme.' ) , the_color() );
printf( __( 'You have chosen the %s theme.' ) , the_color() );
?>

 

این کار مشکلات قبلی ای که داشتیم را حل نمی کند اما این بسیار مرتب شده نسبت به حالت قبل می باشد و تنها با استفاده از یک خط کد می باشد.

اولین آرگومان های توابع ()printf یا ()sprintf رشته خروجی هستند که شامل حداقل یک نگه دارنده متن یا placeholder در یکی از موارد  %s که به معنی رشته وهر یک از دیگر آرگومان ها متغیرهایی که به داخل رشته اولیه قرار داده شده است.

تفاوت های بسیاری  از placeholder ای که شما می توانید درون یک رشته قرار دهید که شما یک لیست کامل از آن را در sprintf in the PHP manual مشاهده نمایید.

یادداشت : تفاوت بین ()printf و ()sprintf شبیه به ()e_ و ()__ می باشد.



مرحله ۲ تعریف POEdit

 

حالا که شما با موفقیت تمام  برچسب تمام  خروجی  متن خود را در قالب خود گذاشتید ، شما هم اکنون نیاز به جمع آوری این اطلاعات در  یک فایل POT. دارید.پوادیت برنامه فوق العاده است که به شما توانایی برای ایجاد فایل pot. را می دهد و همچنین استفاده آسان گرافیکی آن کار را برای ساخت فایل های po. بسیار ساده تر می کند.

اولین قدم اینست که به سایت http://www.poedit.net/download.php رفته و برنامه poedit را دانلود و نصب کنید.

توجه داشته باشید که برنامه poedit به صورت نسخه حرفه ای می باشد و شما باید آن را خریداری کنید.

هنگامی که poedit  نصب شده است، شما می توانید فایل POT. را ایجاد کنید. برای اینکار به File > New Catalog بروید. شما می توانید با یک جعبه محاوره ای  برای شما نمایش داده شده است ، برخی از اطلاعات اولیه مورد نیاز را که  معرفی شده اند وارد نمایید.

ملزومات نام و زبان/کشور پروژه در تب "Project Info" هستند.شما همچنین می توانید در قسمت Plural Forms اطلاعات زیر را وارد نمایید.

Plural Forms: nplurals=2; plural=n != 1;

poedit1

در تب paths یا مسیر ها ، مسیر مقصدی  که می خواهید فایل های POT.  مربوطه که  در آن ذخیره شوند  را مشخص می کنید.برای مثال اگر شما فایل pot. را در ریشه فوتر قالب خود وارد کنید، اولویت اول می باشد و  اگر شما فایل pot. را در پوشه زبان واقع در ریشه قالب  وارد کنید اولویت دوم قرار می گیرد.

 poedit2

در ادامه شما نیاز دارید که کلید واژه ها را برای اسکن کردن فایل ها به فایل POEdit بفهمانید .متن های زیر را وارد کنید

  • __
  • _e
  • _n:1,2
  • _x:1,2c
  • _ex:1,2c

 

پسوند 1,2: به POEdit  می گوید که این کلمات کلیدی دارای دو بخش به آنها می باشند.به طور پیش فرض، آرگومان دوم جمع است مگر اینکه شما شامل c که به معنی آرگومان دوم یک نظر است. 

poedit3

بسیار خب .بر روی OK کلیک کنید و یک مسیر برای ذخیره فایل pot. قرار دهید.به یاد داشته باشید که  مسیر شما قبلا تعریف شده است.POEdit فایل های شما را اسکن می کند و تمام رخداد های توابع  ترجمه را پیدا می کند و آنها را بدون ترجمه در فایل  pot. شما ذخیره می کند.

اگر شما می خواهید یک پشتیبانی خالی برای ترجمه بین المللی انجلم دهید شما می توانید فایل pot. خود را با قالب خود در همین مرحله  رها کنید.

با این حال اگر شما قادر به ترجمه تم خود به زبان دیگری می باشید، شما قالب خود را با ترجمه های premade که در مرحله ۳ توصیف می شود می توانید انجام دهید.



مرحله ۳ ترجمه و ساخت فایل های po . خود

poedit4

  1. یک لیست از تمام رشته های متنی که می خواهید ترجمه شوند
  2. رشته جاری که می خواهد ترجمه شود
  3. ترجمه شما برای رشته 

poedit5

  1. مفرد و جمع از رشته فعلی
  2. تب هایی برای سوئیچ بین مفرد و جمع ترجمه خود
  3. ترجمه شما 

هنگامی که شما همه رشته ها در فایل pot. گذاشتید شما می توانید فایل خود را با po.  ذخیره کنید.هر رشته ای که شما برای ترجمه فراهم نکرده اید یک ترجمه اصلی که شما آن را  در قالب اصلی  گذاشته اید برای دیگران  در قالب شما نمایش داده خواهد شد.

نام فایل po. شما حیاتی می باشد.Gettext ها از  استاندارد مخفف سازی  ISO 639 استفاده می کنند و برای  محلی ها از استاندارد  ISO 3166 استفاده می کند.اگر ترجمه خود را در زبان انگلیسی آمریکایی نوشته اید،برای مثال  نام فایل خود را شبیه en-US.po باید قرار دهید.بزرگی حروف در اینجا مهم است.برای یک لیست کامل از کدهای زبان و کشور، از این دو لینک زیر استفاده کنید.

هنگام ذخیرع سازی POEdit یک فایل mo. را به طور خودکار در کنار فایل po. ذخیره می کند.توصیه می شود که شما هر سه فایل ترجمه خود را با قالب خود قرار دهید که دیگران ترجمه های خود را بسازند و ویرایش ترجمه های موجود خود را به راحتی انجام دهند.

ما در زیر فایل poedit حرفه ای را برای شما می گذاریم که بتوانید آن را دانلود کرده و کار کنید.

poedit



مرحله ۴ راه اندازی وردپرس 

بیایید در باره آنچه تا کنون انجام داده ایم را بررسی کنیم.شما به وردپرس تمام متن هایی که می خواهید ترجمه کنید را گفته اید و همه رشته هایی را که می خواهید جایگزین کنید در داخل یک فایل pot. که می خواهید روی یک فایل po. و mo. ترجمه شود را  ، از برنامه POEdit استفاده می کنید.این فایل ها پس از آن در فایل تم گنجانده می شوند.

مرحله نهایی این است که فایل های فشرده تم خود را،نصب کنید و اجازه دهید وردپرس مطمئن شود که زبان mo.  فایلی شما می خواهید آن استفاده کنید تشخیص دهد.کافیست در wp-config.php که  واقع در ریشه اصلی وردپرس است کد زیر را وارد نمایید.

/**
 * WordPress Localized Language, defaults to English.
 *
 * Change this to localize WordPress. A corresponding MO file for the chosen
 * language must be installed to wp-content/languages. For example, install
 * de_DE.mo to wp-content/languages and set WPLANG to 'de_DE' to enable German
 * language support.
 */
define('WPLANG', '');

در WPLANG می توانید زبان خود را وارد نمایید.اگر وجود داشته باشد که آن را تغییر می دهید و اگر وجود نداشته باشد آن را در فایل خود قرار می دهید.

برای مثال اگر زبان شما آلمانی است کد زیر را قرار می دهید

define('WPLANG', 'de_DE');

دقت داشته باشید که برای اینکه ترجمه های قالب شما در دست دیگران قرار گیرد فایل های po. و mo.  در ریشه قالب خود قرار دهید.

منبع:http://code.tutsplus.com/tutorials/translating-your-theme–wp-25014

تاریخ آخرین بروزرسانی : ۱۰ خرداد ۱۳۹۵
میلاد میلادی

باور هایت را که پرورش دهی به هرچیزی دست خواهی یافت.