ווטסאפ - לינוקס, BSD, קוד פתוח ותוכנה חופשית בעברית. Whatsup - Linux, BSD, open source and free software in Hebrew

 
 
  כניסת חברים · רישום · שכחתי סיסמה  
tux the penguin
תגובה לנושא
צפיה בנושא הבא Printable version התחבר כדי לבדוק הודעות פרטיות צפיה בנושא הקודם
C++ISTאורח · ·
 

הודעה פורסם: 18/10/2017 - 20:19
נושא ההודעה: עברית ב-C++

היכן ניתן למצוא חומר מסודר (או חומר בכלל) בנושא של עברית ב-C++ (הצגה, ייצוג, אכסון בזיכרון, וכדומה)?
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
elcucoלא בפורום כעת ת.הצטרפות: 14/10/2003 · הודעות: 6088 ·
 

הודעה פורסם: 18/10/2017 - 20:36
נושא ההודעה:

אחסון זאת לא בעייה זה שקוף.

תצוגה - תלוי ב-toolkit שלך, אבל בגדול מאוד, כולם מתמודדים עם זה. אתה זורק את העברית לפקד המתאים (textedit - inputline - label ומה שלא יהיה) וזה מוצג.

אם אתה צריך לדעת משהו יותר נמוך, כמו איפה המקום הויזואלי של תו לוגי (זה תלוי בכיווניות של הפסקא ולא רק בתוכן או הגופן). יש כמה מנועים שמשובצים בכל toolkit שנותנים לך מענה.

בקיצור - זה לא חלק מהשפה. אבל רב הזמן זה עובד שקוף.
מה אתה צריך לעשות בדיוק?
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
C++ISTאורח · ·
 

הודעה פורסם: 19/10/2017 - 02:36
נושא ההודעה:

elcuco :
אחסון זאת לא בעייה זה שקוף.

תצוגה - תלוי ב-toolkit שלך, אבל בגדול מאוד, כולם מתמודדים עם זה. אתה זורק את העברית לפקד המתאים (textedit - inputline - label ומה שלא יהיה) וזה מוצג.

אם אתה צריך לדעת משהו יותר נמוך, כמו איפה המקום הויזואלי של תו לוגי (זה תלוי בכיווניות של הפסקא ולא רק בתוכן או הגופן). יש כמה מנועים שמשובצים בכל toolkit שנותנים לך מענה.

בקיצור - זה לא חלק מהשפה. אבל רב הזמן זה עובד שקוף.
מה אתה צריך לעשות בדיוק?


נתחיל ברמה הכי נאיבית, איך מתרגמים את ה-y שבקטע הקוד הזה לתו עברי?
קוד:

char x ='y'
cout << x
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 19/10/2017 - 06:47
נושא ההודעה:

קוד:

char x ='ע'
cout << x

עברית זה unicode כמו בערך כל שפה אחרת היום
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
borsoodלא בפורום כעת ת.הצטרפות: 05/01/2007 · הודעות: 273 ·
 

הודעה פורסם: 19/10/2017 - 07:24
נושא ההודעה:

זה בטוח לא יעבוד. ++C עדיין לא מגדירה יוניקוד היטב.
האפשרויות הן:
קוד:
wchar_t x ='ע'
cout << x

או יותר טוב:
קוד:
std::string s =u8"ע"
cout << s
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית ביקור באתר המפרסם  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 20/10/2017 - 14:55
נושא ההודעה:

אחת ההרחבות ב boost, מאפשרת לך לכתוב את כל המחרוזות באנגלית, ולתרגם לעברית ולשפות אחרות בקובץ טקסט נפרד. בצורה כזאת אתה מתכנת רק מחרוזות באנגלית, ומפריד את העברית מהתכנה. אתה יכול לאפשר למתרגמים שהם לא מתכנתים להוסיף תרגום לתוכנה שלך בשפתם. זאת פרקטיקה נפוצה בקוד פתוח.
יש גם הרחבות נוספות שעושות את זה, אבל היתרון ב boost זה שהוא הכי בסיסי וסטנדרטי שאני מכיר, ולא תלוי במ"ה או שולחן עבודה.
http://www.boost.org/doc/libs/1_65_0/libs/locale/doc/html/messages_formatting.html
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
yyyלא בפורום כעת ת.הצטרפות: 16/04/2018 · הודעות: 1 ·
 

הודעה פורסם: 16/04/2018 - 23:30
נושא ההודעה:

