פורסם: 06/10/2009 - 18:28
נושא ההודעה: שינוי locale בחלונות
|
כתבתי לוח שנה עברי קטן (עם QT כספרייה הגרפית) שמשתמש ב libhdate .
בלינוקס הכל מצויין. libhdate משתמשת ב gettext לתרגום המחרוזות, ובודקות למה לתרגם לפי הלוקאל.
זאת אומרת שהרצת התוכנה עם LC_ALL = he_IL, למשל, מאפשר לה להיות בעברית גם כאשר המערכת באנגלית, ובנוסף, אני יכול להשתמש ב setlocale מתוך הקוד כדי להכריח לוקאל ידנית אם אני רוצה.
הבעייה היא, כמובן, בחלונות.
libhdate תמיד עובד באנגלית, למרות כל מה שניסיתי.
בדקתי אמנם רק על חלונות (2000) עם ממשק אנגלי - אבל גם במצב הזה אני מעוניין שהתוכנה תהיה תמיד בעברית, או לפחות שתהיה אפשרות לכך.
המעניין הוא שהפקודה setlocale עדיין עובדת (או לפחות מזוהה), אבל לא הצלחתי למצוא אף לוקאל שגורם ל libhdate לתת עברית (ניסיתי כל מיני אפשרויות שמצאתי באינטרנט, ואף אחד לא עבד).
האם יש דרך לפחות לקבל רשימה של לוקאלים מותקנים במערכת ההפעלה ה***** הזאת? איך בכלל מתקינים שם לוקאלים?
(עברית אמנם לא שפת המערכת שם, אבל בהחלט מותקנת. )
אולי אני בכלל עובד לא נכון ובחלונות עובדים עם לוקאל בצורה אחרת?
(אגב, התוכנה קומפלה לחלונות ממש בקלות. QT לא עושה שום בעיות, ול libhdate עשיתי cross-compile עם mingw, שעבד בלי בעייה).
תודה,
משה
|
|
חזרה לתוכן הדיון |
פורסם: 06/10/2009 - 19:31
נושא ההודעה:
|
אוקיי, אני לא יודע איך לוח הבקרה בחלונות 2000. אבל באיקס פי והלאה זכור לי שבחלק מהתוכנות החיצוניות צריך להגדיר מראש בלוח הבקרה שהתוכנות שיותקנו "מעכשיו ועד להודעה חדשה" יהיו בעברית. גם לוטוס סימפוני של IBM דורשת הגדרה כזאת מראש
|
|
חזרה לתוכן הדיון |
פורסם: 06/10/2009 - 19:49
נושא ההודעה:
|
אוי ווי...
ויש אנשים שעוד לא הפנימו שזאת מערכת הפעלה מוגבלת
אני בסך הכל רוצה לשנות לוקאל לרגע לתוכנה מסויימת. למה אני צריך לשנות עכשיו את ההגדרות של כל המערכת? מי אמר שאני בכלל אדמין? ומי אמר שאני בכלל "מתקין" את התוכנה? (ואני לא, זה בסך הכל exe שאני מריץ ללא התקנה).
אולי מישהו מכיר פתרון אחר?
(אני כל כך לא רוצה ליצור גרסא של libhdate עם האק שמאפשר להכריח עברית )
בכל אופן תודה על התשובה,
משה
|
|
חזרה לתוכן הדיון |
פורסם: 06/10/2009 - 20:21
נושא ההודעה:
|
קובץ מוכן ללא התקנה? אין לי מושג איך עושים זאת ואם יש תוכנות עבריות שעובדות כך. תנחומיי
|
|
חזרה לתוכן הדיון |
פורסם: 06/10/2009 - 20:48
נושא ההודעה:
|
יש תוכנות כאלה בעברית. תשאל את התלמידים במגמת מחשבים שעובדים אם ויזואל בייסיק 6
תנסה לקמפל את 2 התוכנות אם 'ההיפך של winelib' (אין לי שמץ איך הוא נקרא) כדיי שהן יעבדו כמו תוכנות לינוקס
|
|
חזרה לתוכן הדיון |
פורסם: 06/10/2009 - 21:59
נושא ההודעה:
|
מספר הערות:
mingw לא כל כך תומך ב־locale מלבד POSIX. וגם אם היית עובד עם Visual Studio עדיין הייתה לך בעיה עם locale כי he_IL זה לוקל לפי ייצוג POSIXי שחלונות לא ממש מבינים אותו בחלונות צריך להשתמש בשם Hebrew.
עכשיו השאלה כיצד אתה מגדיר locale וכיצד אתה מכוון את הלוקל של תכנה ספציפית וכיצד אתה מכוון את המילונים של gettext. תתחיל משם.
כי יש יותר מתוכנה אחת שעובדת עם תרגום לעברית ושפות אחרות תחת Windows.
תתחיל מנושא gettext ותגרום לאיזושהי תכנה לעבוד עם לוקל עברי.
ואגב משתני סביבה LANG ו־LANGUAGE כן אמורים משפיע כל לוקל.
תתחיל מפה: http://gnuwin32.sourceforge.net/packages/gettext.htm
_________________ קזית 3 - קנופיקס עברי.
BiDiTeX - תמיכה בכיווניות ל-LaTeX.
CppCMS - פיתוח ל־web ב־++C.
גם לי יש בלוג
|
|
חזרה לתוכן הדיון |
פורסם: 07/10/2009 - 18:24
נושא ההודעה:
|
ארתיום, תודה רבה!
את הכיוון הכללי אני מאמין שהתחלתי להבין, אבל אני עדיין תקוע.
gettext מותקן. אני הייתי מנחש שה sdk של qt כבר התקין אותו קודם, אבל בכל מקרה התקנתי אותו ידנית כדי לוודא. לא עזר כמובן.
כמו כן השם של הלוקאל הוא אכן שונה, ובדיקה זריזה שלי החזירה "Hebrew_Israel.1255" .
אני גם מאמין ששמתי את המילון בנתיב הנכון, אם כי כאן אני לא בטוח ...
אבל, כל זה לא עוזר לי - ברור לי שתוכנות שמשתמשות ב gettext מסתדרות גם על חלונות, למשל, gimp שנותן ממשק עברי כשחלונות בעברית, ולהפך.
הבעייה היא שאני רוצה להכריח משהו בניגוד לממשק הכללי, אבל אני מפחד שהתשובה היא כמו פה:
http://stackoverflow.com/questions/1180590/how-to-set-lang-variable-in-windows
האם הוא צודק שם?
האם הבנתי נכון וזה אומר שאין סיכוי להפעיל את libhdate בשפה שונה מזו של שאר המערכת?
תודה רבה לכל מי שענה,
משה
|
|
חזרה לתוכן הדיון |
פורסם: 08/10/2009 - 09:58
נושא ההודעה:
|
דבר ראשון: הלוקל של Windows לא ממש עובד תחת Mingw... תשכח מזה.
עכשיו תתחיל מתכנה קטנה:
קוד: |
#include <libintl.h>
#include <stdio.h>
#include <locale.h>
int main()
{
setlocale(LC_ALL,"");
bindtextdomain("foo",".");
textdomain("foo");
printf("%s\n",gettext("Hello"));
return 0;
} |
תיצור עבורה קובץ foo.po:
קוד: | # SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: foo\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-10-08 09:39+0200\n"
"Last-Translator: Foo <foo@address>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: lang.c:10
msgid "Hello"
msgstr "Shalon" |
תמיר אותו ל־mo בעזרת msgfmt foo.po -o foo.mo
תמקם אות הכל כך:
קוד: | foo.exe
he/
he/LC_MESSAGES/
he/LC_MESSAGES/foo.mo
|
עכשיו תיכנס לתיקיה ותריץ foo.exe
אתה אמור לראות Hello
לאחר מכן תגדיר משתנה סביבה LANG=he_IL או LANG=he או LANG=he_IL.UTF-8 ותריץ את התוכנה...
אתה אמור לראות Shalom...
אחרי שתצליח להפעיל תכנה פשוטה עם gettext מחפש מה לא בסדר בתכנה גדולה.
_________________ קזית 3 - קנופיקס עברי.
BiDiTeX - תמיכה בכיווניות ל-LaTeX.
CppCMS - פיתוח ל־web ב־++C.
גם לי יש בלוג
|
|
חזרה לתוכן הדיון |
פורסם: 08/10/2009 - 12:40
נושא ההודעה:
|
ציטוט: | (אגב, התוכנה קומפלה לחלונות ממש בקלות. QT לא עושה שום בעיות, ול libhdate עשיתי cross-compile עם mingw, שעבד בלי בעייה). |
אתה בטוח שכאשר קמפלת יחד עם תמיכה ב־NLS? כי בשביל זה צריך ספריות libintl ו־iconv. תסתכל בפלט של configure מה קיבלת כשעשית cross-compile
_________________ קזית 3 - קנופיקס עברי.
BiDiTeX - תמיכה בכיווניות ל-LaTeX.
CppCMS - פיתוח ל־web ב־++C.
גם לי יש בלוג
|
|
חזרה לתוכן הדיון |
פורסם: 11/10/2009 - 15:58
נושא ההודעה:
|
ארתיום, שוב תודה!
לקח לי קצת זמן לעכל ולהתמודד עם כל מה שהעלית (וחוץ מזה שהיו לי דברים אחרים לעשות ) , וכרגע זה המצב:
אני יכול לקמפל תוכנות עם libintl סוף סוף מחלונות או לינוקס (בעזרת mingw).
אחרי זה - אם אני ממקם את קובץ ה mo כמו שאמרת, התרגום אכן עובד - אם כי ללא תלות בלוקאל (אבל רק התקייה he עובדת, ולא אף צירוף אחר). מוזר מאוד. (מצד שני, אני כן חייב להריץ את זה מתוך התקייה שלה ישירות):
קוד: |
$ ./foo/foo.exe
Hello
$ cd foo
$ ./foo.exe
Shalon
$ LANG=en_US ./foo.exe
Shalon
|
זאת נקודה אחת.
לגבי קימפול עם NLS - הסתבר כמובן שקימפלתי ללא תמיכה עם זה. לקח לי המון זמן לגלות איך לאפשר את זה, אבל עכשיו, אחרי לחץ פיזי מתון, סוף סוף:
קוד: |
configure:24087: checking whether to use NLS
configure:24089: result: yes |
מצד שני, זה לא פתר את הבעייה.
make install של libhdate החדש בכלל לא העתיק איתו קבצי po. או mo. . מצאתי אותם ידנית , אבל לא ברור לי מה אני אמור לעשות איתם. זה הרי תרגום של הספרייה, ואני צריך תרגום לתוכנות שנבנות מולה.
למשל, אני לא מצליח לגרום ל hdate (תוכנית הדוגמא של הספרייה) להציג עברית בחלונות. ניסיתי פשוט לקחת את קבצי ה .mo של libhdate, ולמקם בצורה שהסברת, אבל זה לא עזר.
איזה שלב אני מפספס עכשיו?
שוב תודה רבה,
משה
|
|
חזרה לתוכן הדיון |
פורסם: 12/10/2009 - 07:31
נושא ההודעה:
|
בגדול, בזמן קימפול libhdate נקבע מקום ברירת מחדל של הקבצים. אתה אמור להשתמש בו.
המלצה שלי? תקמפל libhdate תחת mingw
_________________ קזית 3 - קנופיקס עברי.
BiDiTeX - תמיכה בכיווניות ל-LaTeX.
CppCMS - פיתוח ל־web ב־++C.
גם לי יש בלוג
|
|
חזרה לתוכן הדיון |
פורסם: 12/10/2009 - 07:37
נושא ההודעה:
|
ציטוט: | מצד שני, אני כן חייב להריץ את זה מתוך התקייה שלה ישירות |
תשים לב לשורה:
קוד: | bindtextdomain("foo","."); |
היא אומרת ל־gettext איפה לחפש מילון.
ברוב התכנות שמקומםלות עם gettext משתמשים ב:
bindtextdomain("foo",SOME_CONIGURE_PROVIDED_DEFINE);
למשהו כמו /usr/share/locale/he/LC_MESSAGES/foo.mo
כנ"ל בזמן הבניה של libhdate. אין לי מושג כיצד זה מקבע בחלונות אבל בטח משהו דומה. תקמפל libhdate תחת mingw... ליתר בטחון
_________________ קזית 3 - קנופיקס עברי.
BiDiTeX - תמיכה בכיווניות ל-LaTeX.
CppCMS - פיתוח ל־web ב־++C.
גם לי יש בלוג
|
|
חזרה לתוכן הדיון |
פורסם: 12/10/2009 - 12:22
נושא ההודעה:
|
ארתיום, שוב תודה רבה!
מצאתי את השורה עם bindtextdomain ב libhdate, וראיתי שהיא תלויה במשתנה שמוגדר ב makefile. שיניתי אותו ידנית לנקודה, וזה אכן עבד
עכשיו רק נשאר לי לסכם לעצמי מה עשיתי, (לפרסם בבלוג?), ולהשתמש בזה.
(כמובן שראוי שאני באמת אלמד לעומק על gettext, אבל זה כשיהיה לי זמן).
רק נקודה מצערת קטנה היא ש gettext לחלונות לא כולל את כל ה define ים של ה LC_*, מה שהצריך אותי לשנות שורה ידנית ב libhdate. אבל לא נורא.
תודה רבה,
משה
|
|
חזרה לתוכן הדיון |
פורסם: 12/10/2009 - 14:32
נושא ההודעה:
|
ציטוט: | מצאתי את השורה עם bindtextdomain ב libhdate, וראיתי שהיא תלויה במשתנה שמוגדר ב makefile. שיניתי אותו ידנית לנקודה, וזה אכן עבד |
במקום לשנות קוד של libhdate הייתי ממליץ לך לקמפל ולהתקין את libhdate על mingw כך שהוא ידע איפה נמצאים המילונות.
בקיצור... תקרא את התיעוד של gettext.
_________________ קזית 3 - קנופיקס עברי.
BiDiTeX - תמיכה בכיווניות ל-LaTeX.
CppCMS - פיתוח ל־web ב־++C.
גם לי יש בלוג
|
|
חזרה לתוכן הדיון |
|