Public/Get-DeeplGlossarySupportedLanguagePair.ps1

<#PSScriptInfo
 
.VERSION 1.2.0
 
.GUID 7dc3619d-1192-40d8-92d1-dc85de4f29a1
 
.AUTHOR diko@admins-little-helper.de
 
.COMPANYNAME
 
.COPYRIGHT (c) 2022 All rights reserved.
 
.TAGS DeepL Translate Translation
 
.LICENSEURI https://github.com/admins-little-helper/DeeplTranslate/blob/main/LICENSE
 
.PROJECTURI https://github.com/admins-little-helper/DeeplTranslate
 
.ICONURI
 
.EXTERNALMODULEDEPENDENCIES
 
.REQUIREDSCRIPTS
 
.EXTERNALSCRIPTDEPENDENCIES
 
.RELEASENOTES
    1.0.0
    Initial release
 
    1.0.1
    Fixed issue with empty Uri in verbose output.
     
    1.1.0
    Updated way to get DeepL Api Uri and Http Status codes.
     
    1.2.0
    Updated list of supported source and target languages.
#>



<#
 
.DESCRIPTION
Contains a function to retrieve a list of supported language pairs that can be used in a glossary for a DeepL account.
More information about the DeepL API can be found here: https://www.deepl.com/de/docs-api/introduction/.
 
To use this PowerShell function, a DeepL ApiKey is needed which requires an account. To register for an account, go to www.deepl.com.
 
 
.LINK
https://github.com/admins-little-helper/DeeplTranslate
 
.LINK
https://www.deepl.com
 
.LINK
https://www.deepl.com/de/docs-api/introduction/
     
#>



