From 50696923190add8131f8a2de63ba0ae8e9688d85 Mon Sep 17 00:00:00 2001 From: Jean-Pierre Ledure Date: Tue, 1 Feb 2022 17:30:01 +0100 Subject: ScriptForge - (SF_Platform) refine locales So far, only SF_Platform.Locale was supported, returning the locale of the operating system. Now, 3 different locales may be considered: - SystemLocale: identical to Locale (still supported) - OfficeLocale: the locale associated with the LibreOffice installation - FormatLocale: the locale associated with how numbers and dates are formatted. Of course, in many cases all locales are identical. Anyway a distinction can be made. All these properties are read-only. Those properties are supported in Basic and Python evenly. Change-Id: I0792d49a052b1441a30ac231d61eda997dc4216a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/129297 Tested-by: Jean-Pierre Ledure Tested-by: Jenkins Reviewed-by: Jean-Pierre Ledure --- wizards/source/scriptforge/SF_Platform.xba | 39 +++++++++++++++-- wizards/source/scriptforge/SF_Root.xba | 8 +++- wizards/source/scriptforge/SF_Utils.xba | 56 ++++++++++++++++++------ wizards/source/scriptforge/python/scriptforge.py | 7 +-- 4 files changed, 89 insertions(+), 21 deletions(-) (limited to 'wizards') diff --git a/wizards/source/scriptforge/SF_Platform.xba b/wizards/source/scriptforge/SF_Platform.xba index a19ee2bc7a6c..8bd7b5cad35f 100644 --- a/wizards/source/scriptforge/SF_Platform.xba +++ b/wizards/source/scriptforge/SF_Platform.xba @@ -82,9 +82,17 @@ Property Get Fonts() As Variant Fonts = _PropertyGet("Fonts") End Property ' ScriptForge.SF_Platform.Fonts (get) +REM ----------------------------------------------------------------------------- +Property Get FormatLocale() As String +''' Returns the locale used for number and date formats, combining language-COUNTRY (la-CO) +''' Example: +''' MsgBox platform.FormatLocale + FormatLocale = _PropertyGet("FormatLocale") +End Property ' ScriptForge.SF_Platform.FormatLocale (get) + REM ----------------------------------------------------------------------------- Property Get Locale() As String -''' Returns the locale combining language-COUNTRY (la-CO) +''' Returns the locale of the operating system, combining language-COUNTRY (la-CO) ''' Example: ''' MsgBox platform.Locale Locale = _PropertyGet("Locale") @@ -104,6 +112,14 @@ Property Get ObjectType As String ObjectType = "SF_Platform" End Property ' ScriptForge.SF_Platform.ObjectType +REM ----------------------------------------------------------------------------- +Property Get OfficeLocale() As String +''' Returns the locale of the user interface, combining language-COUNTRY (la-CO) +''' Example: +''' MsgBox platform.OfficeLocale + OfficeLocale = _PropertyGet("OfficeLocale") +End Property ' ScriptForge.SF_Platform.OfficeLocale (get) + REM ----------------------------------------------------------------------------- Property Get OfficeVersion() As String ''' Returns the office software version in the form 'LibreOffice w.x.y.z (The Document Foundation)' @@ -175,6 +191,14 @@ Property Get ServiceName As String ServiceName = "ScriptForge.Platform" End Property ' ScriptForge.SF_Platform.ServiceName +REM ----------------------------------------------------------------------------- +Property Get SystemLocale() As String +''' Returns the locale of the operating system, combining language-COUNTRY (la-CO) +''' Example: +''' MsgBox platform.SystemLocale + SystemLocale = _PropertyGet("SystemLocale") +End Property ' ScriptForge.SF_Platform.SystemLocale (get) + REM ===================================================================== METHODS REM ----------------------------------------------------------------------------- @@ -228,8 +252,10 @@ Public Function Properties() As Variant , "CPUCount" _ , "CurrentUser" _ , "Fonts" _ + , "FormatLocale" _ , "Locale" _ , "Machine" _ + , "OfficeLocale" _ , "OfficeVersion" _ , "OSName" _ , "OSPlatform" _ @@ -238,6 +264,7 @@ Public Function Properties() As Variant , "Printers" _ , "Processor" _ , "PythonVersion" _ + , "SystemLocale" _ ) End Function ' ScriptForge.SF_Platform.Properties @@ -350,8 +377,11 @@ Const cstSubArgs = "" Next i ' Remove leading and trailing commas If Len(sFonts) > 1 Then _PropertyGet = Split(Mid(sFonts, 2, Len(sFonts) - 2), ",") Else _PropertyGet = Array() - Case "Locale" - Set oLocale = SF_Utils._GetUNOService("SystemLocale") + Case "FormatLocale" + Set oLocale = SF_Utils._GetUNOService("FormatLocale") + _PropertyGet = oLocale.Language & "-" & oLocale.Country + Case "OfficeLocale" + Set oLocale = SF_Utils._GetUNOService("OfficeLocale") _PropertyGet = oLocale.Language & "-" & oLocale.Country Case "OfficeVersion" _PropertyGet = _GetProductName() @@ -371,6 +401,9 @@ Const cstSubArgs = "" _PropertyGet = sOSName Case "Printers" _PropertyGet = _GetPrinters() + Case "SystemLocale", "Locale" + Set oLocale = SF_Utils._GetUNOService("SystemLocale") + _PropertyGet = oLocale.Language & "-" & oLocale.Country Case Else _PropertyGet = Null End Select diff --git a/wizards/source/scriptforge/SF_Root.xba b/wizards/source/scriptforge/SF_Root.xba index 9d03fcd6f160..d14e121173cd 100644 --- a/wizards/source/scriptforge/SF_Root.xba +++ b/wizards/source/scriptforge/SF_Root.xba @@ -58,7 +58,9 @@ Private CoreReflection As Object ' com.sun.star.reflection.CoreReflection Private DispatchHelper As Object ' com.sun.star.frame.DispatchHelper Private TextSearch As Object ' com.sun.star.util.TextSearch Private SearchOptions As Object ' com.sun.star.util.SearchOptions -Private Locale As Object ' com.sun.star.lang.Locale +Private SystemLocale As Object ' com.sun.star.lang.Locale +Private OfficeLocale As Object ' com.sun.star.lang.Locale +Private FormatLocale As Object ' com.sun.star.lang.Locale Private PrinterServer As Object ' com.sun.star.awt.PrinterServer Private CharacterClass As Object ' com.sun.star.i18n.CharacterClassification Private FileAccess As Object ' com.sun.star.ucb.SimpleFileAccess @@ -118,7 +120,9 @@ Private Sub Class_Initialize() Set DispatchHelper = Nothing Set TextSearch = Nothing Set SearchOptions = Nothing - Set Locale = Nothing + Set OfficeLocale = Nothing + Set FormatLocale = Nothing + Set SystemLocale = Nothing Set PrinterServer = Nothing Set CharacterClass = Nothing Set FileAccess = Nothing diff --git a/wizards/source/scriptforge/SF_Utils.xba b/wizards/source/scriptforge/SF_Utils.xba index c0d63bcc6b36..cbe07ce2b0ae 100644 --- a/wizards/source/scriptforge/SF_Utils.xba +++ b/wizards/source/scriptforge/SF_Utils.xba @@ -287,6 +287,23 @@ Const cstConfigUpdate = "com.sun.star.configuration.ConfigurationUpdateAcce End Function ' ScriptForge.SF_Utils._GetRegistryKeyContent +REM ----------------------------------------------------------------------------- +Private Function _GetSetting(ByVal psPreference As String, psProperty As String) As Variant +''' Find in the configuration a specific setting based on its location in the +''' settings registry + +Dim oConfigProvider As Object ' com.sun.star.configuration.ConfigurationProvider +Dim vNodePath As Variant ' Array of com.sun.star.beans.PropertyValue + + ' Derived from the Tools library + Set oConfigProvider = createUnoService("com.sun.star.configuration.ConfigurationProvider") + vNodePath = Array(SF_Utils._MakePropertyValue("nodepath", psPreference)) + + _GetSetting = oConfigProvider.createInstanceWithArguments( _ + "com.sun.star.configuration.ConfigurationAccess", vNodePath()).getByName(psProperty) + +End Function ' ScriptForge.SF_Utils._GetSetting + REM ----------------------------------------------------------------------------- Public Function _GetUNOService(ByVal psService As String _ , Optional ByVal pvArg As Variant _ @@ -298,9 +315,7 @@ Public Function _GetUNOService(ByVal psService As String _ ''' pvArg: some services might require an argument Dim sLocale As String ' fr-BE f.i. -Dim oConfigProvider As Object Dim oDefaultContext As Object -Dim vNodePath As Variant Set _GetUNOService = Nothing With _SF_ @@ -353,6 +368,16 @@ Dim vNodePath As Variant Set .FolderPicker = CreateUnoService("com.sun.star.ui.dialogs.FolderPicker") End If Set _GetUNOService = .FolderPicker + Case "FormatLocale" + If IsEmpty(.FormatLocale) Or IsNull(.FormatLocale) Then + .FormatLocale = CreateUnoStruct("com.sun.star.lang.Locale") + ' 1st and 2nd chance + sLocale = SF_Utils._GetSetting("org.openoffice.Setup/L10N", "ooSetupSystemLocale") + If Len(sLocale) = 0 Then sLocale = SF_Utils._GetSetting("org.openoffice.System/L10N", "UILocale") + .FormatLocale.Language = Split(sLocale, "-")(0) ' Language is most often 2 chars long, but not always + .FormatLocale.Country = Right(sLocale, 2) + End If + Set _GetUNOService = .FormatLocale Case "FunctionAccess" If IsEmpty(.FunctionAccess) Or IsNull(.FunctionAccess) Then Set .FunctionAccess = CreateUnoService("com.sun.star.sheet.FunctionAccess") @@ -380,6 +405,16 @@ Dim vNodePath As Variant End If End If Set _GetUNOService = .MailService + Case "OfficeLocale" + If IsEmpty(.OfficeLocale) Or IsNull(.OfficeLocale) Then + .OfficeLocale = CreateUnoStruct("com.sun.star.lang.Locale") + ' 1st and 2nd chance + sLocale = SF_Utils._GetSetting("org.openoffice.Setup/L10N", "ooLocale") + If Len(sLocale) = 0 Then sLocale = SF_Utils._GetSetting("org.openoffice.System/L10N", "UILocale") + .OfficeLocale.Language = Split(sLocale, "-")(0) ' Language is most often 2 chars long, but not always + .OfficeLocale.Country = Right(sLocale, 2) + End If + Set _GetUNOService = .OfficeLocale Case "PathSettings" If IsEmpty(.PathSettings) Or IsNull(.PathSettings) Then Set .PathSettings = CreateUnoService("com.sun.star.util.PathSettings") @@ -417,18 +452,13 @@ Dim vNodePath As Variant End If Set _GetUNOService = .SearchOptions Case "SystemLocale", "Locale" - If IsEmpty(.Locale) Or IsNull(.Locale) Then - .Locale = CreateUnoStruct("com.sun.star.lang.Locale") - ' Derived from the Tools library - Set oConfigProvider = createUnoService("com.sun.star.configuration.ConfigurationProvider") - vNodePath = Array() : ReDim vNodePath(0) - vNodePath(0) = New com.sun.star.beans.PropertyValue - vNodePath(0).Name = "nodepath" : vNodePath(0).Value = "org.openoffice.System/L10N" - sLocale = oConfigProvider.createInstanceWithArguments("com.sun.star.configuration.ConfigurationAccess", vNodePath()).getByName("SystemLocale") - .Locale.Language = Split(sLocale, "-")(0) ' Language is most often 2 chars long, but not always - .Locale.Country = Right(sLocale, 2) + If IsEmpty(.SystemLocale) Or IsNull(.SystemLocale) Then + .SystemLocale = CreateUnoStruct("com.sun.star.lang.Locale") + sLocale = SF_Utils._GetSetting("org.openoffice.System/L10N", "SystemLocale") + .SystemLocale.Language = Split(sLocale, "-")(0) ' Language is most often 2 chars long, but not always + .SystemLocale.Country = Right(sLocale, 2) End If - Set _GetUNOService = .Locale + Set _GetUNOService = .SystemLocale Case "SystemShellExecute" If IsEmpty(.SystemShellExecute) Or IsNull(.SystemShellExecute) Then Set .SystemShellExecute = CreateUnoService("com.sun.star.system.SystemShellExecute") diff --git a/wizards/source/scriptforge/python/scriptforge.py b/wizards/source/scriptforge/python/scriptforge.py index 858a3ec77a71..94d5a3de7d58 100644 --- a/wizards/source/scriptforge/python/scriptforge.py +++ b/wizards/source/scriptforge/python/scriptforge.py @@ -1218,9 +1218,10 @@ class SFScriptForge: servicename = 'ScriptForge.Platform' servicesynonyms = ('platform', 'scriptforge.platform') serviceproperties = dict(Architecture = False, ComputerName = False, CPUCount = False, CurrentUser = False, - Fonts = False, Locale = False, Machine = False, OfficeVersion = False, OSName = False, - OSPlatform = False, OSRelease = False, OSVersion = False, Printers = False, - Processor = False, PythonVersion = False) + Fonts = False, FormatLocale = False, Locale = False, Machine = False, + OfficeLocale = False, OfficeVersion = False, OSName = False, OSPlatform = False, + OSRelease = False, OSVersion = False, Printers = False, Processor = False, + PythonVersion = False, SystemLocale = False) # Python helper functions py = ScriptForge.pythonhelpermodule + '$' + '_SF_Platform' -- cgit