نکاتی دربارۀ فایل strings.xml

نویسنده : سید ایوب کوکبی ۲۶ خرداد ۱۳۹۸
نکاتی دربارۀ فایل strings.xml

Strings.xml یکی از فایل‌های مهمِ اندرویدی است که احتمالاً بارها از آن در برنامه‌های خود استفاده کرده‌اید. در این مطلب نگاه دقیق‌تری به این فایل می‌اندازیم تا با شناخت و آگاهی بیشتری بتوانید از قابلیت‌هایش در برنامه‌های خود استفاده کنید.

کاربرد strings.xml

هدف اصلی از این فایل، جلوگیری از تکرار رشته‌ها در صفحات مختلف است. در واقع این فایل به وجود آمده تا تمامی رشته‌های برنامه که بعداً به دلایلی (مثلاً چند زبانه کردن، تصحیح اشکالات املایی و ویرایشی و …) تغییر خواهند کرد تنها از یک مکان واحد و برای یکبار تغییر داده شوند. مثلاً فرض کنید در صفحۀ ورود و ثبت‌نام از پیغام لودینگ یکسانی استفاده کرده‌اید. این رشته را می‌توانید در فایل strings.xml تحت نام loading ذخیره کنید و هر جایی از کد با ارجاع به نام محتوایش را نشان دهید.

بعدها اگر به هر دلیلی لازم باشد این رشته را تغییر دهید، فقط همینجا اصلاح می‌کنید. بدین ترتیب هر جایی از کد عبارت loading را ارجاع داده باشید با رشتۀ جدید بروزرسانی می‌شود و دیگر نیازی نیست خودتان به تک تک صفحات مراجعه و رشته را بروزرسانی کنید. این کار ریسک از قلم افتادن تغییرات یا اشتباه هنگام اصلاح رشته‌ها را کاهش داده و از همه مهم‌تر سرعت انجام کار را بالا می‌برد.

یکی دیگر از کاربردهای مهم فایل strings.xml چند زبانه کردن برنامه است. در صورتی که بخواهید برنامۀ شما علاوه بر انگلیسی به زبان دیگری مثلاً اوکراینی هم منتشر شود. در فولدر مجزایی با لحاظ کردن پسوند زبان می‌توانید این کار را انجام دهید.

همانطور که می‌بینید در نسخۀ انگلیسی که به صورت پیش‌فرض در فولدر res/values/strings.xml قرار دارد دو کلمۀ Yes به کار رفته ولی اگر بخواهیم همین رشته‌ها را به زبان اوکراینی در دسترس کاربر قرار دهیم فایل strings.xml را در فولدر دیگری با پسوند اوکراین یعنی res/values-UA/strings.xml قرار می‌دهیم. اندروید به صورت خودکار زبان گوشی را تشخیص داده و برنامه را به همان زبانی که کاربر انتظار دارد نمایش می‌دهد.

بخوانید  مراحل ساخت کتابخانه اندرویدی

نام‌گذاری

در نام‌گذاری رشته‌ها بهتر است آن‌ها را با پیشوندی نظیر نام صفحه آغاز کنید تا بدانید هر رشته مربوط به کدام صفحه است. مثلاً تمام رشته‌هایی صفحۀ تنظیمات را با پیشوند settings آغاز کنید و یا رشته‌های صفحۀ پروفایل را با پیشوند profile شروع نمایید. این کار به شما کمک می‌کند تا در هنگام ترجمۀ برنامه، صفحه به صفحه جلو بروید.

استراتژی دیگری هم وجود دارد که برای هر صفحه یک فایل strings.xml در نظر بگیرید. این کار گرچه خوب به نظر می‌رسد ولی چون معمولاً هر برنامه‌ای لااقل ده بیست صفحه‌ای دارد وجود تعداد زیادی فایل strings.xml برعکس باعث شلوغی برنامه می‌شود. بنابراین تا حد امکان از به کارگیری استراتژی فوق پرهیز کنید.

قالب‌بندی رشته

نکتۀ بعدی در استفاده از strings.xml زمانی است که بخواهید دو رشته را به هم متصل کنید. مثلاً در زبان انگلیسی برای خوش‌آمدگویی به کاربر (فرضاً به اسم John Doe) رشتۀ نهایی John Doe – Welcome back است. بنابراین در فایل strings.xml احتمالاً چنین رشته‌ای تنظیم می‌کنید.

این روش در عین درستی ایده‌آل نیست؛ چون در بعضی از زبان‌ها ترتیب کلمات با هم فرق می‌کند. مثلاً در اوکراینی اول خوش‌آمدگویی می‌آید و بعد اسم کاربر. راه‌حل بهتر، استفاده از شکل دیگری از تابع getString است؛ بدین صورت:

اینجا خودِ برنامه کلمات را مطابق زبان در جایگاه مناسب قرار می‌دهد. یعنی اگر برنامه به زبان انگلیسی به کاربر نشان داده شود از قالب موجود در values/strings.xml استفاده می‌شود و اگر اوکراینی باشد قالب values-UA/strings.xml به کار می‌رود.

حالت جمع کلمات

هیچ وقت برای صیغه جمع کلمات از کدنویسی استفاده نکنید. یعنی کاری که در این تصویر می‌بینید را نکنید:

علتش این است که هر زبانی قواعد گرامری خودش را در جمع اسامی دارد. راهکار بهتر استفاده از تابع getQuantityString است. در این روش حالت جمع یا فرد کلمه توسط خود اندروید برحسب اینکه تعداد اشیاء یک یا بیشتر از یکی است انتخاب می‌شود. مثلاً در کدهایی پایین اگر تعداد دقایق یک (one) بود عبارت minute استفاده می‌شود و اگر بیشتر از یک دقیقه (other) بود minutes که حالت جمع آن است استفاده خواهد شد. شما می‌توانید همین کار را برای سایر زبان‌ها هم انجام دهید و طبق قواعد جمع آن زبان عمل کنید. مثلاً در فارسی برای ۱ دقیقه و ۲۰ دقیقه فقط یک کلمۀ یکسان به کار می‌رود.

هایلایت کلمات

معمولاً برای رنگی کردن بخشی از یک جمله از ForgroundColorSpan استفاده می‌کنند. ولی این همیشه انتخاب خوبی نیست؛ چون این کار توسط ایندکس صورت می‌گیرد که در نرم‌افزارهای چندزبانه با مشکلاتی همراه است. راه‌حل بهتر استفاده از تگ‌های رنگی زبان html در فایل strings.xml است. مثلاً فرض کنید در عبارت Discover and play games بخواهیم واژۀ Discover و play را به رنگ آبی درآوریم. به این صورت عمل می‌کنیم:

سید ایوب کوکبی

نویسنده و مترجم...

1 دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *




    نود 32

    سه شنبه ۰۴ تیر ۱۳۹۸

    سلام
    اول خدا قوت میگم بهتون…
    دوم میگم درود بر شرفتون، من با فایل strings.xml مشکل داشتم، حل شد…
    مرسی، دم همه ی مدیرهای سایت گرم