function Get-DeeplGlossarySupportedLanguagePair {
    <#
    .SYNOPSIS
    Retrieves a list of supported language pairs that can be used in a glossary.
 
    .DESCRIPTION
    The 'Get-DeeplGlossarySupportedLanguagePair' function retrieves a list of supported language pairs that can be used in a glossary.
 
    .PARAMETER ApiKey
    API authentication key. You need an authentication key to access the DeepL API. Refer to the DeepL API documentation for more information.
 
    .EXAMPLE
    Get-DeeplGlossarySupportedLanguagePair -ApiKey "<MyApiKey>"
 
    source_lang target_lang
    ----------- -----------
    de en
    de es
    de fr
    de ja
    de it
    de pl
    de nl
    en de
    en es
    en fr
    en ja
    en it
    en pl
    en nl
    es de
    es en
    es fr
    es ja
    es it
    es pl
    es nl
    fr de
    fr en
    fr es
    fr ja
    fr it
    fr pl
    fr nl
    ja de
    ja en
    ja es
    ja fr
    ja it
    ja pl
    ja nl
    it de
    it en
    it es
    it fr
    it ja
    it pl
    it nl
    pl de
    pl en
    pl es
    pl fr
    pl ja
    pl it
    pl nl
    nl de
    nl en
    nl es
    nl fr
    nl ja
    nl it
    nl pl
 
    This example shows how to retrieve a list supported languages for glossaries.
 
    .INPUTS
    Nothing
 
    .OUTPUTS
    System.Management.Automation.PSCustomObject
 
    .NOTES
    Author: Dieter Koch
    Email: diko@admins-little-helper.de
 
    .LINK
    https://github.com/admins-little-helper/DeeplTranslate/blob/main/Help/Get-DeeplGlossarySupportedLanguagePair.txt
 
    #>


    [CmdletBinding()]
    param (
        [ValidateNotNullOrEmpty()]
        [string]
        $ApiKey
    )

    # Set a default list of supported language pairs to have something that this function will return in case
    # the Api call to retrieve the list of supported glossary language pairs fails with an error.
    # This list is valid as of 2023-02-23.
    $GlossaryLanguagePairs = [PSCustomObject]@{
        supported_languages = @(
            [PSCustomObject]@{
                "source_lang" = "de"
                "target_lang" = "en"
            },
            [PSCustomObject]@{
                "source_lang" = "de"
                "target_lang" = "es"
            },
            [PSCustomObject]@{
                "source_lang" = "de"
                "target_lang" = "fr"
            },
            [PSCustomObject]@{
                "source_lang" = "de"
                "target_lang" = "ja"
            },
            [PSCustomObject]@{
                "source_lang" = "de"
                "target_lang" = "it"
            },
            [PSCustomObject]@{
                "source_lang" = "de"
                "target_lang" = "pl"
            },
            [PSCustomObject]@{
                "source_lang" = "de"
                "target_lang" = "nl"
            },
            [PSCustomObject]@{
                "source_lang" = "en"
                "target_lang" = "de"
            },
            [PSCustomObject]@{
                "source_lang" = "en"
                "target_lang" = "es"
            },
            [PSCustomObject]@{
                "source_lang" = "en"
                "target_lang" = "fr"
            },
            [PSCustomObject]@{
                "source_lang" = "en"
                "target_lang" = "ja"
            },
            [PSCustomObject]@{
                "source_lang" = "en"
                "target_lang" = "it"
            },
            [PSCustomObject]@{
                "source_lang" = "en"
                "target_lang" = "pl"
            },
            [PSCustomObject]@{
                "source_lang" = "en"
                "target_lang" = "nl"
            },
            [PSCustomObject]@{
                "source_lang" = "es"
                "target_lang" = "de"
            },
            [PSCustomObject]@{
                "source_lang" = "es"
                "target_lang" = "en"
            },
            [PSCustomObject]@{
                "source_lang" = "es"
                "target_lang" = "fr"
            },
            [PSCustomObject]@{
                "source_lang" = "es"
                "target_lang" = "ja"
            },
            [PSCustomObject]@{
                "source_lang" = "es"
                "target_lang" = "it"
            },
            [PSCustomObject]@{
                "source_lang" = "es"
                "target_lang" = "pl"
            },
            [PSCustomObject]@{
                "source_lang" = "es"
                "target_lang" = "nl"
            },
            [PSCustomObject]@{
                "source_lang" = "fr"
                "target_lang" = "de"
            },
            [PSCustomObject]@{
                "source_lang" = "fr"
                "target_lang" = "en"
            },
            [PSCustomObject]@{
                "source_lang" = "fr"
                "target_lang" = "es"
            },
            [PSCustomObject]@{
                "source_lang" = "fr"
                "target_lang" = "ja"
            },
            [PSCustomObject]@{
                "source_lang" = "fr"
                "target_lang" = "it"
            },
            [PSCustomObject]@{
                "source_lang" = "fr"
                "target_lang" = "pl"
            },
            [PSCustomObject]@{
                "source_lang" = "fr"
                "target_lang" = "nl"
            },
            [PSCustomObject]@{
                "source_lang" = "ja"
                "target_lang" = "de"
            },
            [PSCustomObject]@{
                "source_lang" = "ja"
                "target_lang" = "en"
            },
            [PSCustomObject]@{
                "source_lang" = "ja"
                "target_lang" = "es"
            },
            [PSCustomObject]@{
                "source_lang" = "ja"
                "target_lang" = "fr"
            },
            [PSCustomObject]@{
                "source_lang" = "ja"
                "target_lang" = "it"
            },
            [PSCustomObject]@{
                "source_lang" = "ja"
                "target_lang" = "pl"
            },
            [PSCustomObject]@{
                "source_lang" = "ja"
                "target_lang" = "nl"
            },
            [PSCustomObject]@{
                "source_lang" = "it"
                "target_lang" = "de"
            },
            [PSCustomObject]@{
                "source_lang" = "it"
                "target_lang" = "en"
            },
            [PSCustomObject]@{
                "source_lang" = "it"
                "target_lang" = "es"
            },
            [PSCustomObject]@{
                "source_lang" = "it"
                "target_lang" = "fr"
            },
            [PSCustomObject]@{
                "source_lang" = "it"
                "target_lang" = "ja"
            },
            [PSCustomObject]@{
                "source_lang" = "it"
                "target_lang" = "pl"
            },
            [PSCustomObject]@{
                "source_lang" = "it"
                "target_lang" = "nl"
            },
            [PSCustomObject]@{
                "source_lang" = "pl"
                "target_lang" = "de"
            },
            [PSCustomObject]@{
                "source_lang" = "pl"
                "target_lang" = "en"
            },
            [PSCustomObject]@{
                "source_lang" = "pl"
                "target_lang" = "es"
            },
            [PSCustomObject]@{
                "source_lang" = "pl"
                "target_lang" = "fr"
            },
            [PSCustomObject]@{
                "source_lang" = "pl"
                "target_lang" = "ja"
            },
            [PSCustomObject]@{
                "source_lang" = "pl"
                "target_lang" = "it"
            },
            [PSCustomObject]@{
                "source_lang" = "pl"
                "target_lang" = "nl"
            },
            [PSCustomObject]@{
                "source_lang" = "nl"
                "target_lang" = "de"
            },
            [PSCustomObject]@{
                "source_lang" = "nl"
                "target_lang" = "en"
            },
            [PSCustomObject]@{
                "source_lang" = "nl"
                "target_lang" = "es"
            },
            [PSCustomObject]@{
                "source_lang" = "nl"
                "target_lang" = "fr"
            },
            [PSCustomObject]@{
                "source_lang" = "nl"
                "target_lang" = "ja"
            },
            [PSCustomObject]@{
                "source_lang" = "nl"
                "target_lang" = "it"
            },
            [PSCustomObject]@{
                "source_lang" = "nl"
                "target_lang" = "pl"
            }
        )
    }

    if ([string]::IsNullOrEmpty($ApiKey)) {
        # Return the list of statically defined language pairs, in case no ApiKey was specified.
        Write-Verbose -Message "Returning statically defined list of supported language pairs because no ApiKey was specified to query the DeepL Api service."
    }
    else {
        $BaseUri = Get-DeeplApiUri -ApiKey $ApiKey

        try {
            # Set the authorization header.
            $Headers = @{ Authorization = "DeepL-Auth-Key $ApiKey" }

            # Set parameters for the Invoke-RestMethod cmdlet.
            $Params = @{
                Method  = 'GET'
                Uri     = "$BaseUri/glossary-language-pairs"
                Headers = $Headers                    
            }
                
            # Try to retrieve the list of supported languages that can be used for a glossary.
            Write-Verbose -Message "Calling Uri: $($Params.Uri)"
            $GlossaryLanguagePairs = Invoke-RestMethod @Params
        }
        catch [Microsoft.PowerShell.Commands.HttpResponseException] {
            $ErrorMessage = Get-DeeplStatusCode -StatusCode $_.Exception.Response.StatusCode
            if ($null -ne $ErrorMessage) {
                Write-Error -Message $ErrorMessage
            }
            else {
                Write-Error -Message "Http Status Code: $_"
            }
        }
        catch {
            Write-Verbose -Message "An unknown error occured."
            Write-Error -ErrorRecord $_
        }
    }
        
    # Return the list of language pairs, that either was retrieved from the DeepL Api, or in case of error created statically in this script.
    $GlossaryLanguagePairs.supported_languages
}


#region EndOfScript
<#
################################################################################
################################################################################
#
# ______ _ __ _____ _ _
# | ____| | | / _| / ____| (_) | |
# | |__ _ __ __| | ___ | |_ | (___ ___ _ __ _ _ __ | |_
# | __| | '_ \ / _` | / _ \| _| \___ \ / __| '__| | '_ \| __|
# | |____| | | | (_| | | (_) | | ____) | (__| | | | |_) | |_
# |______|_| |_|\__,_| \___/|_| |_____/ \___|_| |_| .__/ \__|
# | |
# |_|
################################################################################
################################################################################
# created with help of http://patorjk.com/software/taag/
#>

#endregion