نمایش اعداد فارسی در View های اندروید

به نام خدا. در این مبحث ابتدا روش‌های متفاوت نمایش اعداد فارسی در برنامه‌ی اندرویدی را بررسی کرده سپس یک متد جاوا برای تبدیل اعداد انگلیسی به فارسی می‌نویسیم و در View های پروژه اندروید برای نمایش اعداد به صورت فارسی از آن استفاده می‌کنیم.

چرا باید از عدهای فارسی در برنامه اندروید استفاده کنیم؟

نمایش اعداد فارسی در برنامه نویسی اندروید

یکی از مشکلات توسعه دهندگان فارسی زبان، نمایش اعداد انگلیسی در محیط اپلیکیشن اندرویدی است که باعث ایجاد نوعی بی‌نظمی در رابط کاربری برنامه اندرویدی می‌شود. یک متن فارسی که در میان آن چند عدد قرار گرفته و همه آنها با فرمت اعداد انگلیسی نمایش داده می‌شوند. یا به عنوان مثال قیمت یک محصول در اپلیکیشن فروشگاهی شما به‌اینصورت به مخاطب نشان داده شود:

تبدیل عدد انگلیسی به فارسی در پروژه ی اندرویدی

این یک امتیاز منفی برای اپلیکیشن به حساب می‌آید. درست همانطور که نمایش عددهای فارسی در یک متن انگلیسی می‌تواند مضحک بنظر برسد!
بنابراین لازم است در صفحاتِ با محتوای فارسی حتما از اعداد فارسی استفاده کنیم (مگر در موارد خاص). در اینصورت خوانایی محتوا نیز برای کاربر بهینه می‌شود.

روش‌های نمایش اعداد فارسی در اپلیکیشن اندروید

برای نمایش عددهای فارسی در برنامه نویسی اندروید، راهکارهای متفاوتی وجود دارد که در اینجا به چند مورد اشاره می‌کنم:
۱- بکاربردن مستقیم اعداد فارسی در متن و قسمت‌های مدنظر: در این حالت کافیست اعداد به صورت فارسی به View ها ارسال شوند. چه محتوایی که در دیتابیس ذخیره شده چه آنهایی که به واسطه وب سرویس از سرور دریافت می‌شوند و چه آنهایی که در خود اکتیویتی‌ و Layout قرار گرفته اند.
۲- استفاده از فونت‌های فارسی: اگر مبحث تغییر فونت در برنامه اندرویدی را مطالعه کرده باشید، روش‌های متفاوت تغییر فونت پیش فرض اندروید را بررسی کردیم. برخی فونت‌های فارسی، اعداد انگلیسی را هم به صورت فارسی نمایش می‌دهند بنابراین خیلی ساده و بدون نیاز به هیچ عمل دیگری می‌توانید مسئله را حل کنید. به عنوان مثال فونت IRANSans برای اپلیکیشن‌های موبایلی دو فونت متفاوت ارائه داده که در یکی از آنها فارغ از اینکه اعداد فارسی یا انگلیسی هستند، آنها را به صورت فارسی نمایش می‌دهد. البته استفاده از این نوع فونت یک ایراد دارد که در واقع همان ویژگی آن محسوب می‌شود! یعنی شما امکان نمایش اعداد انگلیسی را نخواهید داشت. فرض کنید نام و مدل یک محصول در فروشگاه شما LG G7 است. طبیعتا چون نام و مدل، کاراکترهای انگلیسی هستند، عدد بکار رفته در سری یا مدل این محصول نیز باید انگلیسی باشد نه فارسی. مگر آنکه هر دو فونت استاندارد و به اصطلاح FaNum را در پروژه بکار ببریم و در هر View بنا به نیاز از یکی از آنها استفاده کنیم.
۳- تبدیل اعداد انگلیسی به فارسی: در این روش باید متدی را پیاده سازی کنیم که قبل از ارسال محتوا به View مدنظر، چک کند اگر عدد یا اعداد انگلیسی وجود دارد آنها را با اعداد فارسی جایگزین نماید. در این مبحث قصد دارم این روش را آموزش دهم.

تبدیل اعداد انگلیسی به فارسی در View های اندروید

در این روش یک متد می‌سازیم که محتوای ارسالی به View را بررسی می‌کند و درصورت وجود اعداد انگلیسی، آنها را به اعداد فارسی تبدیل می‌کند.
ابتدا یک پروژه با نام FarsiNumbers در اندروید استودیو می‌سازم که اکتیویتی آن از نوع Empty Activity است.

تبدیل اعداد انگلیسی به فارسی در برنامه اندرویدی

پروژه با موفقیت بیلد شد. حالا یک کلاس جاوا به پروژه اضافه می‌کنم. من نام این کلاس را FaNum انتخاب کردم:

نمایش اعداد فارسی در پروژه اندروید در اندروید استودیو

نمایش اعداد فارسی در View و TextView اندروید

کلاس FaNum.java را بصورت زیر تکمیل می‌کنم:

package ir.android_studio.farsinumbers;

public class FaNum {

