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

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

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

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

מתוזמן נעוץ נעול הועבר תכנות
13 פוסטים 4 כותבים 375 צפיות 4 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • א מנותק
    א מנותק
    ארי
    כתב ב נערך לאחרונה על ידי
    #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
                      • דף הבית
                      • קטגוריות
                      • פוסטים אחרונים
                      • משתמשים
                      • חיפוש
                      • חוקי הפורום