Skip to content

Commit 701bd6c

Browse files
committed
Multilingual support improvements
## [1.5.0] - Unreleased ### Added - Multilingual support for AsBuiltReport Core module - `Initialize-LocalizedData` function to handle localization for both Core and Report modules - `Resolve-Culture` function with comprehensive culture fallback chains for 135+ culture variants - Localized user prompts and messages in `New-AsBuiltConfig` function. Initial support for English, Spanish & French. - `ReportLanguage` parameter to `New-AsBuiltReport` function with dynamic validation based on available languages in report modules - Support for setting default language in report JSON configuration files using the `Report.Language` property - Improve error handling with comprehensive try-catch blocks and meaningful error messages ### Changed - Core module functions (`New-AsBuiltConfig`, `New-AsBuiltReport`, `New-AsBuiltReportConfig`) now default to user's OS language instead of hardcoded English - Report modules default to 'en-US' when no language is specified - Updated parameter validation to use ValidateScript blocks for dynamic language detection - Enhanced error messages to include specific language and module information - Improved progress messaging during report generation - Updated all y/n prompts in `New-AsBuiltConfig` to show defaults and handle empty input
1 parent 6ee326d commit 701bd6c

17 files changed

+563
-192
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
.claude/

AsBuiltReport.Core.Style.ps1

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
11
# AsBuiltReport Default Document Style
2-
Initialize-SessionLocalization -ScriptRoot $PSScriptRoot -LanguageFile 'DefaultStyle'
2+
try {
3+
# Try to initialize localized data for style elements
4+
if ($PSScriptRoot) {
5+
Initialize-LocalizedData -ModuleBasePath $PSScriptRoot -LanguageFile 'AsBuiltReportCoreStyle' -ModuleType 'Core'
6+
} else {
7+
# Fallback if $PSScriptRoot is not available
8+
$StyleModulePath = Split-Path -Path $MyInvocation.MyCommand.Path -Parent
9+
Initialize-LocalizedData -ModuleBasePath $StyleModulePath -LanguageFile 'AsBuiltReportCoreStyle' -ModuleType 'Core'
10+
}
11+
} catch {
12+
# If localization fails, continue with default style (don't break report generation)
13+
Write-Warning "Could not load style localization: $($_.Exception.Message)"
14+
}
315

416
# Configure document options
517
DocumentOption -EnableSectionNumbering -PageSize A4 -DefaultFont 'Segoe Ui' -MarginLeftAndRight 71 -MarginTopAndBottom 71 -Orientation $Orientation

CHANGELOG.md

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
88
## [1.5.0] - Unreleased
99

1010
### Added
11-
- Add multilingual support for core module
12-
13-
### Changed
14-
- UI enhancements
15-
- Improve error handling
11+
- Multilingual support for AsBuiltReport Core module
12+
- `Initialize-LocalizedData` function to handle localization for both Core and Report modules
13+
- `Resolve-Culture` function with comprehensive culture fallback chains for 135+ culture variants
14+
- Localized user prompts and messages in `New-AsBuiltConfig` function. Initial support for English, Spanish & French.
15+
- `ReportLanguage` parameter to `New-AsBuiltReport` function with dynamic validation based on available languages in report modules
16+
- Support for setting default language in report JSON configuration files using the `Report.Language` property
17+
- Improve error handling with comprehensive try-catch blocks and meaningful error messages
18+
19+
### Changed
20+
- Core module functions (`New-AsBuiltConfig`, `New-AsBuiltReport`, `New-AsBuiltReportConfig`) now default to user's OS language instead of hardcoded English
21+
- Report modules default to 'en-US' when no language is specified
22+
- Updated parameter validation to use ValidateScript blocks for dynamic language detection
23+
- Enhanced error messages to include specific language and module information
24+
- Improved progress messaging during report generation
25+
- Updated all y/n prompts in `New-AsBuiltConfig` to show defaults and handle empty input
1626

1727
## [1.4.3] - 2025-03-08
1828

@@ -134,7 +144,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
134144

135145
## [1.0.0] - 2019-03-26
136146
### Added
137-
- `AsBuiltReport.Core` module created to provide core as built report functionality
147+
- `AsBuiltReport.Core` module created to provide core AsBuiltReport functionality
138148

139149
### Changed
140150
- `AsBuiltReport` module simply becomes a manifest to install required core and report modules
@@ -148,7 +158,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
148158

