با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن . در بخش قبلی به چگونگی تغییر دادن تنظیمات زمان اجرای برنامه،اشاره کردیم. برنامه اندروید پس از طراحی شدن، باید در محل های مختلف روی دستگاه های مختلف نصب و بصورت محلی اجرا شود. برای این منظور دراین بخش ما بهترین روش ها را، برای محلی سازی برنامه ها در Android Studio را، برای شما ارائه می کنیم.
شما از قبل باید زبان جاوا را بدانید. و با مفاهیم بارگزاری منابع اندروید، مفاهیم توسعه و…آشنایی داشته باشید.
منابع یا resource ها، شامل طراحی ها، صداها، گرافیک و … می شود. که هرکدام در دستگاههای مختلف، متفاوت عمل می کند.
همانطور که در بخش های قبلی نیز اشاره شد باید resource هایی را نیز به عنوان جایگزین در برنامه ، مشخص کنید.
هنگامیکه برنامه در دستگاه متفاوتی اجرا شود از منابع جایگزین برای اجرا شدن در آن دستگاه استفاده می کند.
البته مطالب فوق جهت اطلاع و یادآوری بیان شده و محور اصلی این بحث درباره محلی سازی برنامه است.
متن پیش فرض برنامه در شاخه ی res/values/strings.xml
قرار می گیرد.
متن تعریف شده در res/values/strings.xml
از زبان پیش فرض برنامه استفاده می کند.
برخی از منابع پیش فرض برنامه:
res/drawable/
(برای فایل های گرافیکی برنامه استفاده می شود.)res/layout/
(فایل های XML که طراحی برنامه را توصیف می کند را تعریف می کند.)res/anim/
(انیمیشن های برنامه را در فولدر<res/anim-
<qualifiers
تعریف می کند.)res/xml/
(کد XML برنامه را در فولدر <res/xml-<qualifiers
تعریف می کند.)res/raw/
(اگر برنامه شما دارای <res/raw-<qualifiers
باشد لازم است.)بخش بزرگی از محلی سازی به تعریف متن جایگزین برای زبان های مختلف مربوط می شود.
در بعضی موارد نیاز است. که شما گرافیک صدا و طرح های جایگزین را نیز برای تعریف resource محلی، ارائه دهید.
برای تعریف resource جایگزین برای زبان های دیگر، می توانید از qualifier استفاده کنید. که قبلا به آن اشاره کردیم.
مثال:
اگر شما یک برنامه با زبان پیش فرض انگلیسی اشته باشید. و بخواهید متن برنامه ی خود را به زبان فرانسه و ژاپنی محلی کنید، بصورت زیر عمل کنید:
ابتدا یک فایل strings.xml
ایجاد کرده و هر زبان را در دایرکتوری جداگانه ای تعریف کنید:
۱- res/values/strings.xml
: شامل متن انگلیسی برای تمام رشته های برنامه است. که شامل title
می شود.
۲- res/values-fr/strings.xml
: شامل متن فرانسه برای تمام رشته های برنامه است. که شامل title
می شود.
۳- res/values-ja/strings.xml
: شامل متن ژاپنی برای تمام رشته های برنامه است. که شامل title
می شود.
چیزی که در زمان اجرا اتفاق می افتد:
title
را از مسیر res/values/strings.xml
، فراخوانی می کند.title
را از مسیر res/values-fr/strings.xml
فراخوانی می کند.اگر چند دایرکتوری resource با دستگاه مطابقت داشته باشد، اندروید معمولا resource محلی را در اولویت قرار می دهد.
مثال:
فرض کنیم که یک برنامه دارای یک resource پیش فرض گرافیک و دو resource گرافیک دیگر است. که برای دستگاههای مختلف، تعریف شده است:
res/drawable/
: شامل گرافیک های پیش فرض است.res/drawable-small-land-stylus/
: شامل گرافیک هایی برای صفحه نمایش QVGA است.res/drawable-ja/
: شامل گرافیک های برای استفاده های ژاپنی است.اگر برنامه روی دستگاهی به منظور استفاده ژاپنی نصب شود. اطلاعات گرافیک برنامه از res/drawable-ja/
فراخوانی می شود.
اگر برنامه شما با زبان جاوا نوشته شده از ساختار R.resource_type.
resource_name
برای اشاره به resource ها استفاده کنید
برای دریافت اطلاعات بیشتر بخش دسترسی به resource در اندروید را مطالعه کنید.
بهتر است رشته های خود را در فایل strings.xml
برای آسان شدن بروزرسانی و محلی سازی، قرار دهید.
رشته هایی که در فایل strings.xml
قرار گرفته باشد در صورت لزوم به راحتی استخراج شده و قابل استفاده است.
و در صورتی که تصاویر برنامه شما شامل متن است، آن متن را در فایل strings.xml
قرار دهید.
همانطور که رشته های خود را در فایل strings.xml
قرار می دهید. آن ها را در برنامه در دسترس قرار دهید. چراکه برای مترجم، ارزشمند است.
همچنین به شما کمک می کند که رشته های خود را بهتر مدیریت کنید.
مثال:
1 2 | <!-- The action for submitting a form. This text is on a button that can fit 30 chars --> <string name="login_submit_button">Sign in</string> |
ممکن است متن شامل بخشی یا عبارتی مانند قطعه کد،یک حفره در برنامه یا یک نماد خاص باشد که نباید ترجمه شود.
برای مشخص مردن بخشی از متن که نباید ترجمه شود باید از تگ <xliff:g>
استفاده کنید.
مثال:
در این مثال با استفاده از تگ <xliff:g>
مشخص می کنیم که کاراکتر ” $۱%” در متن نباید ترجمه شود:
1 2 3 | <string name="countdown"> <xliff:g id="time" example="5 days">%1$s</xliff:g>until holiday </string> |
در ادامه به مثال های بیشتری اشاره کرده ایم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <!-- Example placeholder for a special unicode symbol --> <string name="star_rating">Check out our 5 <xliff:g id="star">\u2605</xliff:g> </string> <!-- Example placeholder for a for a URL --> <string name="app_homeurl"> Visit us at <xliff:g id="application_homepage">http://my/app/home.html</xliff:g> </string> <!-- Example placeholder for a name --> <string name="prod_name"> Learn more at <xliff:g id="prod_gamegroup">Game Group</xliff:g> </string> <!-- Example placeholder for a literal --> <string name="promo_message"> Please use the "<xliff:g id="promotion_code">ABCDEFG</xliff:g>" to get a discount. </string> ... </resources> |
برای جستجوی resource های محلی در زبان جاوا از کد نمونه زیر استفاده کنید:
1 | String locale = context.getResources().getConfiguration().locale.getDisplayName(); |
در ادامه سری آموزشهای آندروید، در این بخش، ما شما را با چگونگی محلی سازی برنامه ها در Android Studio ، آشنا کردیم. امیدواریم که این آموزش، مورد توجه و رضایت شما قرار گرفته باشد.