PDA

View Full Version : چجوری از یک کلاس جاوا خروجی به زبان فارسی...



omid020
شنبه 10 شهریور 1386, 23:45 عصر
سلام ، من یک برنامه ی خیلی ساده و کم حجم که با جاوا نوشته شده رو اینجا دیدم :
http://riot.ieor.berkeley.edu/riot/Applications/flap/
و خواستم فارسیش کنم . یکی از کلاس هاشو برای امتحان Decompile کردم و بعد از تغییر برخی از عبارت ها به زبان فارسی دوباره اونو کامپایل کردم . منتها حالا تو خروجی کلمات فارسی با حروف بهم ریخته و نا معلوم نشون داده میشه :گریه:. برای درست نشون دادن کلمات و حروف فارسی باید چیکار کنم ؟

omid020
یک شنبه 11 شهریور 1386, 22:14 عصر
لااقل بگید که اصلاً چنین کاری شدنی هست یا نه ؟ نمی دونم چرا این پست رو هر جایی مطرح می کنم بدون پاسخ می مونه ؟

pooyanm
دوشنبه 12 شهریور 1386, 02:52 صبح
شدنیه. اگه فایل جاوا با encoding درست ذخیره شده با این:
http://barnamenevis.org/forum/showthread.php?t=69833

omid020
پنج شنبه 29 شهریور 1386, 10:53 صبح
سلام
من امشب به صورت اتفاقی از طریق گوگل متوجه شدم که به این پست پاسخ داده شده .
به هر حال چون چیز خاصی از جاوا نمی دونم ، از اون پستی که pooyanm برام آدرسشو گذاشته چیز زیادی نفهمیدم .
به عنوان مثال این سورس یکی از فایل هایی که من میخوام فارسیش کنم :

import java.applet.Applet;
import java.applet.AppletContext;
import java.awt.*;
import java.awt.event.*;

public final class AboutDialog extends Dialog
{
public class ImageCanvas extends Canvas
{

public Dimension getPreferredSize()
{
return new Dimension(width, height);
}

public void paint(Graphics g)
{
g.drawImage(image, getSize().width - image.getWidth(this) >> 1, getSize().height - image.getHeight(this) >> 1, this);
g.dispose();
}

private Image image;
private int width;
private int height;

public ImageCanvas(AppletContext appletcontext, String s, int i, int j)
{
if(appletcontext == null)
{
image = getToolkit().getImage(s);
} else
{
Applet applet = appletcontext.getApplet("FLAP");
image = applet.getImage(applet.getCodeBase(), s);
}
MediaTracker mediatracker = new MediaTracker(this);
mediatracker.addImage(image, 0);
try
{
mediatracker.waitForID(0);
}
catch(InterruptedException _ex)
{
image = null;
}
width = i;
height = j;
}
}


public AboutDialog(AppletContext appletcontext, Frame frame)
{
super(frame, "About...", false);
setLayout(new BorderLayout(15, 15));
ImageCanvas imagecanvas = new ImageCanvas(appletcontext, "about.gif", 200, 145);
add("Center", imagecanvas);
Panel panel = new Panel();
panel.setLayout(new BorderLayout());
panel.add("North", new Label("FLAP v1.0", 1));
panel.add("Center", new Label("Written by Sidarth Khoshoo", 1));
Button button = new Button("Dismiss");
panel.add("South", button);
add("South", panel);
pack();
addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent windowevent)
{
setVisible(false);
dispose();
}

});
button.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent actionevent)
{
setVisible(false);
dispose();
}

});
}

public static void about(AppletContext appletcontext, Frame frame)
{
AboutDialog aboutdialog = new AboutDialog(appletcontext, frame);
Dimension dimension = aboutdialog.getToolkit().getScreenSize();
aboutdialog.setLocation(dimension.width - aboutdialog.getSize().width >> 1, dimension.height - aboutdialog.getSize().height >> 1);
aboutdialog.setVisible(true);
}
}
یکی از خطوط کدش اینه :

panel.add("Center", new Label("Written by Sidarth Khoshoo", 1));

