Excel VBA中从英语到阿拉伯语的音译[重复]

问题描述 投票:0回答:0

我有一个巨大的工作表,我需要将其从英语音译成阿拉伯语。例如,我希望此单元格“维修电话”为“́ون فور ريبير”。这基本上意味着将字母从英语转换为阿拉伯语,不是从英语翻译成阿拉伯语

我确实为此搜索了一个特定的代码,但在我想出这段代码之前我找不到一个可行的解决方案。从理论上讲,它应该有效,但问题是它不起作用。我修复了我的 Windows 区域以允许阿拉伯语 Unicode,但它仍然没有返回任何值,而是返回空值。

Function ArabicTransliterate(inputStr As String) As String
    Dim outputStr As String
    Dim currentChar As String
    Dim nextChar As String
    Dim prevChar As String
    Dim i As Integer
    Dim lenStr As Integer
    Dim vowel As Boolean
    Dim isLastChar As Boolean
    
    lenStr = Len(inputStr)
    
    For i = 1 To lenStr
        currentChar = Mid(inputStr, i, 1)
        If i < lenStr Then
            nextChar = Mid(inputStr, i + 1, 1)
        Else
            nextChar = ""
        End If
        If i > 1 Then
            prevChar = Mid(inputStr, i - 1, 1)
        Else
            prevChar = ""
        End If
        
        Select Case currentChar
            Case "a", "A"
                If i = lenStr Then
                    outputStr = outputStr & "ة"
                ElseIf nextChar = "e" Or nextChar = "E" Then
                    outputStr = outputStr & "اي"
                ElseIf prevChar = "e" Or prevChar = "E" Then
                    outputStr = outputStr & "أ"
                Else
                    outputStr = outputStr & "ا"
                End If
                vowel = True
            Case "b", "B"
                outputStr = outputStr & "ب"
                vowel = False
            Case "c", "C"
                If nextChar = "h" Or nextChar = "H" Then
                    outputStr = outputStr & "تش"
                    i = i + 1
                Else
                    outputStr = outputStr & "ك"
                End If
                vowel = False
            Case "d", "D"
                outputStr = outputStr & "د"
                vowel = False
            Case "e", "E"
                If i = 1 And (nextChar = "u" Or nextChar = "U") Then
                    outputStr = outputStr & "يو"
                ElseIf prevChar = "a" Or prevChar = "A" Then
                    outputStr = outputStr & "أ"
                ElseIf prevChar = "e" Or prevChar = "E" Then
                    outputStr = outputStr & "ي"
                ElseIf prevChar = "i" Or prevChar = "I" Then
                    outputStr = outputStr & "إ"
                Else
                    outputStr = outputStr & "ا"
                End If
                vowel = True
            Case "f", "F"
                outputStr = outputStr & "ف"
                vowel = False
            Case "g", "G"
                outputStr = outputStr & "ج"
                vowel = False
            Case "h", "H"
                If prevChar = "t" Or prevChar = "T" Then
                    outputStr = outputStr & "ة"
                ElseIf prevChar = "s" Or prevChar = "S" Then
                    outputStr = outputStr & "ش"
                Else
                    outputStr = outputStr & "ه"
                End If
                vowel = False
            Case "i", "I"
                If i = lenStr And (prevChar = "e" Or prevChar = "E") Then
                    outputStr = outputStr & "ي"
                ElseIf i = lenStr And (prevChar = "o" Or prevChar = "O") Then
                    outputStr = outputStr & "يو"
                ElseIf i = lenStr And prevChar <> "" Then
                    outputStr = outputStr & "ي"
                ElseIf prevChar = "a" Or prevChar = "A" Then
                    outputStr = outputStr & "أ"
                ElseIf prevChar = "e" Or prevChar = "E" Then
                    outputStr = outputStr & "ي"
                ElseIf prevChar = "u" Or prevChar = "U" Then
                    outputStr = outputStr & "و"
                ElseIf prevChar = "o" Or prevChar = "O" Then
                    outputStr = outputStr & "و"
                Else
                    outputStr = outputStr & "ي"
                End If
                vowel = True
            Case "j", "J"
                outputStr = outputStr & "ج"
                vowel = False
            Case "k", "K"
                outputStr = outputStr & "ك"
                vowel = False
            Case "l", "L"
                outputStr = outputStr & "ل"
                vowel = False
            Case "m", "M"
                outputStr = outputStr & "م"
                vowel = False
            Case "n", "N"
                outputStr = outputStr & "ن"
                vowel = False
            Case "o", "O"
                If i = 1 And (nextChar = "u" Or nextChar = "U") Then
                    outputStr = outputStr & "يو"
                ElseIf prevChar = "a" Or prevChar = "A" Then
                    outputStr = outputStr & "أ"
                ElseIf prevChar = "e" Or prevChar = "E" Then
                    outputStr = outputStr & "ي"
                ElseIf prevChar = "i" Or prevChar = "I" Then
                    outputStr = outputStr & "إ"
                Else
                    outputStr = outputStr & "ا"
                End If
                vowel = True
            Case "p", "P"
                outputStr = outputStr & "ب"
                vowel = False
            Case "q", "Q"
                outputStr = outputStr & "ك"
                vowel = False
            Case "r", "R"
                outputStr = outputStr & "ر"
                vowel = False
            Case "s", "S"
                If nextChar = "h" Or nextChar = "H" Then
                    outputStr = outputStr & "ش"
                    i = i + 1
                Else
                    outputStr = outputStr & "س"
                End If
                vowel = False
            Case "t", "T"
                If nextChar = "h" Or nextChar = "H" Then
                    outputStr = outputStr & "ث"
                    i = i + 1
                ElseIf nextChar = "i" Or nextChar = "I" Then
                    outputStr = outputStr & "ت"
                    i = i + 1
                ElseIf nextChar = "e" Or nextChar = "E" Then
                    outputStr = outputStr & "ت"
                    i = i + 1
                ElseIf nextChar = "a" Or nextChar = "A" Then
                    outputStr = outputStr & "ت"
                    i = i + 1
                Else
                    outputStr = outputStr & "ت"
                End If
                vowel = False
            Case "u", "U"
                If prevChar = "a" Or prevChar = "A" Then
                    outputStr = outputStr & "أ"
                ElseIf prevChar = "e" Or prevChar = "E" Then
                    outputStr = outputStr & "أ" !----------------------------------------------------------------
                ElseIf prevChar = "i" Or prevChar = "I" Then
                    outputStr = outputStr & "إ"
                Else
                    outputStr = outputStr & "ا"
                End If
                vowel = True
            Case "v", "V"
                outputStr = outputStr & "ف"
                vowel = False
            Case "w", "W"
                outputStr = outputStr & "و"
                vowel = False
            Case "x", "X"
                outputStr = outputStr & "كس"
                vowel = False
            Case "y", "Y"
                If i = lenStr And (prevChar = "a" Or prevChar = "A") Then
                    outputStr = outputStr & "ئ"
                ElseIf i = lenStr And (prevChar = "e" Or prevChar = "E") Then
                    outputStr = outputStr & "ي"
                ElseIf i = lenStr And (prevChar = "i" Or prevChar = "I") Then
                    outputStr = outputStr & "ي"
                ElseIf i = lenStr And (prevChar = "o" Or prevChar = "O") Then
                    outputStr = outputStr & "ي"
                ElseIf nextChar = "a" Or nextChar = "A" Then
                    outputStr = outputStr & "ي"
                ElseIf nextChar = "e" Or nextChar = "E" Then
                    outputStr = outputStr & "ي"
                ElseIf nextChar = "i" Or nextChar = "I" Then
                    outputStr = outputStr & "ي"
                ElseIf nextChar = "o" Or nextChar = "O" Then
                    outputStr = outputStr & "ي"
                ElseIf prevChar = "a" Or prevChar = "A" Then
                    outputStr = outputStr & "آ"
                ElseIf prevChar = "e" Or prevChar = "E" Then
                    outputStr = outputStr & "ي"
                ElseIf prevChar = "i" Or prevChar = "I" Then
                    outputStr = outputStr & "ي"
                ElseIf prevChar = "o" Or prevChar = "O" Then
                    outputStr = outputStr & "ي"
                Else
                    outputStr = outputStr & "ي"
                End If
                vowel = True
            Case "z", "Z"
                outputStr = outputStr & "ز"
                vowel = False
            Case " "
                outputStr = outputStr & " "
                vowel = False
            Case "-"
                outputStr = outputStr & "-"
                vowel = False
            Case "_"
                outputStr = outputStr & "_"
                vowel = False
            Case "."
                outputStr = outputStr & "."
                vowel = False
            Case Else
                'Handles any other characters that are not letters, numbers, or spaces
                outputStr = outputStr & currentChar
                vowel = False
        End Select
        prevChar = currentChar
    Next i

    'Return the translated string
    ArabicTranslate = outputStr
End Function
excel vba unicode arabic
© www.soinside.com 2019 - 2024. All rights reserved.