פורסם: 06/10/2010 - 15:58
נושא ההודעה: באג בפייתון שמשפיע על דוברי העברית
|
נתקלתי בבאג מעצבן מאוד בפייתון שמשפיע בעיקר על דוברי העברית.
כתבתי עליו אצלי בבלוג ואשמח אם מישהו יוכל לסייע בפתרונו.
|
|
חזרה לתוכן הדיון |
פורסם: 06/10/2010 - 17:04
נושא ההודעה:
|
קוד: |
FireStats error : FireStats: Unknown commit strategy
|
זה הדבר הראשון שראיתי כשנכנסתי לאתר, אם בבאגים עסקינן. ותוכל לסדר את זה אם תספק מחרוזת ריקה, או שלא הבנתי את הבאג כמו שצריך? (הבאג הרשמי לא נפתח לי כרגע).
|
|
חזרה לתוכן הדיון |
פורסם: 06/10/2010 - 17:28
נושא ההודעה:
|
זה לא קשור לעניין. מדובר על תקלה באחד התוספים שלי, בינתיים נטרלתי אותו כדי להעלים את הודעת השגיאה.
|
|
חזרה לתוכן הדיון |
פורסם: 06/10/2010 - 22:07
נושא ההודעה:
|
לא הצלחתי להבין מדוע זו בעיה או באג. גם בדיווח שם כתוב הפתרון הפשוט, להשתמש ב-mapping בתרגום ל-plural, ואז אין שום שגיאה.
הנה דוגמא:
קוד: | #!/usr/bin/env python
from gettext import translation
import sys
t = translation('test', 'locale', fallback=True)
num = int(sys.argv[1])
msg = t.ngettext('%(hours)d hour.', '%(hours)d hours.', num)
print msg % {'hours':num}
|
הנה קובץ ה-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: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-10-06 21:55+0200\n"
"PO-Revision-Date: 2010-10-06 21:57+0200\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: test.py:6
#, python-format
msgid "%(hours)d hour."
msgid_plural "%(hours)d hours."
msgstr[0] "שעה אחת"
msgstr[1] "%(hours)d שעות"
|
והנה ההרצה:
קוד: | $ LANG='he_IL' python test.py 1
שעה אחת
$ LANG='he_IL' python test.py 120
120 שעות
|
|
|
חזרה לתוכן הדיון |
פורסם: 06/10/2010 - 22:21
נושא ההודעה:
|
כי זה דורש שינויים נרחבים בקוד לטובת כמה שפות בודדות. המפתחים לא ישתמשו בזה מראש ולא בטוח שיסכימו לשנות אח״כ את הקוד שלהם לטובת כמה נודניקים מישראל.
גם אם יסכימו זה אומר לפתוח באג על כל תכנה שרוצים לתרגם, וזה עבודה נוספת על המתרגמים.
|
|
חזרה לתוכן הדיון |
פורסם: 06/10/2010 - 22:32
נושא ההודעה:
|
זה תירוץ קלוש לדעתי. הצורה הנכונה לעבוד בתרגום היא לציין שם עבור הפרמטר כאשר יש משמעות מספרית לפרמטר (במיוחד כשעובדים עם plural וקל וחומר שכאשר יש יותר מפרמטר אחד לתרגום - זה חובה). ראה לדוגמא בקובץ התרגום העברי של Django, הם עבדו כראוי.
זה שמפתחי gpodder לא עבדו נכון, לא אומר שצריך לעקם בשבילם, שיעשו פעם אחת את העבודה כראוי.
|
|
חזרה לתוכן הדיון |
פורסם: 07/10/2010 - 12:07
נושא ההודעה:
|
מאיר, תודה על הפירוט הבעיה היא שלא כל מפתח יסכים לעשות את השינויים בשביל כמה שפות נידחות.
דווקא המפתח של gPodder מסכים לתקן את התכנה אבל הוא צריך הכוונה, אשמח אם תוכל לכתוב את התיקונים גם בבאג.
|
|
חזרה לתוכן הדיון |
פורסם: 07/10/2010 - 15:20
נושא ההודעה:
|
מצטער על ההתערבות, אבל לא ברור לי למה הוא מחליף לטקסט בודד ולא למחרוזת. הרי יש מציין של משהו לתרגום, אבל למה הוא מציין גם את כמות המילים בתרגום ?
אני שואל את זה, כי גם ברובי וגם בלזרוס למשל, המציינים האלו לא קשורים לכמות המילים שצריכות להיות מתורגמות אלא רק מציין שצריך לתרגם שם משהו, ובגלל זה, זה לא ברור לי כל כך, ולכן מאיר, אני חושב שחתול צודק במה שהוא אומר.
|
|
חזרה לתוכן הדיון |
פורסם: 10/10/2010 - 16:41
נושא ההודעה:
|
מאיר, משום מה ההצעה שלך לא עובדת אצלי.
החלפתי ב־gpodder את השורה הבעייתית קוד: | title = N_('Delete %d episode?', 'Delete %d episodes?', count) % count |
בשורה
קוד: | t = translation('test', 'locale', fallback=True)
t.ngettext('Delete %d episode?', 'Delete %d episodes?', count) % count |
התכנה רצה בלי בעיות אבל המחרוזת המתורגמת לא מוצגת אלא המחרוזת האנגלית המקורית.
|
|
חזרה לתוכן הדיון |
פורסם: 10/10/2010 - 17:08
נושא ההודעה:
|
חתול,
בתורה מי שכותב קוד מוכן לתרגום, אתה אמור לכתוב:
קוד: | title = N_('Delete %(episode)d episode?', 'Delete %(eposode)d episodes?', count) % { 'episode' : count } |
קרי בכל מקום בו יש שימוש בתרגום יש להציב "מפתח" מקום מספר זה החוקים: יש מקרים בהם אתה כן רוצה בדיקה כזו, ולפעמים לא.
_________________ קזית 3 - קנופיקס עברי.
BiDiTeX - תמיכה בכיווניות ל-LaTeX.
CppCMS - פיתוח ל־web ב־++C.
גם לי יש בלוג
|
|
חזרה לתוכן הדיון |
פורסם: 10/10/2010 - 18:06
נושא ההודעה:
|
ארתיום, הקוד שהצעת הוא הקוד המקורי והוא בעייתי.
הוא גורם לבאג שעליו כתבתי בפוסט.
|
|
חזרה לתוכן הדיון |
פורסם: 11/10/2010 - 14:27
נושא ההודעה:
|
חתול,
אני חושב שאתה מתמקד בהבדל שבין t.ngettext לבין _N, אבל זה לא הדבר החשוב במה שארתיום כתב, אלא העברת הערך לפירמוט דרך dictionary והתייחסות אליו במחרוזות לפי שם.
להבהרה: מה שיגרום לדברים לעבוד הוא ההבדל בין
קוד: |
title = N_('Delete %d episode?', 'Delete %d episodes?', count) % count
|
לבין
קוד: |
title = N_('Delete %(episode)d episode?', 'Delete %(eposode)d episodes?', count) % { 'episode' : count }
|
|
|
חזרה לתוכן הדיון |
|