בילעוז האתר...

יחיאב

New member
בילעוז האתר...

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

tenen

New member
RESX, יש למיקרוסופט WEBCAST בנושא,

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

יחיאב

New member
אתה מתכוון

לזה? איך עובדים עם זה, בקווים כללים? איך זה מקל על העבודה? האם זו הדרך הכי נוחה ומקובלת? תודה
 

tenen

New member
אחרי שתעשה מה שהפנתי אותך לעשות

שזה לראות את הWEBCAST תשאל שאלות :) מבטיח שיהיו לך הרבה פחות
 

יחיאב

New member
סליחה שהמונח זר לי

אבל אין לי מושג מה זה webcast בהקשר הזה. ושנית, האם הRESX לא קשור לטכנולוגיית .NET? כי אם כן, אז השרת שלי לא תומך בזה, וכל הפתרון הזה לא ישים עבורי.
 

Xעמרי

New member
אני לא יודע מה הכי טוב, אני יודע מה אני עושה

קובץ XML שמכיל את כל הטקסטים בשפה שאני רוצה הקובץ נקרא למשל - language_hebrew.xml בכל מקום שאני רוצה להציג טקסט - אני משתמש בפונקציה ששולחת את הkey לXML ומחזירה את הערך שמוצג בדף כשאני רוצה ליצור שפה חדשה - אני שולח את הXMך לתרגום, מקבל, ונותן לו שם חדש, למשל: language_english.xml ויוצר תנאי (אפשר להשתמש בפרמטרט שנשלח בQS,session או קוקיז) שמעדכן את הפונקציה לקרוא לקובץ הנכון
 

יחיאב

New member
האם זה רלוונטי לאתר דינמי

למשל אם אני מוסיף קטע וידאו חדש, אז אני צריך לעדכן את קובץ הXML ולהוסיף שם את הפרטים בשאר השפות. מה לגבי הדרך הזו: בשדה הכותרת אני אכניס את כל הטקסט בעברית ובשפות אחרות. בשפות אחרות אני אכניס את הטקסט בין תגים מסוימים. למשל ||התחלת_אנגלית|| bla bla ||סוף_אנגלית|| ואח"כ במידה ומסומן לי שהמשתמש בחר אנגלית (כאמור, קוקיז, סשן, או QS) אז הטקסט שיוצג הוא רק הטקסט שבין התווים האלה. באופן הזה אני יכול לעדכן את כל הטקסט בדף הרגיל של הוספת/עדכון מידע באתר, ללא יצירת שדות נוספים, ללא קבצים נפרדים שצריך לטפל בהם ולהעלות לשרת.
 

[eLad]

New member
כדאי להפריד את התכנים לקבצים