حالا من میخوام به جای عبارت "Written by" از عبارت "نوشته شده توسط" استفاده کنم .
خب باید دستور :


setFont(new Font("Arial", style, size));

چجوری و دقیقاً در کجای اون خط بنویسم تا اون عبارتی که میخوام ، فارسی نشون داده بشه .
یا یکی از خطوط کدش اینه :

Button button = new Button("Dismiss");
من اگه بخوام به جای عبارت "Dismiss" از عبارت "بستن" استفاده کنم باید دستور

button.setFont(new Font("Arial Unicode",Font.ITALIC,20));
رو چجوری و در کجای خط مربوط به دکمه بنویسم .
دوستان شرمنده ، این نرم افزاری که من میخوام فارسیش کنم مربوط به یکی از دروس تخصصی من هستش و چون رشتۀ من IT یا کامپیوتر نیست نمی تونم وقت خاصی برای یادگیری جاوا بزارم ، والا هیچوقت اون سوالات مبتدیانه رو از شما نمی پرسیدم .
در ضمن یکی از دوستان استفاده از حروف با کد یونیکد رو بهم پیشنهاد که جزئیاتشو اینجا:
http://www.developercenter.ir/forum/showthread.php?p=18573#post18573
میتونید ببینید . ولی هنوز ازش نتیجه نگرفتم .
تشکر:لبخندساده:

handinux
پنج شنبه 29 شهریور 1386, 16:10 عصر
دوست عزیز سان ابزاری به native2ascii دارد که می توانید حروف فارسی را به یو تی اف تبدیل کرده در برنامه خود بگنجانید.اگر jdk در مسیر باشد دستور بالا در خط فرمان اجرا می شود.می توانید یک فایل که حاوی کلمات فارسی است نیز به عنوان ورودی به آن بدهید و در خروجی یک فایل utf8 بگیرید.
مثال:
native2ascii encoding utf8 a.txt b.txt

http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/native2ascii.html

omid020
پنج شنبه 29 شهریور 1386, 16:22 عصر
شما مطمئنید که جواب میده !! به لینکی که گذاشته بودم نگاه انداختید ؟

http://www.developercenter.ir/forum/showthread.php?p=18573#post18573

omid020
پنج شنبه 29 شهریور 1386, 17:01 عصر
ببخشید من زیاد وارد نیستم . من یک فایل txt روی درایو C ایجاد کردم بعد توش اسمم رو به زبان فارسی نوشتم و بعد فایل رو با انکودینگ windows-1256 ذخیره کردم .
بعد این دستور رو توی Command Prompt ویندوز نوشتم :


C:\>JBuilderX\jdk1.4\bin\native2ascii encoding utf8 C:\t.txt C:\t.txt
بعدش Enter رو زدم ، منتها این پیغام اومد :


Usage: native2ascii [-reverse] [-encoding encoding] [inputfile [outputfile]]
در فایل هم هیچ تغییری ایجاد نشد . یک بار دیگه دستور رو اجرا کردم منتها اینبار به جای آخرین C:\t.txt از
C:\x.txt استفاده کردم ولی نتیجه همون بود .
نمی دونم درست انجام دادم یا نه؟
در ضمن میخواستم بدونم به غیر Command Prompt ویندوز روش آسون تری که بشه با کپی ، پیست ، دستور رو بدیم و خروجی بگیریم هست یا نه ؟
سپاس

handinux
پنج شنبه 29 شهریور 1386, 18:28 عصر
اینطور وارد کن :
native2ascii -encoding utf8
اون منها یادت رفته

pooyanm
پنج شنبه 29 شهریور 1386, 20:27 عصر
این را امتحان کردی؟


Button button = new Button("\u0633\u0644\u0627\u0645");
try {
button.setFont(java.awt.Font.createFont(
java.awt.Font.TRUETYPE_FONT,
new java.io.File("c:\\windows\\fonts\\arial.ttf")
).deriveFont(java.awt.Font.PLAIN, (float)(16)));
} catch ( Exception e ) {
e.printStackTrace();
}

