۱٫۶- استفاده از فرمتهای از پیش تعریف شده
با فراخوانی متدهای موجود در کلاس NumberFormat میتوان رشتههای حاوی اعداد، مقادیر پولی و علامت درصد را برای یک منطقه جغرافیایی خاص نمایش داد.
۱٫۱٫۶- اعداد
با استفاده از متدهای کلاس NumberFormat میتوان چگونگی نمایش اعداد از نوع double را تعریف کرد. مثال زیر یک عدد اعشاری را با توجه به منطقه تعریف شده نمایش میدهد:
Double amount = new Double(345987.246); NumberFormat numberFormatter; String amountOut; numberFormatter = NumberFormat.getNumberInstance(currentLocale); amountOut = numberFormatter.format(amount); System.out.println(amountOut + " " + currentLocale.toString());
متد getNumberInstance الگوی نمایش منطقه مورد نظر را در صورت وجود برمیگرداند. خروجی مثال برای چندین منطقه مختلف:
۳۴۵ ۹۸۷,۲۴۶ fr_FR 345.987,246 de_DE 345,987.246 en_US
2.1.6- پول
اگر برنامه شما تجاری باشد، شما ممکن است نیاز داشته باشید اعداد یا مقادیر پولی را نمایش دهید. مشابه اعداد، مقادیر پولی را نیز میتوان با توجه به یک منطقه خاص نمایش داد، با این تفاوت که متد getCurrencyInstance الگوی نمایش منطقه مورد نظر را برمیگرداند.
Double currency = new Double(9876543.21); NumberFormat currencyFormatter; String currencyOut; currencyFormatter = NumberFormat.getCurrencyInstance(currentLocale); currencyOut = currencyFormatter.format(currency); System.out.println(currencyOut + " " + currentLocale.toString());
خروجی مثال برای چندین منطقه مختلف:
۹ ۸۷۶ ۵۴۳,۲۱ F fr_FR 9.876.543,21 DM de_DE $9,876,543.21 en_US
در نگاه اول ممکن است خروجی برنامه اشتباه به نظر برسد، چراکه مقادیر عددی با هم یکسانند، البته ۹۸۷۶۵۴۳,۲۱F و ۹٫۸۷۶٫۵۴۳٫۲۱ DM یکی نیست. بخاطر داشته باشید که کلاس NumberFormat از نرخهای ارزی بی اطلاع است. بنابراین متدهای کلاس NumberFormat تنها نمایش مقادیر را برعهده دارند و عمل تبدیل ارزها به یکدیگر را انجام نمیدهند.
۳٫۱٫۶- درصد
برای نمایش علامت درصد (%) برای یک منطقه خاص در کلاس NumberFormat متد getPercentInstance تعریف شده است. برای مثال مقدار ۰٫۷۵ بصورت ۷۵% نمایش داده می شود. مثال:
Double percent = new Double(0.75); NumberFormat percentFormatter; String percentOut; percentFormatter = NumberFormat.getPercentInstance(currentLocale); percentOut = percentFormatter.format(percent);
2.6- فرمتهای سفارشی
از کلاس DecimalFormat میتوان برای تعریف چگونگی نمایش اعداد برای یک منطقه یا کشور خاص استفاده کرد. این کلاس امکان تعریف صفرهای قبل و بعد از اعداد، جداکننده دسیمال (،)، علامت درصد (%)، علامت نقطه اعشاری (/)، علامت پول و هر پسوند یا پیشوند دیگر را به شما می دهد. البته برای تغییر علامت جداکننده ها میتوان از کلاس DecimalFormatSymbols نیز در کنار DecimalFormat کمک گرفت.
۳٫۶- ساختن الگو
با تعریف الگو میتوان چگونگی نمایش اعداد را کنترل نمود، این الگو در قالب یک رشته تعریف می شود. جدول زیر لیستی از کاراکترهای مورد نیاز برای تعیین الگو را نشان می دهد.
| علامت | شرح |
| ۰ | عدد صفر |
| # | عدد |
| , | جداکننده اعشاری |
| E | جدا کننده مانتیس و توان در اعداد نمایی |
| ; | جدا کننده فرمتها |
| - | پیشوند اعداد منفی |
| % | علامت درصد (با ضرب در عدد ۱۰۰) |
| X | هر کاراکتر دیگری که در پسوند و پیشوند استفاده شود |
| ‘ | برای آوردن کاراکترهای خاص در پسوند و پیشوند |
کد زیر چگونگی تعریف الگو برای کلاس DecimalFormat را نشان میدهد:
DecimalFormat myFormatter = new DecimalFormat(pattern); String output = myFormatter.format(value); System.out.println(value + " " + pattern + " " + output);
جدول زیر چند نمونه از تعریف الگو و خروجی آن را نشان می دهد:
| مقدار | الگو | خروجی | توضیح |
| ۱۲۳۴۵۶٫۷۸۹ | ###,###.### | ۱۲۳,۴۵۶٫۷۸۹ | علامت (#) نشان دهنده عدد، علامت (,) جداکننده دسیمال و علامت (.) جداکننده اعشاری |
| ۱۲۳۴۵۶٫۷۸۹ | ###,## | ۱۲۳۴۵۶٫۷۹ | عدد مورد نظر دارای سه رقم اعشار است در حالیکه الگو دو رقم اعشار تعریف کرده است. بنابراین نتیجه حاصل گرد می شود. |
| ۱۲۳٫۷۸ | ۰۰۰۰۰۰٫۰۰۰ | ۰۰۰۱۲۳٫۷۸۰ | طبق الگو قبل و بعد از عدد به اندازه صفرهای تعریف شده، عدد صفر قرار می گیرد. |
| ۱۲۳۴۵٫۶۷ | $###,###.### | $۱۲,۳۴۵٫۶۷ | علامت دلار ($) بعنوان پیشوند تعریف شده است. |
| ۱۲۳۴۵٫۶۷ | \u00A5###,### .### | ¥۱۲,۳۴۵٫۶۷ | علامت ین (¥) با استفاده از مقدار یونی کد U+00A5 |
| 12345.67 | ###,###.###\uE816 | ریال۱۲,۳۴۵٫۶۷ | کلمه ریال با استفاده از مقدار یونی کد U+E816 |
7- فارسی سازی در جاوا
۱٫۷- تاریخ هجری شمسی
تقویم هجری شمسی در ایران و نواحی اطراف مانند افغانستان، جمهوری های آسیای مرکزی و کردهای بین النهرین به طور رسمی استفاده میگردد. تقویم جلالی بخاطر اقدام جلال الدین ملکشاه سلجوقی که توسط شاعر و ریاضیدان بزرگ ایرانی عمر خیام در اواخر قرن پنجم به تصحیح تقویم هجری شمسی همت گمارد، نامگذاری شد. تقویم گریگوری نیز از نام پاپ گریگوری هشتم که آخرین تغییرات را در سال ۱۵۸۲ ب.م. در تقویم میلادی ایجاد کرد، گرفته شده است. طول سال در این دو تقویم کم و بیش به یک اندازه است، اما براساس روشهای کاملا متفاوتی پایه گذاری شدهاند.
تقویم جلالی دارای خصوصیتی طبیعی وکلی است. این تقویم تمام چهار فصل سال را با آغازی مصادف با اولین روز بهار (در نیمکره شمالی) در بر میگیرد. همچنین این تقویم دارای یک قانون منظم (نه یکنواخت) برای روزهای ماه است. شش ماه اول هر سال ۳۱ روز و شش ماه دوم در سالهای کبیسه ۳۰ روز میباشد، در غیر اینصورت ماه آخر سال ۲۹ روزه خواهد بود. تقویم جلالی تقریبا” با سیستم رایج زودیاک (Zodiac System) غرب تطابق دارد.
در این دو مورد تقویم گریگوری با تقویم جلالی دارای اختلافاتی است. در این تقویم ارتباطی بین سال و فصلها وجود ندارد. به طور قراردادی، تعداد روزها در هفت ماه سال ۳۱ روز، در چهار ماه ۳۰ روز و یک ماه در سال به طور نامنظم ۲۸ یا ۲۹ روز است.
علاوه بر این، تقویم جلالی از حرکت وضعی زمین (حرکت زمین به دور خورشید) تبعیت میکند. یک سال خورشیدی تقریبا معادل ۳۶۵ روز، ۵ ساعت و ۴۹ دقیقه است. بر اساس تقویم جلالی، آغاز سال (تحویل سال) زمانی است که خورشید از نیمکره جنوبی به سمت نیمکره شمالی از روی خط استوا میگذرد. حال اگر لحظه تحویل سال قبل از ظهر (به وقت تهران) باشد، سال جدید (اول فروردین ماه) از همان روز آغاز میشود. در غیر اینصورت، آغاز سال نو روز بعد خواهد بود. در این روش (به طور تقریبی) در هر ۳۳ سال، ۸ سال کبیسه تعیین میگردد. سالهای کبیسه، سالهایی هستند که پس از تقسیم بر ۳۳ باقیمانده آنها ۶، ۲۲، ۱۷، ۱۳، ۹، ۵، ۱ و ۳۰ باشد. بعنوان مثال، چنانچه ۱۳۷۰ را به ۳۳ تقسیم کنیم، باقیمانده ۱۷ خواهد بود پس سال ۱۳۷۰ سال کبیسه است. سال کبیسه بعدی سال ۱۳۷۵ میباشد –با چهار فاصله– در صورتیکه به طور معمول فاصله بین دو سال کبیسه ۳ سال است.
تقویم گریگوری از روش سادهای استفاده کرده که دارای اختلافاتی با سال طبیعی میباشد. در این روش هر چهار سال یکبار سال کبیسه خواهد بود، مگر سالهایی که قابل قسمت به ۱۰۰ باشند، اما بر ۴۰۰ نباشند. در نتیجه سال ۲۰۰۰ سال کبیسه است (از آنجایی که بر ۴۰۰ قابل قسمت است) اما سال ۲۱۰۰ کبیسه نیست.
مواردیکه در مبحث تاریخ هجری شمسی بایستی در نظر گرفته شوند عبارتند از:
- محاسبه سالهای کبیسه
- تبدیل تاریخ میلادی به تاریخ هجری شمسی
- تبدیل تاریخ هجری شمسی به تاریخ میلادی
- نمایش تاریخ شمسی به شکلهای مختلف (کوتاه، کامل)
- تابع چک کننده تاریخ هجری شمسی
- Persian Date Taglib
2.7- تقویم هجری شمسی
مواردیکه در مبحث تقویم هجری شمسی بایستی لحاظ شود عبارتست از:
- تفکیک مقادیر سال، روز، ماه برای تاریخ تعیین شده
- مشخص کردن روز هفته/ اولین روز هفته / اولین روز ماه
- قابلیت تغییر تاریخ با متدهای roll و add
- Persian Calendar Taglib
3.7- نمایش اعداد
همانطور که قبلا” گفته شد میتوان از متدهای تعریف شده در کلاسهای NumberFormat و DecimalFormat برای نمایش اعداد، مقادیر پولی و درصد استفاده کرد.
۴٫۷- بانک اطلاعاتی
- Database Character-Set (1252, 1256)
- Sorting (Sequence Order)
- JDBC Driver
- Middle Conversion
- Communication with Application Server
5.7- صفحات HTML/JSP
- Character Encoding
- Page Direction (Right to Left / Left to Right)
- Text Wrapping
- Language
مثالهای کاربردی
۱- استفاده از Resource Bundle برای فارسی سازی
۱٫۱- تعریف MessagesBundle_ar_SA.properties
label.login.userName=شناسه کاربر label.login.password=رمزعبور button.login=ورود button.cancel=انصراف label.calendar.date=تاریخ label.calendar.year=سال label.calendar.month=ماه label.calendar.day=روز label.calendar.pm= ب.ظ label.calendar.am= ق.ظ
۱٫۲- استفاده از Resource Bundle در JSP
<%@ page contentType="text/html;charset=1256"
import="java.util.Locale,
java.util.ResourceBundle"
%>
<%
Locale locale = new Locale("ar", "SA");
ResourceBundle msgs = ResourceBundle.getBundle("MessagesBundle", locale);
%>
<HTML lang="ar">
<HEAD>
<TITLE>Login Form </TITLE>
<META http-equiv="Content-Type" content="text/html; charset=windows-1256">
</HEAD>
<BODY>
<%=msgs.getString("label.login.userName")%>
<%=msgs.getString("label.login.password")%>
</BODY>
</HTML>
3.1- استفاده از Resource Bundle در Servlet
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.ResourceBundle;
import java.util.Locale;
public class I18NServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Locale locale = new Locale("ar", "SA");
ResourceBundle msgs = ResourceBundle.getBundle("MessagesBundle", locale);
PrintWriter out = response.getWriter();
out.println(msgs.getString("label.calendar.date")
+ ":" + new java.util.Date());
out.close();
}
}
2- نمایش مقادیر عددی
۱٫۲- استفاده از فرمتهای از پیش تعریف شده
static public void displayNumber(Locale currentLocale) {
Integer quantity = new Integer(123456);
Double amount = new Double(345987.246);
NumberFormat numberFormatter;
String quantityOut;
String amountOut;
numberFormatter = NumberFormat.getNumberInstance(currentLocale);
quantityOut = numberFormatter.format(quantity);
amountOut = numberFormatter.format(amount);
System.out.println(quantityOut + " " + currentLocale.toString());
System.out.println(amountOut + " " + currentLocale.toString());
}
static public void displayCurrency(Locale currentLocale) {
Double currency = new Double(9876543.21);
NumberFormat currencyFormatter;
String currencyOut;
currencyFormatter = NumberFormat.getCurrencyInstance(currentLocale);
currencyOut = currencyFormatter.format(currency);
System.out.println(currencyOut + " " + currentLocale.toString());
}
static public void displayPercent(Locale currentLocale) {
Double percent = new Double(0.75);
NumberFormat percentFormatter;
String percentOut;
percentFormatter = NumberFormat.getPercentInstance(currentLocale);
percentOut = percentFormatter.format(percent);
System.out.println(percentOut + " " + currentLocale.toString());
}
2.2- تعریف الگوی جدید
static public void customFormat(String pattern, double value) {
DecimalFormat myFormatter = new DecimalFormat(pattern);
String output = myFormatter.format(value);
System.out.println(value + " " + pattern + " " + output);
}
customFormat("###,###.###", 123456.789);
customFormat("###.##", 123456.789);
customFormat("000000.000", 123.78);
customFormat("$###,###.###", 12345.67);
customFormat("\u00a5###,###.###", 12345.67);
customFormat("###,###/###\ue816", 12345.67);
3- تنظیمات فارسی در صفحات HTML
3.1- تعریف زبان و Code Page
<HTML lang="fa">
<HEAD>
<META content="text/html; charset=windows-1256" http-equiv="Content-Type">
<META content="fa" http-equiv="Content-Language">
</HEAD>
...
</HTML>
<HTML>
<HEAD>
<META content="text/html; charset=UTF-8" http-equiv="Content-Type">
<META content="fa" http-equiv="Content-Language">
</HEAD>
...
</HTML>
2.3- راست به چپ صفحات
<HTML dir="rtl"> ... </HTML>
3.3- Text Wrapping
<TD nowrap> ... </TD>
دیدگاه خود را بیان کنید.
باید وارد سایت شده باشید برای دیدگاه دادن