דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. שינוי שפת תוכנה

שינוי שפת תוכנה

מתוזמן נעוץ נעול הועבר תכנות
13 פוסטים 4 כותבים 375 צפיות 4 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • א מנותק
    א מנותק
    ארי
    כתב ב נערך לאחרונה על ידי
    #1

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

    dovidD OdedDvirO 2 תגובות תגובה אחרונה
    0
    • א ארי

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

      dovidD מחובר
      dovidD מחובר
      dovid
      ניהול
      כתב ב נערך לאחרונה על ידי dovid
      #2

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

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

      • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
      • בכל נושא אפשר ליצור קשר dovid@tchumim.com
      תגובה 1 תגובה אחרונה
      8
      • א ארי

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

        OdedDvirO מנותק
        OdedDvirO מנותק
        OdedDvir
        כתב ב נערך לאחרונה על ידי OdedDvir
        #3

        @ארי לענ"ד הפתרון שלך הוא הנכון. כמה נקודות למחשבה:
        1.צור טבלה עם הערכים השונים לכל שפה.
        2. אם תתן שם ראוי לכל פקד, התחזוקה של טבלת השפה תהיה קלה ביותר.
        3. מבנה הטבלה הוא כזה:

        FormName ControlName HebrewCaption EnglishCaption
        frmSomeForm cmdView הצג View

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

        עריכה:
        תוך כדי כתיבה ראיתי שכבר דוד קדמני. בכל מקרה אני מוסיף כאן את הקוד בטעינת טופס:
        בהנחה ששם השפה נמצא במשתנה CurrentLanguageName:

        Dim ctrl As Control
        For Each ctrl In Me.Controls
           Select Case ctrl.ControlType
              Case acLabel, acTextBox
                 Dim TextValue As String
                 TextValue = Nz(DLookup(CurrentLanguageName & "Caption", "LangTable", _
                 "FormName='" & Me.Name & "' AND ControlName='" & ctrl.Name &"'"),"")
                 If Len(TextValue) > 0) Then
                    If ctrl.ControlType = acLabel Then
                        ctrl.Caption = TextValue
                    Else
                        ctrl.Value = TextValue
                    End If
                 End If
           End Select
        Next ctrl
        
        clickoneC תגובה 1 תגובה אחרונה
        7
        • א מנותק
          א מנותק
          ארי
          כתב ב נערך לאחרונה על ידי
          #4

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

          OdedDvirO תגובה 1 תגובה אחרונה
          0
          • א ארי

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

            OdedDvirO מנותק
            OdedDvirO מנותק
            OdedDvir
            כתב ב נערך לאחרונה על ידי OdedDvir
            #5

            @ארי אמר בשינוי שפת תוכנה:

            כי ככה יותר קל להפנות לטבלה.

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

            א תגובה 1 תגובה אחרונה
            4
            • OdedDvirO OdedDvir

              @ארי אמר בשינוי שפת תוכנה:

              כי ככה יותר קל להפנות לטבלה.

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

              א מנותק
              א מנותק
              ארי
              כתב ב נערך לאחרונה על ידי
              #6

              @odeddvir מקבל.
              שוב תודה רבה!

              תגובה 1 תגובה אחרונה
              0
              • OdedDvirO OdedDvir

                @ארי לענ"ד הפתרון שלך הוא הנכון. כמה נקודות למחשבה:
                1.צור טבלה עם הערכים השונים לכל שפה.
                2. אם תתן שם ראוי לכל פקד, התחזוקה של טבלת השפה תהיה קלה ביותר.
                3. מבנה הטבלה הוא כזה:

                FormName ControlName HebrewCaption EnglishCaption
                frmSomeForm cmdView הצג View

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

                עריכה:
                תוך כדי כתיבה ראיתי שכבר דוד קדמני. בכל מקרה אני מוסיף כאן את הקוד בטעינת טופס:
                בהנחה ששם השפה נמצא במשתנה CurrentLanguageName:

                Dim ctrl As Control
                For Each ctrl In Me.Controls
                   Select Case ctrl.ControlType
                      Case acLabel, acTextBox
                         Dim TextValue As String
                         TextValue = Nz(DLookup(CurrentLanguageName & "Caption", "LangTable", _
                         "FormName='" & Me.Name & "' AND ControlName='" & ctrl.Name &"'"),"")
                         If Len(TextValue) > 0) Then
                            If ctrl.ControlType = acLabel Then
                                ctrl.Caption = TextValue
                            Else
                                ctrl.Value = TextValue
                            End If
                         End If
                   End Select
                Next ctrl
                
                clickoneC מנותק
                clickoneC מנותק
                clickone
                כתב ב נערך לאחרונה על ידי clickone
                #7

                @odeddvir
                שינוי קטנטן שהייתי מציע (זה זניח כמו שכתבת)
                במקום לעבור על הפקדים בטופס ואז עם DlookUp לחפש את ההתאמה שלהם בטבלה, לקחת מהטבלה את כל מה שמתאים ואז לרוץ בלופ על הטבלה
                קוד לדוגמא: (אני כותב כאן בשליפה אז ייתכנו טעויות כתיב...)
                כמובן שכל הקוד נכתב כאן אז לצערי אין הזחות וכו.... (אין לי אקסס זמין הרגע)

                dim rs as recordset
                set rs=currentdb.openrecordset("select * from LangTable Where FormName='" & Me.Name & "'"
                
                do until rs.eof
                if me(rs!ControlName).ControlType= acLabel Then
                me(rs!ControlName).Caption=rs(CurrentLanguageName & "Caption")
                Else
                me(rs!ControlName).Value=rs(CurrentLanguageName & "Caption")
                End If
                rs.movenext
                loop
                

                אין טסט כמו פרודקשן.

                המייל שלי urivpn@gmail.com

                א תגובה 1 תגובה אחרונה
                8
                • clickoneC clickone

                  @odeddvir
                  שינוי קטנטן שהייתי מציע (זה זניח כמו שכתבת)
                  במקום לעבור על הפקדים בטופס ואז עם DlookUp לחפש את ההתאמה שלהם בטבלה, לקחת מהטבלה את כל מה שמתאים ואז לרוץ בלופ על הטבלה
                  קוד לדוגמא: (אני כותב כאן בשליפה אז ייתכנו טעויות כתיב...)
                  כמובן שכל הקוד נכתב כאן אז לצערי אין הזחות וכו.... (אין לי אקסס זמין הרגע)

                  dim rs as recordset
                  set rs=currentdb.openrecordset("select * from LangTable Where FormName='" & Me.Name & "'"
                  
                  do until rs.eof
                  if me(rs!ControlName).ControlType= acLabel Then
                  me(rs!ControlName).Caption=rs(CurrentLanguageName & "Caption")
                  Else
                  me(rs!ControlName).Value=rs(CurrentLanguageName & "Caption")
                  End If
                  rs.movenext
                  loop
                  
                  א מנותק
                  א מנותק
                  ארי
                  כתב ב נערך לאחרונה על ידי ארי
                  #8

                  @clickone הבעיה היא שאם יש בטבלה שדה שהפקד שלו נמחק לדוג' אז זה יחזיר שגיאה.
                  אבל תמיד אפשר לעשות תנאי לפני זה שאם אין פקד כזה הוא יעבור הלאה.
                  עריכה, איך אפשר לכתוב תנאי כזה?
                  הקוד הזה הוא יותר מהיר מלולאה על כל הפקדים בטופס?
                  תודה!

                  OdedDvirO תגובה 1 תגובה אחרונה
                  0
                  • א ארי

                    @clickone הבעיה היא שאם יש בטבלה שדה שהפקד שלו נמחק לדוג' אז זה יחזיר שגיאה.
                    אבל תמיד אפשר לעשות תנאי לפני זה שאם אין פקד כזה הוא יעבור הלאה.
                    עריכה, איך אפשר לכתוב תנאי כזה?
                    הקוד הזה הוא יותר מהיר מלולאה על כל הפקדים בטופס?
                    תודה!

                    OdedDvirO מנותק
                    OdedDvirO מנותק
                    OdedDvir
                    כתב ב נערך לאחרונה על ידי
                    #9

                    @ארי אמר בשינוי שפת תוכנה:

                    עריכה, איך אפשר לכתוב תנאי כזה?

                    הנה הקוד של @clickone , בשינויים קלים (והזחה 😊 )

                    Public Function ControlExistsInForm(frm As Form, ctrlName As String) As Boolean
                        On Error Resume Next
                            ControlExistsInForm = Not frm.Controls(ctrlName) Is Nothing
                        On Error GoTo 0
                    End Function
                        
                    Private Sub Form_Load()
                        Dim rs As Recordset
                        Set rs = CurrentDb.OpenRecordset("SELECT * FROM LangTable WHERE FormName='" & Me.Name & "'")
                        While Not rs.EOF
                            If ControlExistsInForm(Me, rs!ControlName) Then
                                If Me(rs!ControlName).ControlType = acLabel Then
                                    Me(rs!ControlName).Caption = rs(CurrentLanguageName & "Caption")
                                Else
                                    Me(rs!ControlName).Value = rs(CurrentLanguageName & "Caption")
                                End If
                                rs.MoveNext
                            End If
                        Wend
                    End Sub
                    
                    

                    הקוד הזה הוא יותר מהיר מלולאה על כל הפקדים בטופס?

                    כן, כי הוא בודק רק את הפקדים שבטבלת התרגום.

                    clickoneC תגובה 1 תגובה אחרונה
                    5
                    • OdedDvirO OdedDvir

                      @ארי אמר בשינוי שפת תוכנה:

                      עריכה, איך אפשר לכתוב תנאי כזה?

                      הנה הקוד של @clickone , בשינויים קלים (והזחה 😊 )

                      Public Function ControlExistsInForm(frm As Form, ctrlName As String) As Boolean
                          On Error Resume Next
                              ControlExistsInForm = Not frm.Controls(ctrlName) Is Nothing
                          On Error GoTo 0
                      End Function
                          
                      Private Sub Form_Load()
                          Dim rs As Recordset
                          Set rs = CurrentDb.OpenRecordset("SELECT * FROM LangTable WHERE FormName='" & Me.Name & "'")
                          While Not rs.EOF
                              If ControlExistsInForm(Me, rs!ControlName) Then
                                  If Me(rs!ControlName).ControlType = acLabel Then
                                      Me(rs!ControlName).Caption = rs(CurrentLanguageName & "Caption")
                                  Else
                                      Me(rs!ControlName).Value = rs(CurrentLanguageName & "Caption")
                                  End If
                                  rs.MoveNext
                              End If
                          Wend
                      End Sub
                      
                      

                      הקוד הזה הוא יותר מהיר מלולאה על כל הפקדים בטופס?

                      כן, כי הוא בודק רק את הפקדים שבטבלת התרגום.

                      clickoneC מנותק
                      clickoneC מנותק
                      clickone
                      כתב ב נערך לאחרונה על ידי clickone
                      #10

                      @odeddvir תודה על ההזחה 🙂 (והקוד...)
                      2 דברים קטנים נוספים

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

                      אין טסט כמו פרודקשן.

                      המייל שלי urivpn@gmail.com

                      OdedDvirO תגובה 1 תגובה אחרונה
                      4
                      • clickoneC clickone

                        @odeddvir תודה על ההזחה 🙂 (והקוד...)
                        2 דברים קטנים נוספים

                        1. צריך להתייחס גם לפקדים של כפתור
                        2. מתאים שתהיה פונקציה חיצונית שתעשה את זה בחוץ ורק תקבל את הטופס (ואתה אלוף בזה, כרגיל)
                        OdedDvirO מנותק
                        OdedDvirO מנותק
                        OdedDvir
                        כתב ב נערך לאחרונה על ידי OdedDvir
                        #11

                        @clickone אמר בשינוי שפת תוכנה:

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

                        נו נו, אין מסרבין לגדול:

                        Public Function ControlExistsInForm(frm As Form, ctrlName As String) As Boolean
                            On Error Resume Next
                                ControlExistsInForm = Not frm.Controls(ctrlName) Is Nothing
                            On Error GoTo 0
                        End Function
                            
                        Public Sub TranslateForm(frm As Form, CurrentLanguageName As String)
                            Dim rs As Recordset
                            Set rs = CurrentDb.OpenRecordset("SELECT * FROM LangTable WHERE FormName='" & frm.Name & "'")
                            While Not rs.EOF
                                Dim ctrlName As String
                                ctrlName = rs!ControlName
                                ctrlCaption = rs(CurrentLanguageName & "Caption")
                                If ControlExistsInForm(frm, ctrlName) Then
                                    Select Case frm.Controls(ctrlName).ControlType
                                        Case acLabel, acCommandButton
                                            frm(ctrlName).Caption = ctrlCaption
                                        Case Else
                                            frm(ctrlName).Value = ctrlCaption
                                    End Select
                                End If
                                rs.MoveNext
                            Wend
                        End Sub
                        
                        Private Sub Form_Load()
                            TranslateForm Me, "English"
                        End Sub
                        
                        א תגובה 1 תגובה אחרונה
                        6
                        • OdedDvirO OdedDvir

                          @clickone אמר בשינוי שפת תוכנה:

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

                          נו נו, אין מסרבין לגדול:

                          Public Function ControlExistsInForm(frm As Form, ctrlName As String) As Boolean
                              On Error Resume Next
                                  ControlExistsInForm = Not frm.Controls(ctrlName) Is Nothing
                              On Error GoTo 0
                          End Function
                              
                          Public Sub TranslateForm(frm As Form, CurrentLanguageName As String)
                              Dim rs As Recordset
                              Set rs = CurrentDb.OpenRecordset("SELECT * FROM LangTable WHERE FormName='" & frm.Name & "'")
                              While Not rs.EOF
                                  Dim ctrlName As String
                                  ctrlName = rs!ControlName
                                  ctrlCaption = rs(CurrentLanguageName & "Caption")
                                  If ControlExistsInForm(frm, ctrlName) Then
                                      Select Case frm.Controls(ctrlName).ControlType
                                          Case acLabel, acCommandButton
                                              frm(ctrlName).Caption = ctrlCaption
                                          Case Else
                                              frm(ctrlName).Value = ctrlCaption
                                      End Select
                                  End If
                                  rs.MoveNext
                              Wend
                          End Sub
                          
                          Private Sub Form_Load()
                              TranslateForm Me, "English"
                          End Sub
                          
                          א מנותק
                          א מנותק
                          ארי
                          כתב ב נערך לאחרונה על ידי
                          #12

                          @odeddvir חוזר לי שגיאה על השורה הזאת

                          ctrlName = rs(ControlName)
                          
                          OdedDvirO תגובה 1 תגובה אחרונה
                          0
                          • א ארי

                            @odeddvir חוזר לי שגיאה על השורה הזאת

                            ctrlName = rs(ControlName)
                            
                            OdedDvirO מנותק
                            OdedDvirO מנותק
                            OdedDvir
                            כתב ב נערך לאחרונה על ידי OdedDvir
                            #13

                            @ארי אמר בשינוי שפת תוכנה:

                            ctrlName = rs(ControlName)

                            צודק. צ"ל ctrlName = rs("ControlName") או ctrlName = rs!ControlName
                            תיקנתי במקור.

                            תגובה 1 תגובה אחרונה
                            3
                            • OdedDvirO OdedDvir התייחס לנושא זה ב
                            תגובה
                            • תגובה כנושא
                            התחברו כדי לפרסם תגובה
                            • מהישן לחדש
                            • מהחדש לישן
                            • הכי הרבה הצבעות


                            בא תתחבר לדף היומי!
                            • התחברות

                            • אין לך חשבון עדיין? הרשמה

                            • התחברו או הירשמו כדי לחפש.
                            • פוסט ראשון
                              פוסט אחרון
                            0
                            • דף הבית
                            • קטגוריות
                            • פוסטים אחרונים
                            • משתמשים
                            • חיפוש
                            • חוקי הפורום