    public static String convert(String faNumbers) {
        String[][] mChars = new String[][]{
                {"0", "۰"},
                {"1", "۱"},
                {"2", "۲"},
                {"3", "۳"},
                {"4", "۴"},
                {"5", "۵"},
                {"6", "۶"},
                {"7", "۷"},
                {"8", "۸"},
                {"9", "۹"}
        };

        for (String[] num : mChars) {

            faNumbers = faNumbers.replace(num[0], num[1]);

        }

        return faNumbers;
    }

}

یک متد از نوع String و با نام دلخواه convert درون کلاس ایجاد کردم که پارامتر ورودی آن از نوع String و با نام دلخواه faNumbers انتخاب شده. در ادامه یک آرایه دو بُعدی با نام mChars ساخته‌ام که مقادیر آن شامل اعداد انگلیسی و فارسی‌ست. ستون اول (اندیس صفر) مربوط به اعداد انگلیسی و ستون دوم (اندیس یک) مربوط به اعداد فارسی می‌باشد. سپس یک for تعریف شده. درون بلاک for از متد replace استفاده شده به‌اینصورت که کاراکترهای دریافتی بررسی شده و در صورت وجود کاراکتر (اعداد) انگلیسی (ستون اول)، با عدد فارسی مقابل آن (ستون دوم) تعویض و جایگذاری می‌شود. به عبارتی اندیس ۱ جایگزین اندیس ۰ می‌شود.
در نهایت چون متد از نوع بازگشتی است، مقدار خروجی return می‌شود.
متد کامل شد. حالا برای تست متدی که ساختم، یک TextView به اکتیویتی اضافه می‌کنم:

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/m_txt"
        android:layout_centerInParent="true"
        android:textSize="40sp"/>

</RelativeLayout>

MainActivity.java:

package ir.android_studio.farsinumbers;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView mText = findViewById(R.id.m_txt);

        mText.setText("1234567890");

    }
}

ابتدا توسط متد setText یک رشته شامل اعداد ۰ تا ۹ انگلیسی را به TextView ارسال می‌کنم. با اجرای پروژه روی شبیه ساز اندروید مسلما اعداد به صورت انگلیسی ظاهر خواهند شد:

نمایش اعداد فارسی توسط متد setText در اندروید استودیو

حالا از متدی که نوشتم استفاده می‌کنم و انتظار دارم با افزودن متد convert کلاس FaNum به setText اعداد به صورت فارسی نمایش داده شوند:

mText.setText(FaNum.convert("1234567890"));

تبدیل اعداد انگلیسی به فارسی توسط متد جاوا در اندروید

متد به درستی کار می‌کند.

این متد را به صورت‌های دیگری نیز می‌توان پیاده سازی کرد که با جستجو در وب به نمونه‌هایی برخورد می‌کنیم. یکی از آنها را در اینجا ذکر می‌کنم:

package ir.android_studio.farsinumbers;

public class FaNum2 {

    private static String[] faNumbers = new String[]{"۰","۱","۲","۳","۴","۵","۶","۷","۸","۹"};

    public static String convert(String text) {
        if (text.length() == 0) {
            return "";
        }
        String out = "";
        int length = text.length();
        for (int i = 0; i < length; i++) {
            char c = text.charAt(i);
            if ('0' <= c && c <= '9') {
                int number = Integer.parseInt(String.valueOf(c));
                out += faNumbers[number];
            } else if (c == '٫' || c == ',') {
                out += '،';
            } else {
                out += c;
            }
        }
        return out;
    }

}

یک کلاس جدید با نام FaNum2 به پروژه اضافه کرده و متد فوق را درون آن قرار دادم. حالا کافیست در setText متد convert این کلاس را فراخوانی کنم:

mText.setText(FaNum2.convert("1234567890"));

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

if (c == '٫' || c == ',') {
    out += '،';
}

کاربرد این کد برای مواقعی است که قیمت محصولات دارای جداکننده باشد و بخواهیم کاراکتر جداکننده نیز به ویرگول فارسی تبدیل شود.
اعداد را توسط جداکننده (ویرگول انگلیسی) به صورت سه رقم از یکدیگر جدا کرده و مجدد پروژه را اجرا می‌کنم:

mText.setText(FaNum2.convert("123,4567,890"));

نمایش ویرگول فارسی در View های اندروید

خروجی همان چیزی است که انتظارش را داشتیم.

توجه: سورس پروژه درون پوشه Exercises قرار دارد

دانلود نسخه PDF این آموزش به همراه سورس پروژه
تعداد صفحات : ۱۰
حجم : ۱ مگابایت
قیمت : رایگان
دانلود رایگان با حجم ۱ مگابایت لینک کمکی
یک دیدگاه بنویسید

پرسش‌های زیر تایید و پاسخ داده نخواهد شد:
۱ : جزء موارد پاسخ داده شده در مطلب "مشکلات و پرسش های رایج" باشد
۲ : سوال قبلا توسط کاربران در دیدگاهها مطرح و پاسخ داده شده باشد
۳ : سوال خارج از مبحث آموزشی موجود در این صفحه باشد

دیدگاهتان را بنویسید

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

کد امنیتی *