borsood :
זה בטוח לא יעבוד. ++C עדיין לא מגדירה יוניקוד היטב.
האפשרויות הן:
קוד:
wchar_t x ='ע'
cout << x

או יותר טוב:
קוד:
std::string s =u8"ע"
cout << s


אצלי זה:
קוד:
wchar_t x ='ע';
cout << x << endl;

לא עובד אלא רק מחזיר את המספר 55202 ובהידור כותב את האזהרה
קוד:
warning: multi-character character constant [-Wmultichar].


וזה
קוד:
std::string s=u8"ע";
cout << s;

מחזיר את שגיאות ההידור:
קוד:
error: ‘u8’ was not declared in this scope
 error: expected ‘,’ or ‘;’ before string constant
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
borsoodלא בפורום כעת ת.הצטרפות: 05/01/2007 · הודעות: 273 ·
 

הודעה פורסם: 17/04/2018 - 07:11
נושא ההודעה:

לחלק מהקומפילרים אתה צריך לומר שאתה רוצה לעבוד ב++c מודרני.
תוסיף
קוד:
--std=c++11
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית ביקור באתר המפרסם  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 17/04/2018 - 09:17
נושא ההודעה:

אתה מערבב בין תו קצר (single byte char) לבין תו ארוך wide char -
ב std::cout אתה משתמש לתוים קצרים ול multibyte (יוניקוד)
ב std::wcout אתה משתמש בשביל תווים ארוכים.

אתה יכול להמיר wchar_t ל multibyte עם wcstombs
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 17/04/2018 - 14:53
נושא ההודעה:

זה:
קוד:
wchar_t x ='ע';
wcout << x << endl;

נותן אזהרה בהידור warning: multi-character character constant [-Wmultichar] וכשמריצים מדפיס
קוד:
 ?

גם נסיון להריץ את הלולאה הבאה:
קוד:

wchar_t x =150000;
for (;x>=0;x--)
    if (x=='ע')
       wcout << x << endl;

מביא לאותה תוצאה, הן לגבי אזהרת ההידור, והן לגבי ההצגה של "?" בודד. (אני לא יודע מה הטווח של התקן (יוניקוד?) שמכיל האות "ע", ולכן לקחתי מספר 150000 שחשבתי שהוא גבוה מספיק)


וזה:
קוד:
std::string s=u8"ע";
cout << s;

עובד רק עם cout, ולא עם wcout, רק שכאן נסיון להריץ לולאה שתציג את כל האותיות כמו בדוגמה למעלה נתקל בשגיאה. אני מניח שיש דרך אחרת לבצע זאת.
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 17/04/2018 - 21:04
נושא ההודעה:

קוד:
#include <iostream>

int main()
{
   wchar_t w = L'ע';
   std::wcout << w << std::endl;
   return 0;
}
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
borsoodלא בפורום כעת ת.הצטרפות: 05/01/2007 · הודעות: 273 ·
 

הודעה פורסם: 18/04/2018 - 07:33
נושא ההודעה:

wchat_t לא נתמך היטב בלינוקס. בכל מקרה מהפכת האימוג'י מביאה לזה שגם בMS נוטשים את הקידוד הזה ועוברים לurf-8.

הקוד הבא יעבוד עם utf8 אבל לא בסביבות MS ו wchar_t ו wcout
קוד:
#include <iostream>
#include <string>

int main()
{
  std::string s = u8"🤦" ;
  std::cout << s << '\n';
  return 0;
}

התצוגה היא בהתאם לזמינות הגופנים בסביבת ההרצה.
בסופו של דבר ברור שהתמיכה ביוניקוד בשפה קצת לא טובה, יש קבוצת עבודה שעובדת על זה, מקווה שהדברים ישתפרו לקראת c++20
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית ביקור באתר המפרסם  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
הצגת הודעות מלפני:     
מעבר אל:  
כל הזמנים הם GMT + 2 שעות
תגובה לנושא
צפיה בנושא הבא Printable version התחבר כדי לבדוק הודעות פרטיות צפיה בנושא הקודם
PNphpBB2 © 2003-2004 

תוכן הדיון

  1. אורח [C++IST]
  2. elcuco
  3. אורח [C++IST]
  4. אורח
  5. borsood
  6. אורח
  7. yyy
  8. borsood
  9. אורח
  10. אורח
  11. אורח
  12. borsood

Google Ads