149159
## [0.4.0] - 2019-03-16
150160
### Added
151-
- `New-AsbuiltConfig` cmdlet to generate a base As Built Report JSON configuration file
161+
- `New-AsbuiltConfig` cmdlet to generate a base AsBuiltReport JSON configuration file
152162
- `New-AsBuiltReport` cmdlet to generate a report JSON configuration file
153163
- Username and Password parameters on `New-AsBuiltReport`
154164
- Support for setting the document orientation for the output report
@@ -169,5 +179,5 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
169179
- New As-Built JSON configuration structure
170180
- new `AsBuiltConfigPath` parameter
171181
- allows unique configuration files to be created and saved
172-
- if `AsBuiltConfigPath` parameter is not specified, user is prompted for As Built report configuration information
182+
- if `AsBuiltConfigPath` parameter is not specified, user is prompted for AsBuiltReport configuration information
173183
- `New-AsBuiltConfig.ps1` & `Config.json` files are no longer required
File renamed without changes.

Language/en-US/New-AsBuiltConfig.psd1

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ ReportInfo = ConvertFrom-StringData @'
1010
# Company Configuration
1111
CompanyConfig = ConvertFrom-StringData @'
1212
BannerTitle = Company Information
13-
CompanyInfo = Would you like to enter company information for the As Built Report? (y/n)
13+
CompanyInfo = Would you like to enter company information for the As Built Report? (y/N)
1414
CompanyFullName = Enter the Full Company Name
1515
CompanyShortName = Enter the Company Short Name
1616
CompanyContact = Enter the Company Contact
@@ -22,21 +22,21 @@ CompanyConfig = ConvertFrom-StringData @'
2222
# Email Configuration
2323
EmailConfig = ConvertFrom-StringData @'
2424
BannerTitle = Email Configuration
25-
ConfigureMailSettings = Would you like to enter SMTP configuration? (y/n)
25+
ConfigureMailSettings = Would you like to enter SMTP configuration? (y/N)
2626
MailServer = Enter the mail server FQDN / IP address
2727
EmptyMailServerAddress = Mail server address cannot be empty. Please enter a valid mail server FQDN / IP address.
2828
InvalidMailServer = '{0}' is not a valid FQDN or IP address. Please enter a valid mail server FQDN / IP address.
2929
MailServerPort587 = Enter the mail server port number [587]
3030
InvalidMailServerPort587 = Invalid port number. Please enter a number between 1 and 65535, or press Enter for default [587].
3131
MailServerPort25 = Enter the mail server port number [25]
3232
InvalidMailServerPort25 = Invalid port number. Please enter a number between 1 and 65535, or press Enter for default [25].
33-
MailServerUseSSL = Use SSL for mail server connection? (y/n)
34-
MailCredentials = Require mail server authentication? (y/n)
33+
MailServerUseSSL = Use SSL for mail server connection? (y/N)
34+
MailCredentials = Require mail server authentication? (y/N)
3535
MailFrom = Enter the mail sender email address
3636
MailTo = Enter the mail server recipient email address
3737
EmptyEmail = Email address cannot be empty. Please enter a valid email address.
3838
InvalidEmail = '{0}' is not a valid email address. Please enter a valid email address.
39-
AnotherRecipient = Do you want to enter another recipient? (y/n)
39+
AnotherRecipient = Do you want to enter another recipient? (y/N)
4040
MailBodyPrompt = Enter the email message body content
4141
MailBody = As Built Report attached
4242
'@
@@ -45,10 +45,10 @@ EmailConfig = ConvertFrom-StringData @'
4545
ReportConfig = ConvertFrom-StringData @'
4646
BannerTitle = As Built Report Configuration
4747
ReportConfigFolder = Enter the full path of the folder to use for storing report configuration files and custom style scripts [{0}]
48-
OverwriteReportConfig = A report configuration file already exists in the specified folder for {0}. Would you like to overwrite it? (y/n)
48+
OverwriteReportConfig = A report configuration file for {0} already exists in the specified folder. Would you like to overwrite it? (y/N)
4949
CopyFile = Copying '{0}' to '{1}'.
5050
OverwriteFile = Copying '{0}' to '{1}'. Overwriting existing file.
51-
SaveAsBuiltConfig = Would you like to save the As Built Report configuration file? (y/n)
51+
SaveAsBuiltConfig = Would you like to save the As Built Report configuration file? (Y/n)
5252
AsBuiltName = Enter a name for the As Built Report configuration file [AsBuiltReport]
5353
AsBuiltExportPath = Enter the path to save the As Built Report configuration file [{0}]
5454
ConfigFolder = Creating As Built Report configuration folder '{0}'.

Language/es-ES/DefaultStyle.psd1 renamed to Language/es-ES/AsBuiltReportCoreStyle.psd1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@ ConvertFrom-StringData @'
77
Author = Autor:
88
Date = Fecha:
99
Version = Versión:
10-
TOC = Tabla de contenido
10+
TOC = Tabla de Contenido
1111
'@