ממספר סיבות 1. תרגום קל של כל האתר בקובץ אחד 2. שימוש חוזר באותה מחרוזת למספר מקומות ע"י אותו מפתח 3. השארת קבצי מבנה ה-HTML נקי ואחיד. 4. בעתיד תוכל להעביר את ניהול המחרוזות לתוך מסד הנתונים ולהשאיר את הקריאה הקיימת לפונקציות. בדרך זו לא תשכח לתרגם מחרוזות והכל יהיה מונח לפניך כמו שצריך. קובץ ה-XML צריך להכיל nodes של key/value, למשל:
<root> <str key="name" value="שם"/> <str key="email" value="דואר אלקטרוני"/> </root>​
אחרי שמירת השפה הנוכחית של הגולש, כמו שעומרי אמר, בעזרת Session/Cookies או קריאה מה-QS או מה-URL וטעינת קובץ ה-XML הנכון, צור פונקציה שתדע לפנות למחרוזת נכונה (ע"י xpath או איזשהו dictionary). למשל
<label for="email"><%=GetLanguageString("name")%></label> <input type="text" .../>​
אפשר וכדאי לטעון Dictionary לתוך ה-Application ולא לטעון מחדש את הקובץ בכל פעם.
 

יחיאב

New member
עוד שיקול שיש לקחת בחשבון: godgle

תקנו אותי אם אני טועה, אבל כדי שה-crawler של גוגל או של כל מנוע חיפוש אחר יתפוס את הדפים בכל השפות, צריך לתת לו לינק לדפים שיהיו בשפות האחרות, ולכן נראה שהדרך של QS עדיפה על סשן או קוקיז, לא? לגבי הפתרון של XML, אני מקווה שאצליח ליישם אותו. לא השתמשתי אף פעם בXML אז זה משהו שאצטרך ללמוד.
 

[eLad]

New member
אפשר גם וגם

פיתרון טוב יהיה שימוש ב-Url Rewrite. כלומר domain.com/fr/page.asp יהיה בצרפתית ואילו domain.com/he/page.asp יהיה בעברית. כמובן שיש רק קובץ page.asp אחד וה-IIS בעצם מנתב את הפנייה לעמוד המבוקש, פלוס יכולת שלך לקבל את ה-URL המקורי ולשלוף את השפה הנכונה. בנוסף כניסה ל domain.com/page.asp תוביל לשפה האחרונה בה היה המשתמש (מקוקי או סשן).
 

Admini

New member
אכן. עדיף QS

אפשר גם ספריה /he/file.aspx למשל ואחר כך בשרת לטפל בזה כדי שכל ה"תיקיות" יפנו לקבצים בודדים. אם אתה מסתבך עם XML, אתה יכול סתם ככה להכין קובץ מופרד בפסיקים או טאבים, צולע - אבל במקרה הזה יתן תוצאה זהה ולענ"ד ביצועים עדיפים.
 

[eLad]

New member
XML פשוט מאוד לעבודה

והרבה יותר גמיש לקריאה/חיפוש/כתיבה וכו'
 

[eLad]

New member
כל עוד אתה מכניס ל-cache

או במקרה שלנו, ASP, ל-Application, זה לא אמור להפריע.
 

יחיאב

New member
ממה שקראתי על XML, לא הבנתי מה יתרונו הגדול

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

אלעד מדבר על הטקסטים הסטטים של האתר, וזה אכן רצוי לשמור ב-XML או קובץ אחר כלשהו. יחיאב מדבר על הטקסטים המגיעים מהטבלאות בבסיס הנתונים, וזה לדעתי אין טעם להוציא לקבצים. מה שאני עושה עם טקסטים דינאמיים זה פשוט להוסיף לכל טבלה LangID, ובתצוגה להציג רק את הפריטים בשפה הנוכחית. אם צריך קשר בין הפריטים בפשוט השונות - יוצרים פריט "אב" בו שומרים את כל הנתונים שלא זקוקים תרגום, וטבלה נפרדת עם כל הפרטים המתורגמים + מס' פריט אב + langId, ושליפה באמצעות JOIN. שיטה שניה שאני הרבה פחות אוהבת - אם יש מס' שפות קבוע, פשוט ליצור שדות לכל שפה. הייתרון - קצת מהיר יותר. החסרון - קשה לתחזוקה, להוסיף שפה זה סיפור. שיטה שלישית - טבלה ראשית לתרגומים שתכיל tableID, fldID/name, value. מאוד קל ליצירה ותחזוקה, אבל נוצרת לפעמים בעייה בגלל שוגי שדות שונים. יתאים למקרים מאוד ספציפיים. שיטה רביעית - בכל זאת לייצר קבצי XML לכל טבלה, ואם שמים אותם בתיקיה מוגנת גם לא כל ילד יוכל להוריד את הנתונים שלך, אבל במערכות מורכבות זה נהיה קשה יותר לפיתוח, ולפעמים דורש גם כפילות פעולות (שליפה גם מהדיבי בשביל שאילתות מורכבות ואז הצגה מה-XML). ובטח יש עוד הרבה שיטות
 

יחיאב

New member
נכון

ואכן לטקסט סטאטי רצוי להשתמש בקובץ נפרד. אף אחת מהאפשרויות שציינת לא קרצה לי, כמי שגם עורך את התכנים אח"כ באתר. מה דעתך על האפשרות הזו: למשל לגבי טבלה שמכילה פרטים של קבצי וידאו. אני אוסיף שדה בוליאני לכל שפה. אם יש תרגום לצרפתית למשל, אז fr_lang יכיל ערך 1. בשדות עם טקסט, כגון "תיאור קטע הוידאו", אני אשים אחרי הטקסט בעברית, את הטקסט בצרפתית, בין מחרוזת קבועה מסוימת (כגון: ||תצרפתית|| , |סצרפתית||. בתצוגה בצרפתית אני אציג את הרשומות בהן השדה fr_lang מכיל 1, ורק את הטקסט שנמצא בין המחרוזות הנ"ל. בשונה ממה שהצעתי בפעם הקודמת, כאן השרת יעבוד פחות - כי רק במידה ואכן יש תרגום הוא יבצע את ניפוי הטקסט. אני מניח שניתן לעשות את ה"ניפוי" לא בצד שרת אלא אח"כ בקליינט, באמצעות JS. האופציה הזו לא מצריכה ליצור עשרות שדות חדשים (עם אופציה לנוספים כשיש שפה חדשה). היא אומנם קצת יותר איטית, אבל לא מדובר באתר עמוס גולשים, והוא גם לא צפוי להיות כזה, כך שספק עד כמה תורגש ההאטה. ומבחינת הצד שמוסיף ומעדכן תכנים באתר - עליו רק להיזהר שהוא לא יטעה בכתיבת המחרוזת. ומקסימום אם טעה, הוא יכול לתקן מיד.
 

[eLad]

New member
../images/Emo122.gif לא ממליץ

כל שינוי הכי קל ב-DB (שדה משהו בלתי נמנע כשמדובר באינטרנט) יגרור סט של שינויים אחריו. הוספת שפה = הוספת שדה לכל טבלה (כנ"ל מחיקה). במקום join פשוט תצטרך לפתח פארסר שימצא את המחרוזת הנכונה לפי השפה. אם תעשה את הניפוי ב-JS תאלץ להוריד את כל התוכן לצד לקוח. זה יכול להיות הרבה תוכן. מה גם ש-SEO לא יעבוד כמו שצריך אם התוכן הולך למשתנה JS. השיטה הראשונה שענבל הציעה היא הכי טובה לדעתי תוכל לקרוא עוד פה: http://www.codeproject.com/aspnet/LocalizedSamplePart2.asp וכן, בהודעות למעלה דיברתי על טקסט ממשק ולא על תוכן.
 

יחיאב

New member
OK, גם בעקבות מה שאלעד כתב

כנראה שהפתרון הראשון שהצעת הוא המתאים גם לי. אבל לא הבנתי איך לבנות את הטבלאות. כרגע יש לי טבלה ובה הכל עברית. ניקח דוגמא של טבלה של קטעי וידאו. נניח שיש בה רק 4 שדות: טבלת VIDEO video_id video_title video_details video_link לפי הצעתך אני צריך להוסיף שדה video_lang_id ? נניח שיש תרגום לשלוש שפות נוספות, מה זה נותן? לגבי הטבלה שתכיל את כל התרגומים, לא הבנתי האם את כל השפות? או לכל שפה טבלה משלה? תודה
 
משהו כזה:

VIDEO ========== video_id video_link VIDEO_TXT ============ video_id LangId video_title video_details והשליפה תיראה משהו כזה:
SELECT v.video_id, video_link, video_title, video_details FROM VIDEO v INNER JOIN VIDEO_TXT t ON v.video_id=t.video_id WHERE LangId=X​
כך שזה ישלוף לך את כל הפריטים המתורגמים לשפה X. (שים לב שאם מדובר באקסס יכול להיות שהסינטקס של ה-JOIN טיפה שונה, כבר המון זמן לא עבדתי עם אקסס).
 
למעלה