How can I get a list of supported languages, map language IDs to names, and show language selector in PowerPoint presentations?

StackOverflow https://stackoverflow.com/questions/14672517

  •  06-03-2022
  •  | 
  •  

Domanda

I am working on a "fix language in entire document" script with a proper GUI for language selection. However, I am unable to programmatically generate a list of all languages PowerPoint knows including the language names in the user's own language.

For this reason, I am looking for the following:

  • A way to programmatically enumerate msoLanguageIds
  • A way to programmatically map msoLanguageIds to language names in the user's own language

In Word, I could use the Language object, but that doesn't seem to exist in PowerPoint.

Alternatively, a way to show the user a dialog that will set the DefaultLanguageID would be sufficient (I could grab the desired language from there).

I couldn't even find a way to set that via the GUI. Showing a similar language selector and getting the result would obviously do the job, too.

The target platform is Office 2007.

È stato utile?

Soluzione

What about using Word Languages collection which contains Language objects in PowerPoint macro? So you can get the Language-Name for the MsoLanguageID Enum values. Here you can find the languages Office is available in.

' Powerpoint code
' add reference to word lib.
    
    Public Sub test()
        Dim wordAppliacation As New Word.Application
        wordAppliacation.Visible = False
        
        On Error Resume Next
        
        Dim languageId As MsoLanguageID
        For languageId = msoLanguageIDArabic To msoLanguageIDSpanishPuertoRico
            Debug.Print languageId & ", " & wordAppliacation.Languages(languageId).Name & ", " & wordAppliacation.Languages(languageId).NameLocal
        Next languageId
        
        On Error GoTo 0
        
        wordAppliacation.Quit
        Set wordAppliacation = Nothing
    
    End Sub

Or maybe just like this in PowerPoint 2016:

    Dim lng As Word.language
    Dim lid As Long
    
    For Each lng In wordAppliacation.Languages
        lid = lng.id
        Debug.Print lid & ", " & wordAppliacation.Languages(lid).Name & ", " & wordAppliacation.Languages(lid).NameLocal
    Next lng

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top