pooyanm
پنج شنبه 29 شهریور 1386, 20:43 عصر
در ضمن اگر می خوای معادل عددی هر کاراکتر را بدونی از Character Map استفاده کن:
All Programs/Accessories/System Tools/Character Map
فونت Arial Unicode MS هم هرچند برای فارسی ضروری نیست ولی معمولا وقتی دردسترسه که Install Files for East Asian languages در Regional and Language Options تیک خورده باشه.

omid020
جمعه 30 شهریور 1386, 04:28 صبح
این را امتحان کردی؟


Button button = new Button("\u0633\u0644\u0627\u0645");
try {
button.setFont(java.awt.Font.createFont(
java.awt.Font.TRUETYPE_FONT,
new java.io.File("c:\\windows\\fonts\\arial.ttf")
).deriveFont(java.awt.Font.PLAIN, (float)(16)));
} catch ( Exception e ) {
e.printStackTrace();
}


آقا من کد شما رو با این یکی عوض کردم :

Button button = new Button("Dismiss");

بعد از کامپایل یک Error میده :

C:\AboutDialog.java:78: createFont(int,java.io.InputStream) in java.awt.Font cannot be applied to (int,java.io.File)
button.setFont(java.awt.Font.createFont(
^نمی فهمم چی میگه:ناراحت: ! حالا باید چیکار کنم؟

omid020
جمعه 30 شهریور 1386, 19:19 عصر
یکی کمکم کنه . من از این پیغام خطا سر در نمیارم .

pooyanm
شنبه 31 شهریور 1386, 03:43 صبح
اصلاح شد .


Button button = new Button("\u0633\u0644\u0627\u0645");
try {
button.setFont(java.awt.Font.createFont(
java.awt.Font.TRUETYPE_FONT,
new java.io.FileInputStream(new java.io.File("c:\\windows\\fonts\\arial.ttf"))
).deriveFont(java.awt.Font.PLAIN, (float)(16)));
} catch ( Exception e ) {
e.printStackTrace();
}

omid020
شنبه 31 شهریور 1386, 15:52 عصر
اینبار درست کامپایل شد . ولی متأسفانه باز در خروجی هر یک کاراکتر رو به شکل یک مربع نشون میده . خیلی بدشانسم من ):

omid020
شنبه 31 شهریور 1386, 16:13 عصر
مطالب زیر نقل از این سایت هستش :
http://www.unicode.org/unicode/faq/font_keyboard.html#2

AWT components first convert the Unicode characters to the host's native character set encoding. if the target character set does not have the needed Unicode character, a substitute character is often used to represent the original character. AWT components are not typically flexible enough to display wide ranges of multilingual text because of their dependence on a single, rather limited charset or codepage.
On the other hand, Swing components do not suffer from the same limitations as AWT components. because Swing components do not convert a Unicode character to the host's native charset or codepage, these components can typically display a wide range of multilingual text.
حالا برنامۀ من برچسب awt داره . من اگه بخوام برچسب رو به Swing تغییر بدم ، فقط تغییر برچسب کافیه یا اینکه باید در تمام سورس کدها تغییراتی ایجاد کنم:متفکر: . اگر تغییرات لازم هست لطفاً از طریق سورس همون فایلی گذاشتم یا از طریق یک مثال دیگه راهنماییم کنید چجوری با Swing برنامه رو بنویسم و تغییرش بدم .
ممنون

pooyanm
یک شنبه 01 مهر 1386, 05:29 صبح
در خروجی هر یک کاراکتر رو به شکل یک مربع نشون میده
برای رفع مشکل awt توی Regional Options فارسی را انتخاب کن
ولی استفاده از سوئینگ روش بهتریه.

omid020
یک شنبه 01 مهر 1386, 15:40 عصر
آره منم فکر کنم ، بایستی از Swing استفاده کرد . یه سری مطالب هم راجع به تبدیل awt به Swing پیدا کردم . امیدوارم جواب بده .
در ضمن در Regional Option من همه ی تب ها فارسی هستش و فکر نکنم از زبان سیستم باشه !