Language/es-ES/New-AsBuiltConfig.psd1

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ ReportInfo = ConvertFrom-StringData @'
1010
# Configuración de la Empresa
1111
CompanyConfig = ConvertFrom-StringData @'
1212
BannerTitle = Información de la Empresa
13-
CompanyInfo = ¿Desea ingresar información de la empresa para el Informe Según Construcción? (y/n)
13+
CompanyInfo = ¿Desea ingresar información de la empresa para el Informe Según Construcción? (y/N)
1414
CompanyFullName = Ingrese el Nombre Completo de la Empresa
1515
CompanyShortName = Ingrese el Nombre Corto de la Empresa
1616
CompanyContact = Ingrese el Contacto de la Empresa
@@ -22,21 +22,21 @@ CompanyConfig = ConvertFrom-StringData @'
2222
# Configuración de Correo Electrónico
2323
EmailConfig = ConvertFrom-StringData @'
2424
BannerTitle = Configuración de Correo Electrónico
25-
ConfigureMailSettings = ¿Le gustaría ingresar la configuración SMTP? (y/n)
25+
ConfigureMailSettings = ¿Le gustaría ingresar la configuración SMTP? (y/N)
2626
MailServer = Ingrese el FQDN / dirección IP del servidor de correo
2727
EmptyMailServerAddress = La dirección del servidor de correo no puede estar vacía. Por favor ingrese un FQDN / dirección IP válida del servidor de correo.
2828
InvalidMailServer = '{0}' no es un FQDN o dirección IP válida. Por favor ingrese un FQDN / dirección IP válida del servidor de correo.
2929
MailServerPort587 = Ingrese el número de puerto del servidor de correo [587]
3030
InvalidMailServerPort587 = Número de puerto inválido. Por favor ingrese un número entre 1 y 65535, o presione Enter para el valor predeterminado [587].
3131
MailServerPort25 = Ingrese el número de puerto del servidor de correo [25]
3232
InvalidMailServerPort25 = Número de puerto inválido. Por favor ingrese un número entre 1 y 65535, o presione Enter para el valor predeterminado [25].
33-
MailServerUseSSL = ¿Se requiere autenticación del servidor de correo? (y/n)
34-
MailCredentials = ¿Requiere autenticación del servidor de correo? (y/n)
33+
MailServerUseSSL = ¿Se requiere autenticación del servidor de correo? (y/N)
34+
MailCredentials = ¿Requiere autenticación del servidor de correo? (y/N)
3535
MailFrom = Ingrese la dirección de correo electrónico del remitente
3636
MailTo = Introduzca la dirección de correo electrónico del destinatario del servidor de correo
3737
EmptyEmail = La dirección de correo electrónico no puede estar vacía. Por favor ingrese una dirección de correo electrónico válida.
3838
InvalidEmail = '{0}' no es una dirección de correo electrónico válida. Por favor ingrese una dirección de correo electrónico válida.
39-
AnotherRecipient = ¿Quieres introducir otro destinatario? (y/n)
39+
AnotherRecipient = ¿Quieres introducir otro destinatario? (y/N)
4040
MailBodyPrompt = Ingrese el contenido del cuerpo del mensaje de correo electrónico
4141
MailBody = Informe As Built adjunto
4242
'@
@@ -45,10 +45,10 @@ EmailConfig = ConvertFrom-StringData @'
4545
ReportConfig = ConvertFrom-StringData @'
4646
BannerTitle = Configuración del Informe Según Construcción
4747
ReportConfigFolder = Ingrese la ruta completa de la carpeta a usar para almacenar archivos de configuración del informe y scripts de estilo personalizados [{0}]
48-
OverwriteReportConfig = Ya existe un archivo de configuración del informe en la carpeta especificada para {0}. ¿Le gustaría sobrescribirlo? (y/n)
48+
OverwriteReportConfig = Ya existe un archivo de configuración para {0} del informe en la carpeta especificada. ¿Le gustaría sobrescribirlo? (y/N)
4949
CopyFile = Copiando '{0}' a '{1}'.
5050
OverwriteFile = Copiando '{0}' a '{1}'. Sobrescribiendo archivo existente.
51-
SaveAsBuiltConfig = ¿Le gustaría guardar el archivo de configuración del Informe As Built? (y/n)
51+
SaveAsBuiltConfig = ¿Le gustaría guardar el archivo de configuración del Informe As Built? (Y/n)
5252
AsBuiltName = Ingrese un nombre para el archivo de configuración del Informe As Built [AsBuiltReport]
5353
AsBuiltExportPath = Ingrese la ruta para guardar el archivo de configuración del Informe As Built [{0}]
5454
ConfigFolder = Creando carpeta de configuración del Informe As Built '{0}'.
File renamed without changes.

