Public/Get-DeeplSupportedLanguage.ps1
<#PSScriptInfo
.VERSION 1.2.0 .GUID c58c97a3-6664-4b38-af19-f12aca4715cc .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.0.2 Fixed issue with tab completion in case an ApiKey with an invalid format is specified. 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 the supported source and target langueges for the DeepL Api. 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-DeeplSupportedLanguage { <# .SYNOPSIS Retrieves the supported source and target langueges for the DeepL Api. .DESCRIPTION The 'Get-DeeplSupportedLanguage' function retrieves the supported source and target langueges of the DeepL Api. .PARAMETER ApiKey API authentication key. You need an authentication key to access the DeepL API. Refer to the DeepL API documentation for more information. .PARAMETER TargetLanguage If specified or set to $true, the functions returns the list of supported target languages. If ommitted or set to $false the functions returns the list of supported source languages. .EXAMPLE Get-DeeplSupportedLanguage -ApiKey "<MyApiKey>" language name -------- ---- BG Bulgarian CS Czech DA Danish DE German EL Greek EN English ES Spanish ET Estonian FI Finnish FR French HU Hungarian ID Indonesian IT Italian JA Japanese KO Korean LT Lithuanian LV Latvian NB Norwegian NL Dutch PL Polish PT Portuguese RO Romanian RU Russian SK Slovak SL Slovenian SV Swedish TR Turkish UK Ukrainian ZH Chinese This example shows how to retrieve a list of supported source languages. .EXAMPLE Get-DeeplSupportedLanguage -ApiKey "<MyApiKey>" -TargetLanguage language name supports_formality -------- ---- ------------------ BG Bulgarian False CS Czech False DA Danish False DE German True EL Greek False EN-GB English (British) False EN-US English (American) False ES Spanish True ET Estonian False FI Finnish False FR French True HU Hungarian False ID Indonesian False IT Italian True JA Japanese False KO Korean False LT Lithuanian False LV Latvian False NB Norwegian False NL Dutch True PL Polish True PT-BR Portuguese (Brazilian) True PT-PT Portuguese (European) True RO Romanian False RU Russian True SK Slovak False SL Slovenian False SV Swedish False TR Turkish False UK Ukrainian False ZH Chinese (simplified) False This example shows how to retrieve a list of supported target languages. .EXAMPLE Get-DeeplSupportedLanguage -ApiKey "<MyApiKey>" -TargetLanguage -Verbose VERBOSE: Provided ApiKey ends with ':fx'. Using DeepL Api Free service URI. VERBOSE: Parameter 'TargetLanguage' specified. Retrieving list of supported target languages. VERBOSE: Sending request. VERBOSE: GET with 0-byte payload VERBOSE: received 1871-byte response of content type application/json VERBOSE: Content encoding: utf-8 language name supports_formality -------- ---- ------------------ BG Bulgarian False CS Czech False DA Danish False DE German True EL Greek False EN-GB English (British) False EN-US English (American) False ES Spanish True ET Estonian False FI Finnish False FR French True HU Hungarian False ID Indonesian False IT Italian True JA Japanese False KO Korean False LT Lithuanian False LV Latvian False NB Norwegian False NL Dutch True PL Polish True PT-BR Portuguese (Brazilian) True PT-PT Portuguese (European) True RO Romanian False RU Russian True SK Slovak False SL Slovenian False SV Swedish False TR Turkish False UK Ukrainian False ZH Chinese (simplified) False This example shows how to retrieve a list of supported target languages and showing verbose output. .EXAMPLE "<MyApiKey>" | Get-DeeplSupportedLanguage language name -------- ---- BG Bulgarian CS Czech DA Danish DE German EL Greek EN English ES Spanish ET Estonian FI Finnish FR French HU Hungarian ID Indonesian IT Italian JA Japanese KO Korean LT Lithuanian LV Latvian NB Norwegian NL Dutch PL Polish PT Portuguese RO Romanian RU Russian SK Slovak SL Slovenian SV Swedish TR Turkish UK Ukrainian ZH Chinese This example shows how to retrieve a list of supported source languages by piping the ApiKey. .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-DeeplSupportedLanguage.txt #> [CmdletBinding()] param ( [ValidateNotNullOrEmpty()] [string] $ApiKey, [switch] $TargetLanguage ) # Set a default list of supported source languages to have something that this function will return in case # the Api call to retrieve the list of supported languages fails with an error. # This list is valid as of 2023-02-23. $SupportedSourceLanguage = @( [PSCustomObject]@{ "language" = "BG" "name" = "Bulgarian" } [PSCustomObject]@{ "language" = "CS" "name" = "Czech" } [PSCustomObject]@{ "language" = "DA" "name" = "Danish" } [PSCustomObject]@{ "language" = "DE" "name" = "German" } [PSCustomObject]@{ "language" = "EL" "name" = "Greek" } [PSCustomObject]@{ "language" = "EN" "name" = "English" } [PSCustomObject]@{ "language" = "ES" "name" = "Spanish" } [PSCustomObject]@{ "language" = "ET" "name" = "Estonian" } [PSCustomObject]@{ "language" = "FI" "name" = "Finnish" } [PSCustomObject]@{ "language" = "FR" "name" = "French" } [PSCustomObject]@{ "language" = "HU" "name" = "Hungarian" } [PSCustomObject]@{ "language" = "ID" "name" = "Indonesian" } [PSCustomObject]@{ "language" = "IT" "name" = "Italian" } [PSCustomObject]@{ "language" = "JA" "name" = "Japanese" } [PSCustomObject]@{ "language" = "KO" "name" = "Korean" } [PSCustomObject]@{ "language" = "LT" "name" = "Lithuanian" } [PSCustomObject]@{ "language" = "LV" "name" = "Latvian" } [PSCustomObject]@{ "language" = "NB" "name" = "Norwegian" } [PSCustomObject]@{ "language" = "NL" "name" = "Dutch" } [PSCustomObject]@{ "language" = "PL" "name" = "Polish" } [PSCustomObject]@{ "language" = "PT" "name" = "Portuguese" } [PSCustomObject]@{ "language" = "RO" "name" = "Romanian" } [PSCustomObject]@{ "language" = "RU" "name" = "Russian" } [PSCustomObject]@{ "language" = "SK" "name" = "Slovak" } [PSCustomObject]@{ "language" = "SL" "name" = "Slovenian" } [PSCustomObject]@{ "language" = "SV" "name" = "Swedish" } [PSCustomObject]@{ "language" = "TR" "name" = "Turkish" } [PSCustomObject]@{ "language" = "UK" "name" = "Ukrainian" } [PSCustomObject]@{ "language" = "ZH" "name" = "Chinese" } ) # Set a default list of supported target languages to have something that this function will return in case # the Api call to retrieve the list of supported languages fails with an error. # This list is valid as of 2023-02-23. $SupportedTargetLanguage = @( [PSCustomObject]@{ "language" = "BG" "name" = "Bulgarian" "supports_formality" = $false } [PSCustomObject]@{ "language" = "CS" "name" = "Czech" "supports_formality" = $false } [PSCustomObject]@{ "language" = "DA" "name" = "Danish" "supports_formality" = $false } [PSCustomObject]@{ "language" = "DE" "name" = "German" "supports_formality" = $true } [PSCustomObject]@{ "language" = "EL" "name" = "Greek" "supports_formality" = $false } [PSCustomObject]@{ "language" = "EN-GB" "name" = "English (British)" "supports_formality" = $false } [PSCustomObject]@{ "language" = "EN-US" "name" = "English (American)" "supports_formality" = $false } [PSCustomObject]@{ "language" = "ES" "name" = "Spanish" "supports_formality" = $true } [PSCustomObject]@{ "language" = "ET" "name" = "Estonian" "supports_formality" = $false } [PSCustomObject]@{ "language" = "FI" "name" = "Finnish" "supports_formality" = $false } [PSCustomObject]@{ "language" = "FR" "name" = "French" "supports_formality" = $true } [PSCustomObject]@{ "language" = "HU" "name" = "Hungarian" "supports_formality" = $false } [PSCustomObject]@{ "language" = "ID" "name" = "Indonesian" "supports_formality" = $false } [PSCustomObject]@{ "language" = "IT" "name" = "Italian" "supports_formality" = $true } [PSCustomObject]@{ "language" = "JA" "name" = "Japanese" "supports_formality" = $false } [PSCustomObject]@{ "language" = "KO" "name" = "Korean" "supports_formality" = $false } [PSCustomObject]@{ "language" = "LT" "name" = "Lithuanian" "supports_formality" = $false } [PSCustomObject]@{ "language" = "LV" "name" = "Latvian" "supports_formality" = $false } [PSCustomObject]@{ "language" = "NB" "name" = "Norwegian" "supports_formality" = $false } [PSCustomObject]@{ "language" = "NL" "name" = "Dutch" "supports_formality" = $true } [PSCustomObject]@{ "language" = "PL" "name" = "Polish" "supports_formality" = $true } [PSCustomObject]@{ "language" = "PT-BR" "name" = "Portuguese (Brazilian)" "supports_formality" = $true } [PSCustomObject]@{ "language" = "PT-PT" "name" = "Portuguese (European)" "supports_formality" = $true } [PSCustomObject]@{ "language" = "RO" "name" = "Romanian" "supports_formality" = $false } [PSCustomObject]@{ "language" = "RU" "name" = "Russian" "supports_formality" = $true } [PSCustomObject]@{ "language" = "SK" "name" = "Slovak" "supports_formality" = $false } [PSCustomObject]@{ "language" = "SL" "name" = "Slovenian" "supports_formality" = $false } [PSCustomObject]@{ "language" = "SV" "name" = "Swedish" "supports_formality" = $false } [PSCustomObject]@{ "language" = "TR" "name" = "Turkish" "supports_formality" = $false } [PSCustomObject]@{ "language" = "UK" "name" = "Ukrainian" "supports_formality" = $false } [PSCustomObject]@{ "language" = "ZH" "name" = "Chinese (simplified)" "supports_formality" = $false } ) # Test if an ApiKey was specified and if it's a valid GUID (without a trailing ':fx' 'DeepL API free' marker) if ([string]::IsNullOrEmpty($ApiKey) -or (-not (Test-IsGuid($ApiKey -replace "(:fx)$", "")))) { # Return the list of statically defined language pairs, in case no ApiKey was specified. Write-Verbose -Message "Returning statically defined list of supported languages because no or an invalid ApiKey was specified to query the DeepL Api service." if ($TargetLanguage.IsPresent) { $SupportedLanguages = $SupportedTargetLanguage } else { $SupportedLanguages = $SupportedSourceLanguage } $SupportedLanguages } else { $BaseUri = Get-DeeplApiUri -ApiKey $ApiKey if ($TargetLanguage.IsPresent) { # Set the type parameter to value 'target' to retrieve a list of supported target languages. Write-Verbose -Message "Parameter 'TargetLanguage' specified. Retrieving list of supported target languages." $Uri = "$BaseUri/languages?type=target" } else { # Set the type parameter to value 'source' to retrieve a list of supported source languages. # The parameter 'type' is optional. If omitted, it will return a list of supported source languages. But we specifically set it here. Write-Verbose -Message "Retrieving list of supported source languages." $Uri = "$BaseUri/languages" } try { # Set the authorization header. $Headers = @{ Authorization = "DeepL-Auth-Key $ApiKey" } # Set parameters for the Invoke-RestMethod cmdlet. $Params = @{ Method = 'GET' Uri = $Uri Headers = $Headers } # Try to retrieve the list of supported source or target languages. Write-Verbose -Message "Calling Uri: $($Params.Uri)" $SupportedLanguages = Invoke-RestMethod @Params $SupportedLanguages } 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." $_ } } } #region EndOfScript <# ################################################################################ ################################################################################ # # ______ _ __ _____ _ _ # | ____| | | / _| / ____| (_) | | # | |__ _ __ __| | ___ | |_ | (___ ___ _ __ _ _ __ | |_ # | __| | '_ \ / _` | / _ \| _| \___ \ / __| '__| | '_ \| __| # | |____| | | | (_| | | (_) | | ____) | (__| | | | |_) | |_ # |______|_| |_|\__,_| \___/|_| |_____/ \___|_| |_| .__/ \__| # | | # |_| ################################################################################ ################################################################################ # created with help of http://patorjk.com/software/taag/ #> #endregion |