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