Language/fr-FR/New-AsBuiltConfig.psd1

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ ReportInfo = ConvertFrom-StringData @'
1010
# Configuration de l'entreprise
1111
CompanyConfig = ConvertFrom-StringData @'
1212
BannerTitle = Information de l'entreprise
13-
CompanyInfo = Souhaitez-vous saisir les informations de l'entreprise pour le rapport As Built ? (y/n)
13+
CompanyInfo = Souhaitez-vous saisir les informations de l'entreprise pour le rapport As Built ? (y/N)
1414
CompanyFullName = Entrez le nom complet de l'entreprise
1515
CompanyShortName = Entrez le nom abrégé de l'entreprise
1616
CompanyContact = Entrez le contact de l'entreprise
@@ -22,21 +22,21 @@ CompanyConfig = ConvertFrom-StringData @'
2222
# Configuration de la messagerie électronique
2323
EmailConfig = ConvertFrom-StringData @'
2424
BannerTitle = Configuration de la messagerie électronique
25-
ConfigureMailSettings = Souhaitez-vous configurer le SMTP ? (y/n)
25+
ConfigureMailSettings = Souhaitez-vous configurer le SMTP ? (y/N)
2626
MailServer = Entrez le FQDN / l'adresse IP du serveur de messagerie
2727
EmptyMailServerAddress = L'adresse du serveur de messagerie ne peut pas être vide. Veuillez saisir un nom de domaine complet (FQDN) ou une adresse IP valide.
2828
InvalidMailServer = {0} n'est pas un nom de domaine complet (FQDN) ni une adresse IP valide. Veuillez saisir un nom de domaine complet (FQDN) ou une adresse IP de serveur de messagerie valide.
2929
MailServerPort587 = Entrez le numéro de port du serveur de messagerie [587]
3030
InvalidMailServerPort587 = Numéro de port non valide. Veuillez saisir un numéro compris entre 1 et 65535, ou appuyez sur Entrée pour la valeur par défaut. [587].
3131
MailServerPort25 = Entrez le numéro de port du serveur de messagerie [25]
3232
InvalidMailServerPort25 = Numéro de port non valide. Veuillez saisir un numéro compris entre 1 et 65535, ou appuyez sur Entrée pour la valeur par défaut. [25].
33-
MailServerUseSSL = Utiliser SSL pour la connexion au serveur de messagerie? (y/n)
34-
MailCredentials = Exiger une authentification du serveur de messagerie? (y/n)
33+
MailServerUseSSL = Utiliser SSL pour la connexion au serveur de messagerie? (y/N)
34+
MailCredentials = Exiger une authentification du serveur de messagerie? (y/N)
3535
MailFrom = Saisissez l'adresse e-mail de l'expéditeur du courrier
3636
MailTo = Saisissez l'adresse e-mail du destinataire du serveur de messagerie
3737
EmptyEmail = L'adresse e-mail ne peut pas être vide. Veuillez saisir une adresse e-mail valide.
3838
InvalidEmail = '{0}' n'est pas une adresse e-mail valide. Veuillez saisir une adresse e-mail valide.
39-
AnotherRecipient = Voulez-vous saisir un autre destinataire? (y/n)
39+
AnotherRecipient = Voulez-vous saisir un autre destinataire? (y/N)
4040
MailBodyPrompt = Saisissez le contenu du corps du message électronique
4141
MailBody = Rapport de construction ci-joint
4242
'@
@@ -45,10 +45,10 @@ EmailConfig = ConvertFrom-StringData @'
4545
ReportConfig = ConvertFrom-StringData @'
4646
BannerTitle = Configuration du rapport tel que construit
4747
ReportConfigFolder = Saisissez le chemin complet du dossier à utiliser pour stocker les fichiers de configuration de rapport et les scripts de style personnalisés [{0}]
48-
OverwriteReportConfig = Un fichier de configuration de rapport existe déjà dans le dossier spécifié pour {0}. Souhaitez-vous le remplacer? (y/n)
48+
OverwriteReportConfig = Un fichier de configuration de rapport pour {0} existe déjà dans le dossier spécifié. Souhaitez-vous le remplacer? (y/N)
4949
CopyFile = Copie de '{0}' vers '{1}'.
5050
OverwriteFile = Copie de {0} vers {1}. Écrasement du fichier existant.
51-
SaveAsBuiltConfig = Souhaitez-vous enregistrer le fichier de configuration du rapport As Built ? (y/n)
51+
SaveAsBuiltConfig = Souhaitez-vous enregistrer le fichier de configuration du rapport As Built ? (Y/n)
5252
AsBuiltName = Entrez un nom pour le fichier de configuration du rapport As Built [AsBuiltReport]
5353
AsBuiltExportPath = Entrez le chemin pour enregistrer le fichier de configuration du rapport As Built [{0}]
5454
ConfigFolder = Création d'un dossier de configuration de rapport tel que construit '{0}'.

0 commit comments

Comments
 (0)