diff --git a/.gitignore b/.gitignore index 135462f..e7d49ea 100644 --- a/.gitignore +++ b/.gitignore @@ -49,7 +49,6 @@ coverage.xml # Translations *.mo -*.pot # Django stuff: *.log diff --git a/po/ar_SA.po b/po/ar_SA.po new file mode 100644 index 0000000..e93869f --- /dev/null +++ b/po/ar_SA.po @@ -0,0 +1,251 @@ +# Arabic translations for PACKAGE package. +# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Eric Turgeon , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-11-27 13:23-0400\n" +"PO-Revision-Date: 2025-11-25 08:34-0400\n" +"Last-Translator: Eric Turgeon \n" +"Language-Team: Arabic <(nothing)>\n" +"Language: ar_SA\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: setup_station/add_admin.py:132 +msgid "The initial root password will be set to the admin user password." +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:99 +msgid "Password not allowed" +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:101 +msgid "Space not allowed" +msgstr "" + +#: setup_station/add_users.py:57 +msgid "User Setup" +msgstr "" + +#: setup_station/add_users.py:68 +msgid "User Account" +msgstr "" + +#: setup_station/add_users.py:71 +msgid "User name" +msgstr "" + +#: setup_station/add_users.py:73 +msgid "Real name" +msgstr "" + +#: setup_station/add_users.py:76 +msgid "Password" +msgstr "" + +#: setup_station/add_users.py:80 +msgid "Verify Password" +msgstr "" + +#: setup_station/add_users.py:84 +msgid "Shell" +msgstr "" + +#: setup_station/add_users.py:97 +msgid "Set Hostname" +msgstr "" + +#: setup_station/add_users.py:102 +msgid "Hostname" +msgstr "" + +#: setup_station/common.py:118 +msgid "Very Weak" +msgstr "" + +#: setup_station/common.py:119 setup_station/common.py:122 +msgid "Fairly Weak" +msgstr "" + +#: setup_station/common.py:120 setup_station/common.py:123 +#: setup_station/common.py:126 +msgid "Weak" +msgstr "" + +#: setup_station/common.py:121 setup_station/common.py:124 +#: setup_station/common.py:127 setup_station/common.py:130 +msgid "Strong" +msgstr "" + +#: setup_station/common.py:125 setup_station/common.py:128 +#: setup_station/common.py:131 +msgid "Fairly Strong" +msgstr "" + +#: setup_station/common.py:129 setup_station/common.py:132 +msgid "Very Strong" +msgstr "" + +#: setup_station/interface_controller.py:22 +#: setup_station/interface_controller.py:31 +msgid "Back" +msgstr "" + +#: setup_station/interface_controller.py:24 +#: setup_station/interface_controller.py:32 +msgid "Next" +msgstr "" + +#: setup_station/interface_controller.py:118 setup_station/language.py:104 +msgid "GhostBSD Initial Setup" +msgstr "" + +#: setup_station/interface_controller.py:119 setup_station/language.py:102 +#: setup_station/language.py:119 +msgid "Language" +msgstr "" + +#: setup_station/interface_controller.py:131 +msgid "Button" +msgstr "" + +#: setup_station/interface_controller.py:155 +msgid "Keyboard" +msgstr "" + +#: setup_station/interface_controller.py:168 +msgid "Time Zone" +msgstr "" + +#: setup_station/interface_controller.py:180 +msgid "Network" +msgstr "" + +#: setup_station/interface_controller.py:192 +msgid "Admin User" +msgstr "" + +#: setup_station/interface_controller.py:204 +msgid "Setup GhostBSD" +msgstr "" + +#: setup_station/interface_controller.py:213 +msgid "Progress Bar" +msgstr "" + +#: setup_station/keyboard.py:41 +msgid "Type here to test your keyboard" +msgstr "" + +#: setup_station/keyboard.py:96 +msgid "Keyboard Layout" +msgstr "" + +#: setup_station/keyboard.py:108 +msgid "Keyboard Models" +msgstr "" + +#: setup_station/language.py:96 setup_station/language.py:162 +msgid "Please select your language:" +msgstr "" + +#: setup_station/network_setup.py:100 setup_station/network_setup.py:155 +msgid "Network card connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:105 setup_station/network_setup.py:160 +msgid "Network card not connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:108 setup_station/network_setup.py:163 +msgid "No network card detected" +msgstr "" + +#: setup_station/network_setup.py:116 setup_station/network_setup.py:171 +msgid "WiFi card detected and connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:120 setup_station/network_setup.py:175 +msgid "WiFi card detected but not connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:123 setup_station/network_setup.py:178 +msgid "WiFi card not detected or not supported" +msgstr "" + +#: setup_station/network_setup.py:200 +msgid "Stat" +msgstr "" + +#: setup_station/network_setup.py:205 +msgid "SSID" +msgstr "" + +#: setup_station/network_setup.py:338 +msgid "WiFi Network Authentication Required" +msgstr "" + +#: setup_station/network_setup.py:350 +msgid "Wi-Fi Network Authentication failed" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Authentication required by" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Wi-Fi Network" +msgstr "" + +#: setup_station/network_setup.py:355 +msgid "Password:" +msgstr "" + +#: setup_station/network_setup.py:358 +msgid "Show password" +msgstr "" + +#: setup_station/setup_system.py:39 +msgid "Setting system language" +msgstr "" + +#: setup_station/setup_system.py:43 +msgid "Setting keyboard layout" +msgstr "" + +#: setup_station/setup_system.py:47 +msgid "Setting timezone" +msgstr "" + +#: setup_station/setup_system.py:51 +msgid "Creating admin user" +msgstr "" + +#: setup_station/setup_system.py:55 +msgid "Setup complete!" +msgstr "" + +#: setup_station/setup_system.py:64 +msgid "Getting everything ready" +msgstr "" + +#: setup_station/setup_system.py:76 +msgid "This should not take too long." +msgstr "" + +#: setup_station/setup_system.py:78 +msgid "Don't turn your system off." +msgstr "" + +#: setup_station/timezone.py:57 +msgid "Continent" +msgstr "" + +#: setup_station/timezone.py:69 +msgid "City" +msgstr "" diff --git a/po/bg_BG.po b/po/bg_BG.po new file mode 100644 index 0000000..080196d --- /dev/null +++ b/po/bg_BG.po @@ -0,0 +1,252 @@ +# Bulgarian translations for PACKAGE package. +# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Eric Turgeon , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-11-27 13:23-0400\n" +"PO-Revision-Date: 2025-11-25 08:34-0400\n" +"Last-Translator: Eric Turgeon \n" +"Language-Team: Bulgarian \n" +"Language: bg\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: setup_station/add_admin.py:132 +msgid "The initial root password will be set to the admin user password." +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:99 +msgid "Password not allowed" +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:101 +msgid "Space not allowed" +msgstr "" + +#: setup_station/add_users.py:57 +msgid "User Setup" +msgstr "" + +#: setup_station/add_users.py:68 +msgid "User Account" +msgstr "" + +#: setup_station/add_users.py:71 +msgid "User name" +msgstr "" + +#: setup_station/add_users.py:73 +msgid "Real name" +msgstr "" + +#: setup_station/add_users.py:76 +msgid "Password" +msgstr "" + +#: setup_station/add_users.py:80 +msgid "Verify Password" +msgstr "" + +#: setup_station/add_users.py:84 +msgid "Shell" +msgstr "" + +#: setup_station/add_users.py:97 +msgid "Set Hostname" +msgstr "" + +#: setup_station/add_users.py:102 +msgid "Hostname" +msgstr "" + +#: setup_station/common.py:118 +msgid "Very Weak" +msgstr "" + +#: setup_station/common.py:119 setup_station/common.py:122 +msgid "Fairly Weak" +msgstr "" + +#: setup_station/common.py:120 setup_station/common.py:123 +#: setup_station/common.py:126 +msgid "Weak" +msgstr "" + +#: setup_station/common.py:121 setup_station/common.py:124 +#: setup_station/common.py:127 setup_station/common.py:130 +msgid "Strong" +msgstr "" + +#: setup_station/common.py:125 setup_station/common.py:128 +#: setup_station/common.py:131 +msgid "Fairly Strong" +msgstr "" + +#: setup_station/common.py:129 setup_station/common.py:132 +msgid "Very Strong" +msgstr "" + +#: setup_station/interface_controller.py:22 +#: setup_station/interface_controller.py:31 +msgid "Back" +msgstr "" + +#: setup_station/interface_controller.py:24 +#: setup_station/interface_controller.py:32 +msgid "Next" +msgstr "" + +#: setup_station/interface_controller.py:118 setup_station/language.py:104 +msgid "GhostBSD Initial Setup" +msgstr "" + +#: setup_station/interface_controller.py:119 setup_station/language.py:102 +#: setup_station/language.py:119 +msgid "Language" +msgstr "" + +#: setup_station/interface_controller.py:131 +msgid "Button" +msgstr "" + +#: setup_station/interface_controller.py:155 +msgid "Keyboard" +msgstr "" + +#: setup_station/interface_controller.py:168 +msgid "Time Zone" +msgstr "" + +#: setup_station/interface_controller.py:180 +msgid "Network" +msgstr "" + +#: setup_station/interface_controller.py:192 +msgid "Admin User" +msgstr "" + +#: setup_station/interface_controller.py:204 +msgid "Setup GhostBSD" +msgstr "" + +#: setup_station/interface_controller.py:213 +msgid "Progress Bar" +msgstr "" + +#: setup_station/keyboard.py:41 +msgid "Type here to test your keyboard" +msgstr "" + +#: setup_station/keyboard.py:96 +msgid "Keyboard Layout" +msgstr "" + +#: setup_station/keyboard.py:108 +msgid "Keyboard Models" +msgstr "" + +#: setup_station/language.py:96 setup_station/language.py:162 +msgid "Please select your language:" +msgstr "" + +#: setup_station/network_setup.py:100 setup_station/network_setup.py:155 +msgid "Network card connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:105 setup_station/network_setup.py:160 +msgid "Network card not connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:108 setup_station/network_setup.py:163 +msgid "No network card detected" +msgstr "" + +#: setup_station/network_setup.py:116 setup_station/network_setup.py:171 +msgid "WiFi card detected and connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:120 setup_station/network_setup.py:175 +msgid "WiFi card detected but not connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:123 setup_station/network_setup.py:178 +msgid "WiFi card not detected or not supported" +msgstr "" + +#: setup_station/network_setup.py:200 +msgid "Stat" +msgstr "" + +#: setup_station/network_setup.py:205 +msgid "SSID" +msgstr "" + +#: setup_station/network_setup.py:338 +msgid "WiFi Network Authentication Required" +msgstr "" + +#: setup_station/network_setup.py:350 +msgid "Wi-Fi Network Authentication failed" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Authentication required by" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Wi-Fi Network" +msgstr "" + +#: setup_station/network_setup.py:355 +msgid "Password:" +msgstr "" + +#: setup_station/network_setup.py:358 +msgid "Show password" +msgstr "" + +#: setup_station/setup_system.py:39 +msgid "Setting system language" +msgstr "" + +#: setup_station/setup_system.py:43 +msgid "Setting keyboard layout" +msgstr "" + +#: setup_station/setup_system.py:47 +msgid "Setting timezone" +msgstr "" + +#: setup_station/setup_system.py:51 +msgid "Creating admin user" +msgstr "" + +#: setup_station/setup_system.py:55 +msgid "Setup complete!" +msgstr "" + +#: setup_station/setup_system.py:64 +msgid "Getting everything ready" +msgstr "" + +#: setup_station/setup_system.py:76 +msgid "This should not take too long." +msgstr "" + +#: setup_station/setup_system.py:78 +msgid "Don't turn your system off." +msgstr "" + +#: setup_station/timezone.py:57 +msgid "Continent" +msgstr "" + +#: setup_station/timezone.py:69 +msgid "City" +msgstr "" diff --git a/po/ca_ES.po b/po/ca_ES.po new file mode 100644 index 0000000..e3d565e --- /dev/null +++ b/po/ca_ES.po @@ -0,0 +1,252 @@ +# Catalan translations for PACKAGE package. +# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Eric Turgeon , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-11-27 13:23-0400\n" +"PO-Revision-Date: 2025-11-25 08:34-0400\n" +"Last-Translator: Eric Turgeon \n" +"Language-Team: Catalan \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: setup_station/add_admin.py:132 +msgid "The initial root password will be set to the admin user password." +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:99 +msgid "Password not allowed" +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:101 +msgid "Space not allowed" +msgstr "" + +#: setup_station/add_users.py:57 +msgid "User Setup" +msgstr "" + +#: setup_station/add_users.py:68 +msgid "User Account" +msgstr "" + +#: setup_station/add_users.py:71 +msgid "User name" +msgstr "" + +#: setup_station/add_users.py:73 +msgid "Real name" +msgstr "" + +#: setup_station/add_users.py:76 +msgid "Password" +msgstr "" + +#: setup_station/add_users.py:80 +msgid "Verify Password" +msgstr "" + +#: setup_station/add_users.py:84 +msgid "Shell" +msgstr "" + +#: setup_station/add_users.py:97 +msgid "Set Hostname" +msgstr "" + +#: setup_station/add_users.py:102 +msgid "Hostname" +msgstr "" + +#: setup_station/common.py:118 +msgid "Very Weak" +msgstr "" + +#: setup_station/common.py:119 setup_station/common.py:122 +msgid "Fairly Weak" +msgstr "" + +#: setup_station/common.py:120 setup_station/common.py:123 +#: setup_station/common.py:126 +msgid "Weak" +msgstr "" + +#: setup_station/common.py:121 setup_station/common.py:124 +#: setup_station/common.py:127 setup_station/common.py:130 +msgid "Strong" +msgstr "" + +#: setup_station/common.py:125 setup_station/common.py:128 +#: setup_station/common.py:131 +msgid "Fairly Strong" +msgstr "" + +#: setup_station/common.py:129 setup_station/common.py:132 +msgid "Very Strong" +msgstr "" + +#: setup_station/interface_controller.py:22 +#: setup_station/interface_controller.py:31 +msgid "Back" +msgstr "" + +#: setup_station/interface_controller.py:24 +#: setup_station/interface_controller.py:32 +msgid "Next" +msgstr "" + +#: setup_station/interface_controller.py:118 setup_station/language.py:104 +msgid "GhostBSD Initial Setup" +msgstr "" + +#: setup_station/interface_controller.py:119 setup_station/language.py:102 +#: setup_station/language.py:119 +msgid "Language" +msgstr "" + +#: setup_station/interface_controller.py:131 +msgid "Button" +msgstr "" + +#: setup_station/interface_controller.py:155 +msgid "Keyboard" +msgstr "" + +#: setup_station/interface_controller.py:168 +msgid "Time Zone" +msgstr "" + +#: setup_station/interface_controller.py:180 +msgid "Network" +msgstr "" + +#: setup_station/interface_controller.py:192 +msgid "Admin User" +msgstr "" + +#: setup_station/interface_controller.py:204 +msgid "Setup GhostBSD" +msgstr "" + +#: setup_station/interface_controller.py:213 +msgid "Progress Bar" +msgstr "" + +#: setup_station/keyboard.py:41 +msgid "Type here to test your keyboard" +msgstr "" + +#: setup_station/keyboard.py:96 +msgid "Keyboard Layout" +msgstr "" + +#: setup_station/keyboard.py:108 +msgid "Keyboard Models" +msgstr "" + +#: setup_station/language.py:96 setup_station/language.py:162 +msgid "Please select your language:" +msgstr "" + +#: setup_station/network_setup.py:100 setup_station/network_setup.py:155 +msgid "Network card connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:105 setup_station/network_setup.py:160 +msgid "Network card not connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:108 setup_station/network_setup.py:163 +msgid "No network card detected" +msgstr "" + +#: setup_station/network_setup.py:116 setup_station/network_setup.py:171 +msgid "WiFi card detected and connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:120 setup_station/network_setup.py:175 +msgid "WiFi card detected but not connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:123 setup_station/network_setup.py:178 +msgid "WiFi card not detected or not supported" +msgstr "" + +#: setup_station/network_setup.py:200 +msgid "Stat" +msgstr "" + +#: setup_station/network_setup.py:205 +msgid "SSID" +msgstr "" + +#: setup_station/network_setup.py:338 +msgid "WiFi Network Authentication Required" +msgstr "" + +#: setup_station/network_setup.py:350 +msgid "Wi-Fi Network Authentication failed" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Authentication required by" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Wi-Fi Network" +msgstr "" + +#: setup_station/network_setup.py:355 +msgid "Password:" +msgstr "" + +#: setup_station/network_setup.py:358 +msgid "Show password" +msgstr "" + +#: setup_station/setup_system.py:39 +msgid "Setting system language" +msgstr "" + +#: setup_station/setup_system.py:43 +msgid "Setting keyboard layout" +msgstr "" + +#: setup_station/setup_system.py:47 +msgid "Setting timezone" +msgstr "" + +#: setup_station/setup_system.py:51 +msgid "Creating admin user" +msgstr "" + +#: setup_station/setup_system.py:55 +msgid "Setup complete!" +msgstr "" + +#: setup_station/setup_system.py:64 +msgid "Getting everything ready" +msgstr "" + +#: setup_station/setup_system.py:76 +msgid "This should not take too long." +msgstr "" + +#: setup_station/setup_system.py:78 +msgid "Don't turn your system off." +msgstr "" + +#: setup_station/timezone.py:57 +msgid "Continent" +msgstr "" + +#: setup_station/timezone.py:69 +msgid "City" +msgstr "" diff --git a/po/cs_CZ.po b/po/cs_CZ.po new file mode 100644 index 0000000..86d8694 --- /dev/null +++ b/po/cs_CZ.po @@ -0,0 +1,252 @@ +# Czech translations for PACKAGE package. +# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Eric Turgeon , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-11-27 13:23-0400\n" +"PO-Revision-Date: 2025-11-25 08:34-0400\n" +"Last-Translator: Eric Turgeon \n" +"Language-Team: Czech \n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +#: setup_station/add_admin.py:132 +msgid "The initial root password will be set to the admin user password." +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:99 +msgid "Password not allowed" +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:101 +msgid "Space not allowed" +msgstr "" + +#: setup_station/add_users.py:57 +msgid "User Setup" +msgstr "" + +#: setup_station/add_users.py:68 +msgid "User Account" +msgstr "" + +#: setup_station/add_users.py:71 +msgid "User name" +msgstr "" + +#: setup_station/add_users.py:73 +msgid "Real name" +msgstr "" + +#: setup_station/add_users.py:76 +msgid "Password" +msgstr "" + +#: setup_station/add_users.py:80 +msgid "Verify Password" +msgstr "" + +#: setup_station/add_users.py:84 +msgid "Shell" +msgstr "" + +#: setup_station/add_users.py:97 +msgid "Set Hostname" +msgstr "" + +#: setup_station/add_users.py:102 +msgid "Hostname" +msgstr "" + +#: setup_station/common.py:118 +msgid "Very Weak" +msgstr "" + +#: setup_station/common.py:119 setup_station/common.py:122 +msgid "Fairly Weak" +msgstr "" + +#: setup_station/common.py:120 setup_station/common.py:123 +#: setup_station/common.py:126 +msgid "Weak" +msgstr "" + +#: setup_station/common.py:121 setup_station/common.py:124 +#: setup_station/common.py:127 setup_station/common.py:130 +msgid "Strong" +msgstr "" + +#: setup_station/common.py:125 setup_station/common.py:128 +#: setup_station/common.py:131 +msgid "Fairly Strong" +msgstr "" + +#: setup_station/common.py:129 setup_station/common.py:132 +msgid "Very Strong" +msgstr "" + +#: setup_station/interface_controller.py:22 +#: setup_station/interface_controller.py:31 +msgid "Back" +msgstr "" + +#: setup_station/interface_controller.py:24 +#: setup_station/interface_controller.py:32 +msgid "Next" +msgstr "" + +#: setup_station/interface_controller.py:118 setup_station/language.py:104 +msgid "GhostBSD Initial Setup" +msgstr "" + +#: setup_station/interface_controller.py:119 setup_station/language.py:102 +#: setup_station/language.py:119 +msgid "Language" +msgstr "" + +#: setup_station/interface_controller.py:131 +msgid "Button" +msgstr "" + +#: setup_station/interface_controller.py:155 +msgid "Keyboard" +msgstr "" + +#: setup_station/interface_controller.py:168 +msgid "Time Zone" +msgstr "" + +#: setup_station/interface_controller.py:180 +msgid "Network" +msgstr "" + +#: setup_station/interface_controller.py:192 +msgid "Admin User" +msgstr "" + +#: setup_station/interface_controller.py:204 +msgid "Setup GhostBSD" +msgstr "" + +#: setup_station/interface_controller.py:213 +msgid "Progress Bar" +msgstr "" + +#: setup_station/keyboard.py:41 +msgid "Type here to test your keyboard" +msgstr "" + +#: setup_station/keyboard.py:96 +msgid "Keyboard Layout" +msgstr "" + +#: setup_station/keyboard.py:108 +msgid "Keyboard Models" +msgstr "" + +#: setup_station/language.py:96 setup_station/language.py:162 +msgid "Please select your language:" +msgstr "" + +#: setup_station/network_setup.py:100 setup_station/network_setup.py:155 +msgid "Network card connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:105 setup_station/network_setup.py:160 +msgid "Network card not connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:108 setup_station/network_setup.py:163 +msgid "No network card detected" +msgstr "" + +#: setup_station/network_setup.py:116 setup_station/network_setup.py:171 +msgid "WiFi card detected and connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:120 setup_station/network_setup.py:175 +msgid "WiFi card detected but not connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:123 setup_station/network_setup.py:178 +msgid "WiFi card not detected or not supported" +msgstr "" + +#: setup_station/network_setup.py:200 +msgid "Stat" +msgstr "" + +#: setup_station/network_setup.py:205 +msgid "SSID" +msgstr "" + +#: setup_station/network_setup.py:338 +msgid "WiFi Network Authentication Required" +msgstr "" + +#: setup_station/network_setup.py:350 +msgid "Wi-Fi Network Authentication failed" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Authentication required by" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Wi-Fi Network" +msgstr "" + +#: setup_station/network_setup.py:355 +msgid "Password:" +msgstr "" + +#: setup_station/network_setup.py:358 +msgid "Show password" +msgstr "" + +#: setup_station/setup_system.py:39 +msgid "Setting system language" +msgstr "" + +#: setup_station/setup_system.py:43 +msgid "Setting keyboard layout" +msgstr "" + +#: setup_station/setup_system.py:47 +msgid "Setting timezone" +msgstr "" + +#: setup_station/setup_system.py:51 +msgid "Creating admin user" +msgstr "" + +#: setup_station/setup_system.py:55 +msgid "Setup complete!" +msgstr "" + +#: setup_station/setup_system.py:64 +msgid "Getting everything ready" +msgstr "" + +#: setup_station/setup_system.py:76 +msgid "This should not take too long." +msgstr "" + +#: setup_station/setup_system.py:78 +msgid "Don't turn your system off." +msgstr "" + +#: setup_station/timezone.py:57 +msgid "Continent" +msgstr "" + +#: setup_station/timezone.py:69 +msgid "City" +msgstr "" diff --git a/po/da_DK.po b/po/da_DK.po new file mode 100644 index 0000000..d12ee87 --- /dev/null +++ b/po/da_DK.po @@ -0,0 +1,252 @@ +# Danish translations for PACKAGE package. +# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Eric Turgeon , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-11-27 13:23-0400\n" +"PO-Revision-Date: 2025-11-25 08:34-0400\n" +"Last-Translator: Eric Turgeon \n" +"Language-Team: Danish \n" +"Language: da\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: setup_station/add_admin.py:132 +msgid "The initial root password will be set to the admin user password." +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:99 +msgid "Password not allowed" +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:101 +msgid "Space not allowed" +msgstr "" + +#: setup_station/add_users.py:57 +msgid "User Setup" +msgstr "" + +#: setup_station/add_users.py:68 +msgid "User Account" +msgstr "" + +#: setup_station/add_users.py:71 +msgid "User name" +msgstr "" + +#: setup_station/add_users.py:73 +msgid "Real name" +msgstr "" + +#: setup_station/add_users.py:76 +msgid "Password" +msgstr "" + +#: setup_station/add_users.py:80 +msgid "Verify Password" +msgstr "" + +#: setup_station/add_users.py:84 +msgid "Shell" +msgstr "" + +#: setup_station/add_users.py:97 +msgid "Set Hostname" +msgstr "" + +#: setup_station/add_users.py:102 +msgid "Hostname" +msgstr "" + +#: setup_station/common.py:118 +msgid "Very Weak" +msgstr "" + +#: setup_station/common.py:119 setup_station/common.py:122 +msgid "Fairly Weak" +msgstr "" + +#: setup_station/common.py:120 setup_station/common.py:123 +#: setup_station/common.py:126 +msgid "Weak" +msgstr "" + +#: setup_station/common.py:121 setup_station/common.py:124 +#: setup_station/common.py:127 setup_station/common.py:130 +msgid "Strong" +msgstr "" + +#: setup_station/common.py:125 setup_station/common.py:128 +#: setup_station/common.py:131 +msgid "Fairly Strong" +msgstr "" + +#: setup_station/common.py:129 setup_station/common.py:132 +msgid "Very Strong" +msgstr "" + +#: setup_station/interface_controller.py:22 +#: setup_station/interface_controller.py:31 +msgid "Back" +msgstr "" + +#: setup_station/interface_controller.py:24 +#: setup_station/interface_controller.py:32 +msgid "Next" +msgstr "" + +#: setup_station/interface_controller.py:118 setup_station/language.py:104 +msgid "GhostBSD Initial Setup" +msgstr "" + +#: setup_station/interface_controller.py:119 setup_station/language.py:102 +#: setup_station/language.py:119 +msgid "Language" +msgstr "" + +#: setup_station/interface_controller.py:131 +msgid "Button" +msgstr "" + +#: setup_station/interface_controller.py:155 +msgid "Keyboard" +msgstr "" + +#: setup_station/interface_controller.py:168 +msgid "Time Zone" +msgstr "" + +#: setup_station/interface_controller.py:180 +msgid "Network" +msgstr "" + +#: setup_station/interface_controller.py:192 +msgid "Admin User" +msgstr "" + +#: setup_station/interface_controller.py:204 +msgid "Setup GhostBSD" +msgstr "" + +#: setup_station/interface_controller.py:213 +msgid "Progress Bar" +msgstr "" + +#: setup_station/keyboard.py:41 +msgid "Type here to test your keyboard" +msgstr "" + +#: setup_station/keyboard.py:96 +msgid "Keyboard Layout" +msgstr "" + +#: setup_station/keyboard.py:108 +msgid "Keyboard Models" +msgstr "" + +#: setup_station/language.py:96 setup_station/language.py:162 +msgid "Please select your language:" +msgstr "" + +#: setup_station/network_setup.py:100 setup_station/network_setup.py:155 +msgid "Network card connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:105 setup_station/network_setup.py:160 +msgid "Network card not connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:108 setup_station/network_setup.py:163 +msgid "No network card detected" +msgstr "" + +#: setup_station/network_setup.py:116 setup_station/network_setup.py:171 +msgid "WiFi card detected and connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:120 setup_station/network_setup.py:175 +msgid "WiFi card detected but not connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:123 setup_station/network_setup.py:178 +msgid "WiFi card not detected or not supported" +msgstr "" + +#: setup_station/network_setup.py:200 +msgid "Stat" +msgstr "" + +#: setup_station/network_setup.py:205 +msgid "SSID" +msgstr "" + +#: setup_station/network_setup.py:338 +msgid "WiFi Network Authentication Required" +msgstr "" + +#: setup_station/network_setup.py:350 +msgid "Wi-Fi Network Authentication failed" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Authentication required by" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Wi-Fi Network" +msgstr "" + +#: setup_station/network_setup.py:355 +msgid "Password:" +msgstr "" + +#: setup_station/network_setup.py:358 +msgid "Show password" +msgstr "" + +#: setup_station/setup_system.py:39 +msgid "Setting system language" +msgstr "" + +#: setup_station/setup_system.py:43 +msgid "Setting keyboard layout" +msgstr "" + +#: setup_station/setup_system.py:47 +msgid "Setting timezone" +msgstr "" + +#: setup_station/setup_system.py:51 +msgid "Creating admin user" +msgstr "" + +#: setup_station/setup_system.py:55 +msgid "Setup complete!" +msgstr "" + +#: setup_station/setup_system.py:64 +msgid "Getting everything ready" +msgstr "" + +#: setup_station/setup_system.py:76 +msgid "This should not take too long." +msgstr "" + +#: setup_station/setup_system.py:78 +msgid "Don't turn your system off." +msgstr "" + +#: setup_station/timezone.py:57 +msgid "Continent" +msgstr "" + +#: setup_station/timezone.py:69 +msgid "City" +msgstr "" diff --git a/po/de_DE.po b/po/de_DE.po new file mode 100644 index 0000000..28b8568 --- /dev/null +++ b/po/de_DE.po @@ -0,0 +1,252 @@ +# German translations for PACKAGE package. +# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Eric Turgeon , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-11-27 13:23-0400\n" +"PO-Revision-Date: 2025-11-25 08:34-0400\n" +"Last-Translator: Eric Turgeon \n" +"Language-Team: German \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: setup_station/add_admin.py:132 +msgid "The initial root password will be set to the admin user password." +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:99 +msgid "Password not allowed" +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:101 +msgid "Space not allowed" +msgstr "" + +#: setup_station/add_users.py:57 +msgid "User Setup" +msgstr "" + +#: setup_station/add_users.py:68 +msgid "User Account" +msgstr "" + +#: setup_station/add_users.py:71 +msgid "User name" +msgstr "" + +#: setup_station/add_users.py:73 +msgid "Real name" +msgstr "" + +#: setup_station/add_users.py:76 +msgid "Password" +msgstr "" + +#: setup_station/add_users.py:80 +msgid "Verify Password" +msgstr "" + +#: setup_station/add_users.py:84 +msgid "Shell" +msgstr "" + +#: setup_station/add_users.py:97 +msgid "Set Hostname" +msgstr "" + +#: setup_station/add_users.py:102 +msgid "Hostname" +msgstr "" + +#: setup_station/common.py:118 +msgid "Very Weak" +msgstr "" + +#: setup_station/common.py:119 setup_station/common.py:122 +msgid "Fairly Weak" +msgstr "" + +#: setup_station/common.py:120 setup_station/common.py:123 +#: setup_station/common.py:126 +msgid "Weak" +msgstr "" + +#: setup_station/common.py:121 setup_station/common.py:124 +#: setup_station/common.py:127 setup_station/common.py:130 +msgid "Strong" +msgstr "" + +#: setup_station/common.py:125 setup_station/common.py:128 +#: setup_station/common.py:131 +msgid "Fairly Strong" +msgstr "" + +#: setup_station/common.py:129 setup_station/common.py:132 +msgid "Very Strong" +msgstr "" + +#: setup_station/interface_controller.py:22 +#: setup_station/interface_controller.py:31 +msgid "Back" +msgstr "" + +#: setup_station/interface_controller.py:24 +#: setup_station/interface_controller.py:32 +msgid "Next" +msgstr "" + +#: setup_station/interface_controller.py:118 setup_station/language.py:104 +msgid "GhostBSD Initial Setup" +msgstr "" + +#: setup_station/interface_controller.py:119 setup_station/language.py:102 +#: setup_station/language.py:119 +msgid "Language" +msgstr "" + +#: setup_station/interface_controller.py:131 +msgid "Button" +msgstr "" + +#: setup_station/interface_controller.py:155 +msgid "Keyboard" +msgstr "" + +#: setup_station/interface_controller.py:168 +msgid "Time Zone" +msgstr "" + +#: setup_station/interface_controller.py:180 +msgid "Network" +msgstr "" + +#: setup_station/interface_controller.py:192 +msgid "Admin User" +msgstr "" + +#: setup_station/interface_controller.py:204 +msgid "Setup GhostBSD" +msgstr "" + +#: setup_station/interface_controller.py:213 +msgid "Progress Bar" +msgstr "" + +#: setup_station/keyboard.py:41 +msgid "Type here to test your keyboard" +msgstr "" + +#: setup_station/keyboard.py:96 +msgid "Keyboard Layout" +msgstr "" + +#: setup_station/keyboard.py:108 +msgid "Keyboard Models" +msgstr "" + +#: setup_station/language.py:96 setup_station/language.py:162 +msgid "Please select your language:" +msgstr "" + +#: setup_station/network_setup.py:100 setup_station/network_setup.py:155 +msgid "Network card connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:105 setup_station/network_setup.py:160 +msgid "Network card not connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:108 setup_station/network_setup.py:163 +msgid "No network card detected" +msgstr "" + +#: setup_station/network_setup.py:116 setup_station/network_setup.py:171 +msgid "WiFi card detected and connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:120 setup_station/network_setup.py:175 +msgid "WiFi card detected but not connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:123 setup_station/network_setup.py:178 +msgid "WiFi card not detected or not supported" +msgstr "" + +#: setup_station/network_setup.py:200 +msgid "Stat" +msgstr "" + +#: setup_station/network_setup.py:205 +msgid "SSID" +msgstr "" + +#: setup_station/network_setup.py:338 +msgid "WiFi Network Authentication Required" +msgstr "" + +#: setup_station/network_setup.py:350 +msgid "Wi-Fi Network Authentication failed" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Authentication required by" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Wi-Fi Network" +msgstr "" + +#: setup_station/network_setup.py:355 +msgid "Password:" +msgstr "" + +#: setup_station/network_setup.py:358 +msgid "Show password" +msgstr "" + +#: setup_station/setup_system.py:39 +msgid "Setting system language" +msgstr "" + +#: setup_station/setup_system.py:43 +msgid "Setting keyboard layout" +msgstr "" + +#: setup_station/setup_system.py:47 +msgid "Setting timezone" +msgstr "" + +#: setup_station/setup_system.py:51 +msgid "Creating admin user" +msgstr "" + +#: setup_station/setup_system.py:55 +msgid "Setup complete!" +msgstr "" + +#: setup_station/setup_system.py:64 +msgid "Getting everything ready" +msgstr "" + +#: setup_station/setup_system.py:76 +msgid "This should not take too long." +msgstr "" + +#: setup_station/setup_system.py:78 +msgid "Don't turn your system off." +msgstr "" + +#: setup_station/timezone.py:57 +msgid "Continent" +msgstr "" + +#: setup_station/timezone.py:69 +msgid "City" +msgstr "" diff --git a/po/el_GR.po b/po/el_GR.po new file mode 100644 index 0000000..dca0fa8 --- /dev/null +++ b/po/el_GR.po @@ -0,0 +1,252 @@ +# Greek translations for PACKAGE package. +# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Eric Turgeon , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-11-27 13:23-0400\n" +"PO-Revision-Date: 2025-11-25 08:34-0400\n" +"Last-Translator: Eric Turgeon \n" +"Language-Team: Greek \n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: setup_station/add_admin.py:132 +msgid "The initial root password will be set to the admin user password." +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:99 +msgid "Password not allowed" +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:101 +msgid "Space not allowed" +msgstr "" + +#: setup_station/add_users.py:57 +msgid "User Setup" +msgstr "" + +#: setup_station/add_users.py:68 +msgid "User Account" +msgstr "" + +#: setup_station/add_users.py:71 +msgid "User name" +msgstr "" + +#: setup_station/add_users.py:73 +msgid "Real name" +msgstr "" + +#: setup_station/add_users.py:76 +msgid "Password" +msgstr "" + +#: setup_station/add_users.py:80 +msgid "Verify Password" +msgstr "" + +#: setup_station/add_users.py:84 +msgid "Shell" +msgstr "" + +#: setup_station/add_users.py:97 +msgid "Set Hostname" +msgstr "" + +#: setup_station/add_users.py:102 +msgid "Hostname" +msgstr "" + +#: setup_station/common.py:118 +msgid "Very Weak" +msgstr "" + +#: setup_station/common.py:119 setup_station/common.py:122 +msgid "Fairly Weak" +msgstr "" + +#: setup_station/common.py:120 setup_station/common.py:123 +#: setup_station/common.py:126 +msgid "Weak" +msgstr "" + +#: setup_station/common.py:121 setup_station/common.py:124 +#: setup_station/common.py:127 setup_station/common.py:130 +msgid "Strong" +msgstr "" + +#: setup_station/common.py:125 setup_station/common.py:128 +#: setup_station/common.py:131 +msgid "Fairly Strong" +msgstr "" + +#: setup_station/common.py:129 setup_station/common.py:132 +msgid "Very Strong" +msgstr "" + +#: setup_station/interface_controller.py:22 +#: setup_station/interface_controller.py:31 +msgid "Back" +msgstr "" + +#: setup_station/interface_controller.py:24 +#: setup_station/interface_controller.py:32 +msgid "Next" +msgstr "" + +#: setup_station/interface_controller.py:118 setup_station/language.py:104 +msgid "GhostBSD Initial Setup" +msgstr "" + +#: setup_station/interface_controller.py:119 setup_station/language.py:102 +#: setup_station/language.py:119 +msgid "Language" +msgstr "" + +#: setup_station/interface_controller.py:131 +msgid "Button" +msgstr "" + +#: setup_station/interface_controller.py:155 +msgid "Keyboard" +msgstr "" + +#: setup_station/interface_controller.py:168 +msgid "Time Zone" +msgstr "" + +#: setup_station/interface_controller.py:180 +msgid "Network" +msgstr "" + +#: setup_station/interface_controller.py:192 +msgid "Admin User" +msgstr "" + +#: setup_station/interface_controller.py:204 +msgid "Setup GhostBSD" +msgstr "" + +#: setup_station/interface_controller.py:213 +msgid "Progress Bar" +msgstr "" + +#: setup_station/keyboard.py:41 +msgid "Type here to test your keyboard" +msgstr "" + +#: setup_station/keyboard.py:96 +msgid "Keyboard Layout" +msgstr "" + +#: setup_station/keyboard.py:108 +msgid "Keyboard Models" +msgstr "" + +#: setup_station/language.py:96 setup_station/language.py:162 +msgid "Please select your language:" +msgstr "" + +#: setup_station/network_setup.py:100 setup_station/network_setup.py:155 +msgid "Network card connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:105 setup_station/network_setup.py:160 +msgid "Network card not connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:108 setup_station/network_setup.py:163 +msgid "No network card detected" +msgstr "" + +#: setup_station/network_setup.py:116 setup_station/network_setup.py:171 +msgid "WiFi card detected and connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:120 setup_station/network_setup.py:175 +msgid "WiFi card detected but not connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:123 setup_station/network_setup.py:178 +msgid "WiFi card not detected or not supported" +msgstr "" + +#: setup_station/network_setup.py:200 +msgid "Stat" +msgstr "" + +#: setup_station/network_setup.py:205 +msgid "SSID" +msgstr "" + +#: setup_station/network_setup.py:338 +msgid "WiFi Network Authentication Required" +msgstr "" + +#: setup_station/network_setup.py:350 +msgid "Wi-Fi Network Authentication failed" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Authentication required by" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Wi-Fi Network" +msgstr "" + +#: setup_station/network_setup.py:355 +msgid "Password:" +msgstr "" + +#: setup_station/network_setup.py:358 +msgid "Show password" +msgstr "" + +#: setup_station/setup_system.py:39 +msgid "Setting system language" +msgstr "" + +#: setup_station/setup_system.py:43 +msgid "Setting keyboard layout" +msgstr "" + +#: setup_station/setup_system.py:47 +msgid "Setting timezone" +msgstr "" + +#: setup_station/setup_system.py:51 +msgid "Creating admin user" +msgstr "" + +#: setup_station/setup_system.py:55 +msgid "Setup complete!" +msgstr "" + +#: setup_station/setup_system.py:64 +msgid "Getting everything ready" +msgstr "" + +#: setup_station/setup_system.py:76 +msgid "This should not take too long." +msgstr "" + +#: setup_station/setup_system.py:78 +msgid "Don't turn your system off." +msgstr "" + +#: setup_station/timezone.py:57 +msgid "Continent" +msgstr "" + +#: setup_station/timezone.py:69 +msgid "City" +msgstr "" diff --git a/po/en_GB.po b/po/en_GB.po new file mode 100644 index 0000000..f288836 --- /dev/null +++ b/po/en_GB.po @@ -0,0 +1,255 @@ +# English translations for PACKAGE package. +# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Eric Turgeon , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-11-27 13:23-0400\n" +"PO-Revision-Date: 2025-11-25 08:34-0400\n" +"Last-Translator: Eric Turgeon \n" +"Language-Team: English (British) <(nothing)>\n" +"Language: en_GB\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: setup_station/add_admin.py:132 +msgid "The initial root password will be set to the admin user password." +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:99 +msgid "Password not allowed" +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:101 +msgid "Space not allowed" +msgstr "" + +#: setup_station/add_users.py:57 +msgid "User Setup" +msgstr "" + +#: setup_station/add_users.py:68 +msgid "User Account" +msgstr "" + +#: setup_station/add_users.py:71 +msgid "User name" +msgstr "" + +#: setup_station/add_users.py:73 +msgid "Real name" +msgstr "" + +#: setup_station/add_users.py:76 +msgid "Password" +msgstr "" + +#: setup_station/add_users.py:80 +msgid "Verify Password" +msgstr "" + +#: setup_station/add_users.py:84 +msgid "Shell" +msgstr "" + +#: setup_station/add_users.py:97 +msgid "Set Hostname" +msgstr "" + +#: setup_station/add_users.py:102 +msgid "Hostname" +msgstr "" + +#: setup_station/common.py:118 +msgid "Very Weak" +msgstr "" + +#: setup_station/common.py:119 setup_station/common.py:122 +msgid "Fairly Weak" +msgstr "" + +#: setup_station/common.py:120 setup_station/common.py:123 +#: setup_station/common.py:126 +msgid "Weak" +msgstr "" + +#: setup_station/common.py:121 setup_station/common.py:124 +#: setup_station/common.py:127 setup_station/common.py:130 +msgid "Strong" +msgstr "" + +#: setup_station/common.py:125 setup_station/common.py:128 +#: setup_station/common.py:131 +msgid "Fairly Strong" +msgstr "" + +#: setup_station/common.py:129 setup_station/common.py:132 +msgid "Very Strong" +msgstr "" + +#: setup_station/interface_controller.py:22 +#: setup_station/interface_controller.py:31 +msgid "Back" +msgstr "Back" + +#: setup_station/interface_controller.py:24 +#: setup_station/interface_controller.py:32 +msgid "Next" +msgstr "Next" + +#: setup_station/interface_controller.py:118 setup_station/language.py:104 +msgid "GhostBSD Initial Setup" +msgstr "GhostBSD Initial Setup" + +#: setup_station/interface_controller.py:119 setup_station/language.py:102 +#: setup_station/language.py:119 +msgid "Language" +msgstr "Language" + +#: setup_station/interface_controller.py:131 +msgid "Button" +msgstr "Button" + +#: setup_station/interface_controller.py:155 +msgid "Keyboard" +msgstr "Keyboard" + +#: setup_station/interface_controller.py:168 +msgid "Time Zone" +msgstr "Time Zone" + +#: setup_station/interface_controller.py:180 +msgid "Network" +msgstr "Network" + +#: setup_station/interface_controller.py:192 +msgid "Admin User" +msgstr "Admin User" + +#: setup_station/interface_controller.py:204 +msgid "Setup GhostBSD" +msgstr "Setup GhostBSD" + +#: setup_station/interface_controller.py:213 +msgid "Progress Bar" +msgstr "Progress Bar" + +#: setup_station/keyboard.py:41 +msgid "Type here to test your keyboard" +msgstr "" + +#: setup_station/keyboard.py:96 +#, fuzzy +msgid "Keyboard Layout" +msgstr "Keyboard" + +#: setup_station/keyboard.py:108 +#, fuzzy +msgid "Keyboard Models" +msgstr "Keyboard" + +#: setup_station/language.py:96 setup_station/language.py:162 +msgid "Please select your language:" +msgstr "Please select your language:" + +#: setup_station/network_setup.py:100 setup_station/network_setup.py:155 +msgid "Network card connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:105 setup_station/network_setup.py:160 +msgid "Network card not connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:108 setup_station/network_setup.py:163 +msgid "No network card detected" +msgstr "" + +#: setup_station/network_setup.py:116 setup_station/network_setup.py:171 +msgid "WiFi card detected and connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:120 setup_station/network_setup.py:175 +msgid "WiFi card detected but not connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:123 setup_station/network_setup.py:178 +msgid "WiFi card not detected or not supported" +msgstr "" + +#: setup_station/network_setup.py:200 +msgid "Stat" +msgstr "" + +#: setup_station/network_setup.py:205 +msgid "SSID" +msgstr "" + +#: setup_station/network_setup.py:338 +msgid "WiFi Network Authentication Required" +msgstr "" + +#: setup_station/network_setup.py:350 +msgid "Wi-Fi Network Authentication failed" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Authentication required by" +msgstr "" + +#: setup_station/network_setup.py:352 +#, fuzzy +msgid "Wi-Fi Network" +msgstr "Network" + +#: setup_station/network_setup.py:355 +msgid "Password:" +msgstr "" + +#: setup_station/network_setup.py:358 +msgid "Show password" +msgstr "" + +#: setup_station/setup_system.py:39 +msgid "Setting system language" +msgstr "" + +#: setup_station/setup_system.py:43 +msgid "Setting keyboard layout" +msgstr "" + +#: setup_station/setup_system.py:47 +msgid "Setting timezone" +msgstr "" + +#: setup_station/setup_system.py:51 +msgid "Creating admin user" +msgstr "" + +#: setup_station/setup_system.py:55 +msgid "Setup complete!" +msgstr "" + +#: setup_station/setup_system.py:64 +msgid "Getting everything ready" +msgstr "" + +#: setup_station/setup_system.py:76 +msgid "This should not take too long." +msgstr "" + +#: setup_station/setup_system.py:78 +msgid "Don't turn your system off." +msgstr "" + +#: setup_station/timezone.py:57 +msgid "Continent" +msgstr "" + +#: setup_station/timezone.py:69 +msgid "City" +msgstr "" diff --git a/po/en_US.po b/po/en_US.po new file mode 100644 index 0000000..a732124 --- /dev/null +++ b/po/en_US.po @@ -0,0 +1,255 @@ +# English translations for PACKAGE package. +# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Eric Turgeon , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-11-27 13:23-0400\n" +"PO-Revision-Date: 2025-11-25 08:34-0400\n" +"Last-Translator: Eric Turgeon \n" +"Language-Team: English\n" +"Language: en_US\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: setup_station/add_admin.py:132 +msgid "The initial root password will be set to the admin user password." +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:99 +msgid "Password not allowed" +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:101 +msgid "Space not allowed" +msgstr "" + +#: setup_station/add_users.py:57 +msgid "User Setup" +msgstr "" + +#: setup_station/add_users.py:68 +msgid "User Account" +msgstr "" + +#: setup_station/add_users.py:71 +msgid "User name" +msgstr "" + +#: setup_station/add_users.py:73 +msgid "Real name" +msgstr "" + +#: setup_station/add_users.py:76 +msgid "Password" +msgstr "" + +#: setup_station/add_users.py:80 +msgid "Verify Password" +msgstr "" + +#: setup_station/add_users.py:84 +msgid "Shell" +msgstr "" + +#: setup_station/add_users.py:97 +msgid "Set Hostname" +msgstr "" + +#: setup_station/add_users.py:102 +msgid "Hostname" +msgstr "" + +#: setup_station/common.py:118 +msgid "Very Weak" +msgstr "" + +#: setup_station/common.py:119 setup_station/common.py:122 +msgid "Fairly Weak" +msgstr "" + +#: setup_station/common.py:120 setup_station/common.py:123 +#: setup_station/common.py:126 +msgid "Weak" +msgstr "" + +#: setup_station/common.py:121 setup_station/common.py:124 +#: setup_station/common.py:127 setup_station/common.py:130 +msgid "Strong" +msgstr "" + +#: setup_station/common.py:125 setup_station/common.py:128 +#: setup_station/common.py:131 +msgid "Fairly Strong" +msgstr "" + +#: setup_station/common.py:129 setup_station/common.py:132 +msgid "Very Strong" +msgstr "" + +#: setup_station/interface_controller.py:22 +#: setup_station/interface_controller.py:31 +msgid "Back" +msgstr "Back" + +#: setup_station/interface_controller.py:24 +#: setup_station/interface_controller.py:32 +msgid "Next" +msgstr "Next" + +#: setup_station/interface_controller.py:118 setup_station/language.py:104 +msgid "GhostBSD Initial Setup" +msgstr "GhostBSD Initial Setup" + +#: setup_station/interface_controller.py:119 setup_station/language.py:102 +#: setup_station/language.py:119 +msgid "Language" +msgstr "Language" + +#: setup_station/interface_controller.py:131 +msgid "Button" +msgstr "Button" + +#: setup_station/interface_controller.py:155 +msgid "Keyboard" +msgstr "Keyboard" + +#: setup_station/interface_controller.py:168 +msgid "Time Zone" +msgstr "Time Zone" + +#: setup_station/interface_controller.py:180 +msgid "Network" +msgstr "Network" + +#: setup_station/interface_controller.py:192 +msgid "Admin User" +msgstr "Admin User" + +#: setup_station/interface_controller.py:204 +msgid "Setup GhostBSD" +msgstr "Setup GhostBSD" + +#: setup_station/interface_controller.py:213 +msgid "Progress Bar" +msgstr "Progress Bar" + +#: setup_station/keyboard.py:41 +msgid "Type here to test your keyboard" +msgstr "" + +#: setup_station/keyboard.py:96 +#, fuzzy +msgid "Keyboard Layout" +msgstr "Keyboard" + +#: setup_station/keyboard.py:108 +#, fuzzy +msgid "Keyboard Models" +msgstr "Keyboard" + +#: setup_station/language.py:96 setup_station/language.py:162 +msgid "Please select your language:" +msgstr "Please select your language:" + +#: setup_station/network_setup.py:100 setup_station/network_setup.py:155 +msgid "Network card connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:105 setup_station/network_setup.py:160 +msgid "Network card not connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:108 setup_station/network_setup.py:163 +msgid "No network card detected" +msgstr "" + +#: setup_station/network_setup.py:116 setup_station/network_setup.py:171 +msgid "WiFi card detected and connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:120 setup_station/network_setup.py:175 +msgid "WiFi card detected but not connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:123 setup_station/network_setup.py:178 +msgid "WiFi card not detected or not supported" +msgstr "" + +#: setup_station/network_setup.py:200 +msgid "Stat" +msgstr "" + +#: setup_station/network_setup.py:205 +msgid "SSID" +msgstr "" + +#: setup_station/network_setup.py:338 +msgid "WiFi Network Authentication Required" +msgstr "" + +#: setup_station/network_setup.py:350 +msgid "Wi-Fi Network Authentication failed" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Authentication required by" +msgstr "" + +#: setup_station/network_setup.py:352 +#, fuzzy +msgid "Wi-Fi Network" +msgstr "Network" + +#: setup_station/network_setup.py:355 +msgid "Password:" +msgstr "" + +#: setup_station/network_setup.py:358 +msgid "Show password" +msgstr "" + +#: setup_station/setup_system.py:39 +msgid "Setting system language" +msgstr "" + +#: setup_station/setup_system.py:43 +msgid "Setting keyboard layout" +msgstr "" + +#: setup_station/setup_system.py:47 +msgid "Setting timezone" +msgstr "" + +#: setup_station/setup_system.py:51 +msgid "Creating admin user" +msgstr "" + +#: setup_station/setup_system.py:55 +msgid "Setup complete!" +msgstr "" + +#: setup_station/setup_system.py:64 +msgid "Getting everything ready" +msgstr "" + +#: setup_station/setup_system.py:76 +msgid "This should not take too long." +msgstr "" + +#: setup_station/setup_system.py:78 +msgid "Don't turn your system off." +msgstr "" + +#: setup_station/timezone.py:57 +msgid "Continent" +msgstr "" + +#: setup_station/timezone.py:69 +msgid "City" +msgstr "" diff --git a/po/es_ES.po b/po/es_ES.po new file mode 100644 index 0000000..f97e749 --- /dev/null +++ b/po/es_ES.po @@ -0,0 +1,252 @@ +# Spanish translations for PACKAGE package. +# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Eric Turgeon , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-11-27 13:23-0400\n" +"PO-Revision-Date: 2025-11-25 08:34-0400\n" +"Last-Translator: Eric Turgeon \n" +"Language-Team: Spanish \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: setup_station/add_admin.py:132 +msgid "The initial root password will be set to the admin user password." +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:99 +msgid "Password not allowed" +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:101 +msgid "Space not allowed" +msgstr "" + +#: setup_station/add_users.py:57 +msgid "User Setup" +msgstr "" + +#: setup_station/add_users.py:68 +msgid "User Account" +msgstr "" + +#: setup_station/add_users.py:71 +msgid "User name" +msgstr "" + +#: setup_station/add_users.py:73 +msgid "Real name" +msgstr "" + +#: setup_station/add_users.py:76 +msgid "Password" +msgstr "" + +#: setup_station/add_users.py:80 +msgid "Verify Password" +msgstr "" + +#: setup_station/add_users.py:84 +msgid "Shell" +msgstr "" + +#: setup_station/add_users.py:97 +msgid "Set Hostname" +msgstr "" + +#: setup_station/add_users.py:102 +msgid "Hostname" +msgstr "" + +#: setup_station/common.py:118 +msgid "Very Weak" +msgstr "" + +#: setup_station/common.py:119 setup_station/common.py:122 +msgid "Fairly Weak" +msgstr "" + +#: setup_station/common.py:120 setup_station/common.py:123 +#: setup_station/common.py:126 +msgid "Weak" +msgstr "" + +#: setup_station/common.py:121 setup_station/common.py:124 +#: setup_station/common.py:127 setup_station/common.py:130 +msgid "Strong" +msgstr "" + +#: setup_station/common.py:125 setup_station/common.py:128 +#: setup_station/common.py:131 +msgid "Fairly Strong" +msgstr "" + +#: setup_station/common.py:129 setup_station/common.py:132 +msgid "Very Strong" +msgstr "" + +#: setup_station/interface_controller.py:22 +#: setup_station/interface_controller.py:31 +msgid "Back" +msgstr "" + +#: setup_station/interface_controller.py:24 +#: setup_station/interface_controller.py:32 +msgid "Next" +msgstr "" + +#: setup_station/interface_controller.py:118 setup_station/language.py:104 +msgid "GhostBSD Initial Setup" +msgstr "" + +#: setup_station/interface_controller.py:119 setup_station/language.py:102 +#: setup_station/language.py:119 +msgid "Language" +msgstr "" + +#: setup_station/interface_controller.py:131 +msgid "Button" +msgstr "" + +#: setup_station/interface_controller.py:155 +msgid "Keyboard" +msgstr "" + +#: setup_station/interface_controller.py:168 +msgid "Time Zone" +msgstr "" + +#: setup_station/interface_controller.py:180 +msgid "Network" +msgstr "" + +#: setup_station/interface_controller.py:192 +msgid "Admin User" +msgstr "" + +#: setup_station/interface_controller.py:204 +msgid "Setup GhostBSD" +msgstr "" + +#: setup_station/interface_controller.py:213 +msgid "Progress Bar" +msgstr "" + +#: setup_station/keyboard.py:41 +msgid "Type here to test your keyboard" +msgstr "" + +#: setup_station/keyboard.py:96 +msgid "Keyboard Layout" +msgstr "" + +#: setup_station/keyboard.py:108 +msgid "Keyboard Models" +msgstr "" + +#: setup_station/language.py:96 setup_station/language.py:162 +msgid "Please select your language:" +msgstr "" + +#: setup_station/network_setup.py:100 setup_station/network_setup.py:155 +msgid "Network card connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:105 setup_station/network_setup.py:160 +msgid "Network card not connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:108 setup_station/network_setup.py:163 +msgid "No network card detected" +msgstr "" + +#: setup_station/network_setup.py:116 setup_station/network_setup.py:171 +msgid "WiFi card detected and connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:120 setup_station/network_setup.py:175 +msgid "WiFi card detected but not connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:123 setup_station/network_setup.py:178 +msgid "WiFi card not detected or not supported" +msgstr "" + +#: setup_station/network_setup.py:200 +msgid "Stat" +msgstr "" + +#: setup_station/network_setup.py:205 +msgid "SSID" +msgstr "" + +#: setup_station/network_setup.py:338 +msgid "WiFi Network Authentication Required" +msgstr "" + +#: setup_station/network_setup.py:350 +msgid "Wi-Fi Network Authentication failed" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Authentication required by" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Wi-Fi Network" +msgstr "" + +#: setup_station/network_setup.py:355 +msgid "Password:" +msgstr "" + +#: setup_station/network_setup.py:358 +msgid "Show password" +msgstr "" + +#: setup_station/setup_system.py:39 +msgid "Setting system language" +msgstr "" + +#: setup_station/setup_system.py:43 +msgid "Setting keyboard layout" +msgstr "" + +#: setup_station/setup_system.py:47 +msgid "Setting timezone" +msgstr "" + +#: setup_station/setup_system.py:51 +msgid "Creating admin user" +msgstr "" + +#: setup_station/setup_system.py:55 +msgid "Setup complete!" +msgstr "" + +#: setup_station/setup_system.py:64 +msgid "Getting everything ready" +msgstr "" + +#: setup_station/setup_system.py:76 +msgid "This should not take too long." +msgstr "" + +#: setup_station/setup_system.py:78 +msgid "Don't turn your system off." +msgstr "" + +#: setup_station/timezone.py:57 +msgid "Continent" +msgstr "" + +#: setup_station/timezone.py:69 +msgid "City" +msgstr "" diff --git a/po/et_EE.po b/po/et_EE.po new file mode 100644 index 0000000..0d9d155 --- /dev/null +++ b/po/et_EE.po @@ -0,0 +1,252 @@ +# Estonian translations for PACKAGE package. +# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Eric Turgeon , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-11-27 13:23-0400\n" +"PO-Revision-Date: 2025-11-25 08:34-0400\n" +"Last-Translator: Eric Turgeon \n" +"Language-Team: Estonian \n" +"Language: et\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: setup_station/add_admin.py:132 +msgid "The initial root password will be set to the admin user password." +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:99 +msgid "Password not allowed" +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:101 +msgid "Space not allowed" +msgstr "" + +#: setup_station/add_users.py:57 +msgid "User Setup" +msgstr "" + +#: setup_station/add_users.py:68 +msgid "User Account" +msgstr "" + +#: setup_station/add_users.py:71 +msgid "User name" +msgstr "" + +#: setup_station/add_users.py:73 +msgid "Real name" +msgstr "" + +#: setup_station/add_users.py:76 +msgid "Password" +msgstr "" + +#: setup_station/add_users.py:80 +msgid "Verify Password" +msgstr "" + +#: setup_station/add_users.py:84 +msgid "Shell" +msgstr "" + +#: setup_station/add_users.py:97 +msgid "Set Hostname" +msgstr "" + +#: setup_station/add_users.py:102 +msgid "Hostname" +msgstr "" + +#: setup_station/common.py:118 +msgid "Very Weak" +msgstr "" + +#: setup_station/common.py:119 setup_station/common.py:122 +msgid "Fairly Weak" +msgstr "" + +#: setup_station/common.py:120 setup_station/common.py:123 +#: setup_station/common.py:126 +msgid "Weak" +msgstr "" + +#: setup_station/common.py:121 setup_station/common.py:124 +#: setup_station/common.py:127 setup_station/common.py:130 +msgid "Strong" +msgstr "" + +#: setup_station/common.py:125 setup_station/common.py:128 +#: setup_station/common.py:131 +msgid "Fairly Strong" +msgstr "" + +#: setup_station/common.py:129 setup_station/common.py:132 +msgid "Very Strong" +msgstr "" + +#: setup_station/interface_controller.py:22 +#: setup_station/interface_controller.py:31 +msgid "Back" +msgstr "" + +#: setup_station/interface_controller.py:24 +#: setup_station/interface_controller.py:32 +msgid "Next" +msgstr "" + +#: setup_station/interface_controller.py:118 setup_station/language.py:104 +msgid "GhostBSD Initial Setup" +msgstr "" + +#: setup_station/interface_controller.py:119 setup_station/language.py:102 +#: setup_station/language.py:119 +msgid "Language" +msgstr "" + +#: setup_station/interface_controller.py:131 +msgid "Button" +msgstr "" + +#: setup_station/interface_controller.py:155 +msgid "Keyboard" +msgstr "" + +#: setup_station/interface_controller.py:168 +msgid "Time Zone" +msgstr "" + +#: setup_station/interface_controller.py:180 +msgid "Network" +msgstr "" + +#: setup_station/interface_controller.py:192 +msgid "Admin User" +msgstr "" + +#: setup_station/interface_controller.py:204 +msgid "Setup GhostBSD" +msgstr "" + +#: setup_station/interface_controller.py:213 +msgid "Progress Bar" +msgstr "" + +#: setup_station/keyboard.py:41 +msgid "Type here to test your keyboard" +msgstr "" + +#: setup_station/keyboard.py:96 +msgid "Keyboard Layout" +msgstr "" + +#: setup_station/keyboard.py:108 +msgid "Keyboard Models" +msgstr "" + +#: setup_station/language.py:96 setup_station/language.py:162 +msgid "Please select your language:" +msgstr "" + +#: setup_station/network_setup.py:100 setup_station/network_setup.py:155 +msgid "Network card connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:105 setup_station/network_setup.py:160 +msgid "Network card not connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:108 setup_station/network_setup.py:163 +msgid "No network card detected" +msgstr "" + +#: setup_station/network_setup.py:116 setup_station/network_setup.py:171 +msgid "WiFi card detected and connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:120 setup_station/network_setup.py:175 +msgid "WiFi card detected but not connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:123 setup_station/network_setup.py:178 +msgid "WiFi card not detected or not supported" +msgstr "" + +#: setup_station/network_setup.py:200 +msgid "Stat" +msgstr "" + +#: setup_station/network_setup.py:205 +msgid "SSID" +msgstr "" + +#: setup_station/network_setup.py:338 +msgid "WiFi Network Authentication Required" +msgstr "" + +#: setup_station/network_setup.py:350 +msgid "Wi-Fi Network Authentication failed" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Authentication required by" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Wi-Fi Network" +msgstr "" + +#: setup_station/network_setup.py:355 +msgid "Password:" +msgstr "" + +#: setup_station/network_setup.py:358 +msgid "Show password" +msgstr "" + +#: setup_station/setup_system.py:39 +msgid "Setting system language" +msgstr "" + +#: setup_station/setup_system.py:43 +msgid "Setting keyboard layout" +msgstr "" + +#: setup_station/setup_system.py:47 +msgid "Setting timezone" +msgstr "" + +#: setup_station/setup_system.py:51 +msgid "Creating admin user" +msgstr "" + +#: setup_station/setup_system.py:55 +msgid "Setup complete!" +msgstr "" + +#: setup_station/setup_system.py:64 +msgid "Getting everything ready" +msgstr "" + +#: setup_station/setup_system.py:76 +msgid "This should not take too long." +msgstr "" + +#: setup_station/setup_system.py:78 +msgid "Don't turn your system off." +msgstr "" + +#: setup_station/timezone.py:57 +msgid "Continent" +msgstr "" + +#: setup_station/timezone.py:69 +msgid "City" +msgstr "" diff --git a/po/fi_FI.po b/po/fi_FI.po new file mode 100644 index 0000000..50ef1fa --- /dev/null +++ b/po/fi_FI.po @@ -0,0 +1,252 @@ +# Finnish translations for PACKAGE package. +# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Eric Turgeon , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-11-27 13:23-0400\n" +"PO-Revision-Date: 2025-11-25 08:34-0400\n" +"Last-Translator: Eric Turgeon \n" +"Language-Team: Finnish \n" +"Language: fi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: setup_station/add_admin.py:132 +msgid "The initial root password will be set to the admin user password." +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:99 +msgid "Password not allowed" +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:101 +msgid "Space not allowed" +msgstr "" + +#: setup_station/add_users.py:57 +msgid "User Setup" +msgstr "" + +#: setup_station/add_users.py:68 +msgid "User Account" +msgstr "" + +#: setup_station/add_users.py:71 +msgid "User name" +msgstr "" + +#: setup_station/add_users.py:73 +msgid "Real name" +msgstr "" + +#: setup_station/add_users.py:76 +msgid "Password" +msgstr "" + +#: setup_station/add_users.py:80 +msgid "Verify Password" +msgstr "" + +#: setup_station/add_users.py:84 +msgid "Shell" +msgstr "" + +#: setup_station/add_users.py:97 +msgid "Set Hostname" +msgstr "" + +#: setup_station/add_users.py:102 +msgid "Hostname" +msgstr "" + +#: setup_station/common.py:118 +msgid "Very Weak" +msgstr "" + +#: setup_station/common.py:119 setup_station/common.py:122 +msgid "Fairly Weak" +msgstr "" + +#: setup_station/common.py:120 setup_station/common.py:123 +#: setup_station/common.py:126 +msgid "Weak" +msgstr "" + +#: setup_station/common.py:121 setup_station/common.py:124 +#: setup_station/common.py:127 setup_station/common.py:130 +msgid "Strong" +msgstr "" + +#: setup_station/common.py:125 setup_station/common.py:128 +#: setup_station/common.py:131 +msgid "Fairly Strong" +msgstr "" + +#: setup_station/common.py:129 setup_station/common.py:132 +msgid "Very Strong" +msgstr "" + +#: setup_station/interface_controller.py:22 +#: setup_station/interface_controller.py:31 +msgid "Back" +msgstr "" + +#: setup_station/interface_controller.py:24 +#: setup_station/interface_controller.py:32 +msgid "Next" +msgstr "" + +#: setup_station/interface_controller.py:118 setup_station/language.py:104 +msgid "GhostBSD Initial Setup" +msgstr "" + +#: setup_station/interface_controller.py:119 setup_station/language.py:102 +#: setup_station/language.py:119 +msgid "Language" +msgstr "" + +#: setup_station/interface_controller.py:131 +msgid "Button" +msgstr "" + +#: setup_station/interface_controller.py:155 +msgid "Keyboard" +msgstr "" + +#: setup_station/interface_controller.py:168 +msgid "Time Zone" +msgstr "" + +#: setup_station/interface_controller.py:180 +msgid "Network" +msgstr "" + +#: setup_station/interface_controller.py:192 +msgid "Admin User" +msgstr "" + +#: setup_station/interface_controller.py:204 +msgid "Setup GhostBSD" +msgstr "" + +#: setup_station/interface_controller.py:213 +msgid "Progress Bar" +msgstr "" + +#: setup_station/keyboard.py:41 +msgid "Type here to test your keyboard" +msgstr "" + +#: setup_station/keyboard.py:96 +msgid "Keyboard Layout" +msgstr "" + +#: setup_station/keyboard.py:108 +msgid "Keyboard Models" +msgstr "" + +#: setup_station/language.py:96 setup_station/language.py:162 +msgid "Please select your language:" +msgstr "" + +#: setup_station/network_setup.py:100 setup_station/network_setup.py:155 +msgid "Network card connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:105 setup_station/network_setup.py:160 +msgid "Network card not connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:108 setup_station/network_setup.py:163 +msgid "No network card detected" +msgstr "" + +#: setup_station/network_setup.py:116 setup_station/network_setup.py:171 +msgid "WiFi card detected and connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:120 setup_station/network_setup.py:175 +msgid "WiFi card detected but not connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:123 setup_station/network_setup.py:178 +msgid "WiFi card not detected or not supported" +msgstr "" + +#: setup_station/network_setup.py:200 +msgid "Stat" +msgstr "" + +#: setup_station/network_setup.py:205 +msgid "SSID" +msgstr "" + +#: setup_station/network_setup.py:338 +msgid "WiFi Network Authentication Required" +msgstr "" + +#: setup_station/network_setup.py:350 +msgid "Wi-Fi Network Authentication failed" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Authentication required by" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Wi-Fi Network" +msgstr "" + +#: setup_station/network_setup.py:355 +msgid "Password:" +msgstr "" + +#: setup_station/network_setup.py:358 +msgid "Show password" +msgstr "" + +#: setup_station/setup_system.py:39 +msgid "Setting system language" +msgstr "" + +#: setup_station/setup_system.py:43 +msgid "Setting keyboard layout" +msgstr "" + +#: setup_station/setup_system.py:47 +msgid "Setting timezone" +msgstr "" + +#: setup_station/setup_system.py:51 +msgid "Creating admin user" +msgstr "" + +#: setup_station/setup_system.py:55 +msgid "Setup complete!" +msgstr "" + +#: setup_station/setup_system.py:64 +msgid "Getting everything ready" +msgstr "" + +#: setup_station/setup_system.py:76 +msgid "This should not take too long." +msgstr "" + +#: setup_station/setup_system.py:78 +msgid "Don't turn your system off." +msgstr "" + +#: setup_station/timezone.py:57 +msgid "Continent" +msgstr "" + +#: setup_station/timezone.py:69 +msgid "City" +msgstr "" diff --git a/po/fr_CA.po b/po/fr_CA.po new file mode 100644 index 0000000..835326a --- /dev/null +++ b/po/fr_CA.po @@ -0,0 +1,260 @@ +# French translations for PACKAGE package. +# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Eric Turgeon , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-11-27 13:23-0400\n" +"PO-Revision-Date: 2025-11-25 08:34-0400\n" +"Last-Translator: Eric Turgeon \n" +"Language-Team: French \n" +"Language: fr_CA\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: setup_station/add_admin.py:132 +msgid "The initial root password will be set to the admin user password." +msgstr "" +"Le mot de passe root initial sera défini sur le mot de passe de " +"l'utilisateur administrateur." + +#: setup_station/add_admin.py:214 setup_station/common.py:99 +msgid "Password not allowed" +msgstr "Mot de passe non autorisé" + +#: setup_station/add_admin.py:214 setup_station/common.py:101 +msgid "Space not allowed" +msgstr "Espace non autorisé" + +#: setup_station/add_users.py:57 +msgid "User Setup" +msgstr "Configuration utilisateur" + +#: setup_station/add_users.py:68 +msgid "User Account" +msgstr "Compte utilisateur" + +#: setup_station/add_users.py:71 +msgid "User name" +msgstr "Nom d'utilisateur" + +#: setup_station/add_users.py:73 +msgid "Real name" +msgstr "Nom réel" + +#: setup_station/add_users.py:76 +msgid "Password" +msgstr "Mot de passe" + +#: setup_station/add_users.py:80 +msgid "Verify Password" +msgstr "Vérifier le mot de passe" + +#: setup_station/add_users.py:84 +msgid "Shell" +msgstr "Shell" + +#: setup_station/add_users.py:97 +msgid "Set Hostname" +msgstr "Définir le nom d'hôte" + +#: setup_station/add_users.py:102 +msgid "Hostname" +msgstr "Nom d'hôte" + +#: setup_station/common.py:118 +msgid "Very Weak" +msgstr "Très faible" + +#: setup_station/common.py:119 setup_station/common.py:122 +msgid "Fairly Weak" +msgstr "Assez faible" + +#: setup_station/common.py:120 setup_station/common.py:123 +#: setup_station/common.py:126 +msgid "Weak" +msgstr "Faible" + +#: setup_station/common.py:121 setup_station/common.py:124 +#: setup_station/common.py:127 setup_station/common.py:130 +msgid "Strong" +msgstr "Fort" + +#: setup_station/common.py:125 setup_station/common.py:128 +#: setup_station/common.py:131 +msgid "Fairly Strong" +msgstr "Assez fort" + +#: setup_station/common.py:129 setup_station/common.py:132 +msgid "Very Strong" +msgstr "Très fort" + +#: setup_station/interface_controller.py:22 +#: setup_station/interface_controller.py:31 +msgid "Back" +msgstr "Retour" + +#: setup_station/interface_controller.py:24 +#: setup_station/interface_controller.py:32 +msgid "Next" +msgstr "Suivant" + +#: setup_station/interface_controller.py:118 setup_station/language.py:104 +msgid "GhostBSD Initial Setup" +msgstr "Configuration initiale de GhostBSD" + +#: setup_station/interface_controller.py:119 setup_station/language.py:102 +#: setup_station/language.py:119 +msgid "Language" +msgstr "Langue" + +#: setup_station/interface_controller.py:131 +msgid "Button" +msgstr "Bouton" + +#: setup_station/interface_controller.py:155 +msgid "Keyboard" +msgstr "Clavier" + +#: setup_station/interface_controller.py:168 +msgid "Time Zone" +msgstr "Fuseau horaire" + +#: setup_station/interface_controller.py:180 +msgid "Network" +msgstr "Réseau" + +#: setup_station/interface_controller.py:192 +msgid "Admin User" +msgstr "Utilisateur administrateur" + +#: setup_station/interface_controller.py:204 +msgid "Setup GhostBSD" +msgstr "Configurer GhostBSD" + +#: setup_station/interface_controller.py:213 +msgid "Progress Bar" +msgstr "Barre de progression" + +#: setup_station/keyboard.py:41 +msgid "Type here to test your keyboard" +msgstr "Tapez ici pour tester votre clavier" + +#: setup_station/keyboard.py:96 +msgid "Keyboard Layout" +msgstr "Disposition du clavier" + +#: setup_station/keyboard.py:108 +msgid "Keyboard Models" +msgstr "Modèles de clavier" + +#: setup_station/language.py:96 setup_station/language.py:162 +msgid "Please select your language:" +msgstr "Veuillez sélectionner votre langue :" + +#: setup_station/network_setup.py:100 setup_station/network_setup.py:155 +msgid "Network card connected to the internet" +msgstr "Carte réseau connectée à Internet" + +#: setup_station/network_setup.py:105 setup_station/network_setup.py:160 +msgid "Network card not connected to the internet" +msgstr "Carte réseau non connectée à Internet" + +#: setup_station/network_setup.py:108 setup_station/network_setup.py:163 +msgid "No network card detected" +msgstr "Aucune carte réseau détectée" + +#: setup_station/network_setup.py:116 setup_station/network_setup.py:171 +msgid "WiFi card detected and connected to an access point" +msgstr "Carte WiFi détectée et connectée à un point d'accès" + +#: setup_station/network_setup.py:120 setup_station/network_setup.py:175 +msgid "WiFi card detected but not connected to an access point" +msgstr "Carte WiFi détectée mais non connectée à un point d'accès" + +#: setup_station/network_setup.py:123 setup_station/network_setup.py:178 +msgid "WiFi card not detected or not supported" +msgstr "Carte WiFi non détectée ou non prise en charge" + +#: setup_station/network_setup.py:200 +msgid "Stat" +msgstr "État" + +#: setup_station/network_setup.py:205 +msgid "SSID" +msgstr "SSID" + +#: setup_station/network_setup.py:338 +msgid "WiFi Network Authentication Required" +msgstr "Authentification réseau WiFi requise" + +#: setup_station/network_setup.py:350 +msgid "Wi-Fi Network Authentication failed" +msgstr "Échec de l'authentification du réseau Wi-Fi" + +#: setup_station/network_setup.py:352 +msgid "Authentication required by" +msgstr "Authentification requise par" + +#: setup_station/network_setup.py:352 +msgid "Wi-Fi Network" +msgstr "Réseau Wi-Fi" + +#: setup_station/network_setup.py:355 +msgid "Password:" +msgstr "Mot de passe :" + +#: setup_station/network_setup.py:358 +msgid "Show password" +msgstr "Afficher le mot de passe" + +#: setup_station/setup_system.py:39 +msgid "Setting system language" +msgstr "Configuration de la langue du système" + +#: setup_station/setup_system.py:43 +msgid "Setting keyboard layout" +msgstr "Configuration de la disposition du clavier" + +#: setup_station/setup_system.py:47 +msgid "Setting timezone" +msgstr "Configuration du fuseau horaire" + +#: setup_station/setup_system.py:51 +msgid "Creating admin user" +msgstr "Création de l'utilisateur administrateur" + +#: setup_station/setup_system.py:55 +msgid "Setup complete!" +msgstr "Configuration terminée !" + +#: setup_station/setup_system.py:64 +msgid "Getting everything ready" +msgstr "Préparation en cours" + +#: setup_station/setup_system.py:76 +msgid "This should not take too long." +msgstr "Cela ne devrait pas prendre trop de temps." + +#: setup_station/setup_system.py:78 +msgid "Don't turn your system off." +msgstr "N'éteignez pas votre système." + +#: setup_station/timezone.py:57 +msgid "Continent" +msgstr "Continent" + +#: setup_station/timezone.py:69 +msgid "City" +msgstr "Ville" + +#~ msgid "Super Weak" +#~ msgstr "Très faible" + +#~ msgid "Super Strong" +#~ msgstr "Très fort" diff --git a/po/fr_FR.po b/po/fr_FR.po new file mode 100644 index 0000000..f6fb7b7 --- /dev/null +++ b/po/fr_FR.po @@ -0,0 +1,260 @@ +# French translations for PACKAGE package. +# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Eric Turgeon , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-11-27 13:23-0400\n" +"PO-Revision-Date: 2025-11-25 08:34-0400\n" +"Last-Translator: Eric Turgeon \n" +"Language-Team: French \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: setup_station/add_admin.py:132 +msgid "The initial root password will be set to the admin user password." +msgstr "" +"Le mot de passe root initial sera défini sur le mot de passe de " +"l'utilisateur administrateur." + +#: setup_station/add_admin.py:214 setup_station/common.py:99 +msgid "Password not allowed" +msgstr "Mot de passe non autorisé" + +#: setup_station/add_admin.py:214 setup_station/common.py:101 +msgid "Space not allowed" +msgstr "Espace non autorisé" + +#: setup_station/add_users.py:57 +msgid "User Setup" +msgstr "Configuration utilisateur" + +#: setup_station/add_users.py:68 +msgid "User Account" +msgstr "Compte utilisateur" + +#: setup_station/add_users.py:71 +msgid "User name" +msgstr "Nom d'utilisateur" + +#: setup_station/add_users.py:73 +msgid "Real name" +msgstr "Nom réel" + +#: setup_station/add_users.py:76 +msgid "Password" +msgstr "Mot de passe" + +#: setup_station/add_users.py:80 +msgid "Verify Password" +msgstr "Vérifier le mot de passe" + +#: setup_station/add_users.py:84 +msgid "Shell" +msgstr "Shell" + +#: setup_station/add_users.py:97 +msgid "Set Hostname" +msgstr "Définir le nom d'hôte" + +#: setup_station/add_users.py:102 +msgid "Hostname" +msgstr "Nom d'hôte" + +#: setup_station/common.py:118 +msgid "Very Weak" +msgstr "Très faible" + +#: setup_station/common.py:119 setup_station/common.py:122 +msgid "Fairly Weak" +msgstr "Assez faible" + +#: setup_station/common.py:120 setup_station/common.py:123 +#: setup_station/common.py:126 +msgid "Weak" +msgstr "Faible" + +#: setup_station/common.py:121 setup_station/common.py:124 +#: setup_station/common.py:127 setup_station/common.py:130 +msgid "Strong" +msgstr "Fort" + +#: setup_station/common.py:125 setup_station/common.py:128 +#: setup_station/common.py:131 +msgid "Fairly Strong" +msgstr "Assez fort" + +#: setup_station/common.py:129 setup_station/common.py:132 +msgid "Very Strong" +msgstr "Très fort" + +#: setup_station/interface_controller.py:22 +#: setup_station/interface_controller.py:31 +msgid "Back" +msgstr "Retour" + +#: setup_station/interface_controller.py:24 +#: setup_station/interface_controller.py:32 +msgid "Next" +msgstr "Suivant" + +#: setup_station/interface_controller.py:118 setup_station/language.py:104 +msgid "GhostBSD Initial Setup" +msgstr "Configuration initiale de GhostBSD" + +#: setup_station/interface_controller.py:119 setup_station/language.py:102 +#: setup_station/language.py:119 +msgid "Language" +msgstr "Langue" + +#: setup_station/interface_controller.py:131 +msgid "Button" +msgstr "Bouton" + +#: setup_station/interface_controller.py:155 +msgid "Keyboard" +msgstr "Clavier" + +#: setup_station/interface_controller.py:168 +msgid "Time Zone" +msgstr "Fuseau horaire" + +#: setup_station/interface_controller.py:180 +msgid "Network" +msgstr "Réseau" + +#: setup_station/interface_controller.py:192 +msgid "Admin User" +msgstr "Utilisateur administrateur" + +#: setup_station/interface_controller.py:204 +msgid "Setup GhostBSD" +msgstr "Configurer GhostBSD" + +#: setup_station/interface_controller.py:213 +msgid "Progress Bar" +msgstr "Barre de progression" + +#: setup_station/keyboard.py:41 +msgid "Type here to test your keyboard" +msgstr "Tapez ici pour tester votre clavier" + +#: setup_station/keyboard.py:96 +msgid "Keyboard Layout" +msgstr "Disposition du clavier" + +#: setup_station/keyboard.py:108 +msgid "Keyboard Models" +msgstr "Modèles de clavier" + +#: setup_station/language.py:96 setup_station/language.py:162 +msgid "Please select your language:" +msgstr "Veuillez sélectionner votre langue :" + +#: setup_station/network_setup.py:100 setup_station/network_setup.py:155 +msgid "Network card connected to the internet" +msgstr "Carte réseau connectée à Internet" + +#: setup_station/network_setup.py:105 setup_station/network_setup.py:160 +msgid "Network card not connected to the internet" +msgstr "Carte réseau non connectée à Internet" + +#: setup_station/network_setup.py:108 setup_station/network_setup.py:163 +msgid "No network card detected" +msgstr "Aucune carte réseau détectée" + +#: setup_station/network_setup.py:116 setup_station/network_setup.py:171 +msgid "WiFi card detected and connected to an access point" +msgstr "Carte WiFi détectée et connectée à un point d'accès" + +#: setup_station/network_setup.py:120 setup_station/network_setup.py:175 +msgid "WiFi card detected but not connected to an access point" +msgstr "Carte WiFi détectée mais non connectée à un point d'accès" + +#: setup_station/network_setup.py:123 setup_station/network_setup.py:178 +msgid "WiFi card not detected or not supported" +msgstr "Carte WiFi non détectée ou non prise en charge" + +#: setup_station/network_setup.py:200 +msgid "Stat" +msgstr "État" + +#: setup_station/network_setup.py:205 +msgid "SSID" +msgstr "SSID" + +#: setup_station/network_setup.py:338 +msgid "WiFi Network Authentication Required" +msgstr "Authentification réseau WiFi requise" + +#: setup_station/network_setup.py:350 +msgid "Wi-Fi Network Authentication failed" +msgstr "Échec de l'authentification du réseau Wi-Fi" + +#: setup_station/network_setup.py:352 +msgid "Authentication required by" +msgstr "Authentification requise par" + +#: setup_station/network_setup.py:352 +msgid "Wi-Fi Network" +msgstr "Réseau Wi-Fi" + +#: setup_station/network_setup.py:355 +msgid "Password:" +msgstr "Mot de passe :" + +#: setup_station/network_setup.py:358 +msgid "Show password" +msgstr "Afficher le mot de passe" + +#: setup_station/setup_system.py:39 +msgid "Setting system language" +msgstr "Configuration de la langue du système" + +#: setup_station/setup_system.py:43 +msgid "Setting keyboard layout" +msgstr "Configuration de la disposition du clavier" + +#: setup_station/setup_system.py:47 +msgid "Setting timezone" +msgstr "Configuration du fuseau horaire" + +#: setup_station/setup_system.py:51 +msgid "Creating admin user" +msgstr "Création de l'utilisateur administrateur" + +#: setup_station/setup_system.py:55 +msgid "Setup complete!" +msgstr "Configuration terminée !" + +#: setup_station/setup_system.py:64 +msgid "Getting everything ready" +msgstr "Préparation en cours" + +#: setup_station/setup_system.py:76 +msgid "This should not take too long." +msgstr "Cela ne devrait pas prendre trop de temps." + +#: setup_station/setup_system.py:78 +msgid "Don't turn your system off." +msgstr "N'éteignez pas votre système." + +#: setup_station/timezone.py:57 +msgid "Continent" +msgstr "Continent" + +#: setup_station/timezone.py:69 +msgid "City" +msgstr "Ville" + +#~ msgid "Super Weak" +#~ msgstr "Très faible" + +#~ msgid "Super Strong" +#~ msgstr "Très fort" diff --git a/po/hr_HR.po b/po/hr_HR.po new file mode 100644 index 0000000..c7c2528 --- /dev/null +++ b/po/hr_HR.po @@ -0,0 +1,253 @@ +# Croatian translations for PACKAGE package. +# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Eric Turgeon , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-11-27 13:23-0400\n" +"PO-Revision-Date: 2025-11-25 08:34-0400\n" +"Last-Translator: Eric Turgeon \n" +"Language-Team: Croatian \n" +"Language: hr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: setup_station/add_admin.py:132 +msgid "The initial root password will be set to the admin user password." +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:99 +msgid "Password not allowed" +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:101 +msgid "Space not allowed" +msgstr "" + +#: setup_station/add_users.py:57 +msgid "User Setup" +msgstr "" + +#: setup_station/add_users.py:68 +msgid "User Account" +msgstr "" + +#: setup_station/add_users.py:71 +msgid "User name" +msgstr "" + +#: setup_station/add_users.py:73 +msgid "Real name" +msgstr "" + +#: setup_station/add_users.py:76 +msgid "Password" +msgstr "" + +#: setup_station/add_users.py:80 +msgid "Verify Password" +msgstr "" + +#: setup_station/add_users.py:84 +msgid "Shell" +msgstr "" + +#: setup_station/add_users.py:97 +msgid "Set Hostname" +msgstr "" + +#: setup_station/add_users.py:102 +msgid "Hostname" +msgstr "" + +#: setup_station/common.py:118 +msgid "Very Weak" +msgstr "" + +#: setup_station/common.py:119 setup_station/common.py:122 +msgid "Fairly Weak" +msgstr "" + +#: setup_station/common.py:120 setup_station/common.py:123 +#: setup_station/common.py:126 +msgid "Weak" +msgstr "" + +#: setup_station/common.py:121 setup_station/common.py:124 +#: setup_station/common.py:127 setup_station/common.py:130 +msgid "Strong" +msgstr "" + +#: setup_station/common.py:125 setup_station/common.py:128 +#: setup_station/common.py:131 +msgid "Fairly Strong" +msgstr "" + +#: setup_station/common.py:129 setup_station/common.py:132 +msgid "Very Strong" +msgstr "" + +#: setup_station/interface_controller.py:22 +#: setup_station/interface_controller.py:31 +msgid "Back" +msgstr "" + +#: setup_station/interface_controller.py:24 +#: setup_station/interface_controller.py:32 +msgid "Next" +msgstr "" + +#: setup_station/interface_controller.py:118 setup_station/language.py:104 +msgid "GhostBSD Initial Setup" +msgstr "" + +#: setup_station/interface_controller.py:119 setup_station/language.py:102 +#: setup_station/language.py:119 +msgid "Language" +msgstr "" + +#: setup_station/interface_controller.py:131 +msgid "Button" +msgstr "" + +#: setup_station/interface_controller.py:155 +msgid "Keyboard" +msgstr "" + +#: setup_station/interface_controller.py:168 +msgid "Time Zone" +msgstr "" + +#: setup_station/interface_controller.py:180 +msgid "Network" +msgstr "" + +#: setup_station/interface_controller.py:192 +msgid "Admin User" +msgstr "" + +#: setup_station/interface_controller.py:204 +msgid "Setup GhostBSD" +msgstr "" + +#: setup_station/interface_controller.py:213 +msgid "Progress Bar" +msgstr "" + +#: setup_station/keyboard.py:41 +msgid "Type here to test your keyboard" +msgstr "" + +#: setup_station/keyboard.py:96 +msgid "Keyboard Layout" +msgstr "" + +#: setup_station/keyboard.py:108 +msgid "Keyboard Models" +msgstr "" + +#: setup_station/language.py:96 setup_station/language.py:162 +msgid "Please select your language:" +msgstr "" + +#: setup_station/network_setup.py:100 setup_station/network_setup.py:155 +msgid "Network card connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:105 setup_station/network_setup.py:160 +msgid "Network card not connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:108 setup_station/network_setup.py:163 +msgid "No network card detected" +msgstr "" + +#: setup_station/network_setup.py:116 setup_station/network_setup.py:171 +msgid "WiFi card detected and connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:120 setup_station/network_setup.py:175 +msgid "WiFi card detected but not connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:123 setup_station/network_setup.py:178 +msgid "WiFi card not detected or not supported" +msgstr "" + +#: setup_station/network_setup.py:200 +msgid "Stat" +msgstr "" + +#: setup_station/network_setup.py:205 +msgid "SSID" +msgstr "" + +#: setup_station/network_setup.py:338 +msgid "WiFi Network Authentication Required" +msgstr "" + +#: setup_station/network_setup.py:350 +msgid "Wi-Fi Network Authentication failed" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Authentication required by" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Wi-Fi Network" +msgstr "" + +#: setup_station/network_setup.py:355 +msgid "Password:" +msgstr "" + +#: setup_station/network_setup.py:358 +msgid "Show password" +msgstr "" + +#: setup_station/setup_system.py:39 +msgid "Setting system language" +msgstr "" + +#: setup_station/setup_system.py:43 +msgid "Setting keyboard layout" +msgstr "" + +#: setup_station/setup_system.py:47 +msgid "Setting timezone" +msgstr "" + +#: setup_station/setup_system.py:51 +msgid "Creating admin user" +msgstr "" + +#: setup_station/setup_system.py:55 +msgid "Setup complete!" +msgstr "" + +#: setup_station/setup_system.py:64 +msgid "Getting everything ready" +msgstr "" + +#: setup_station/setup_system.py:76 +msgid "This should not take too long." +msgstr "" + +#: setup_station/setup_system.py:78 +msgid "Don't turn your system off." +msgstr "" + +#: setup_station/timezone.py:57 +msgid "Continent" +msgstr "" + +#: setup_station/timezone.py:69 +msgid "City" +msgstr "" diff --git a/po/hu_HU.po b/po/hu_HU.po new file mode 100644 index 0000000..f8e95db --- /dev/null +++ b/po/hu_HU.po @@ -0,0 +1,252 @@ +# Hungarian translations for PACKAGE package. +# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Eric Turgeon , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-11-27 13:23-0400\n" +"PO-Revision-Date: 2025-11-25 08:34-0400\n" +"Last-Translator: Eric Turgeon \n" +"Language-Team: Hungarian \n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: setup_station/add_admin.py:132 +msgid "The initial root password will be set to the admin user password." +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:99 +msgid "Password not allowed" +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:101 +msgid "Space not allowed" +msgstr "" + +#: setup_station/add_users.py:57 +msgid "User Setup" +msgstr "" + +#: setup_station/add_users.py:68 +msgid "User Account" +msgstr "" + +#: setup_station/add_users.py:71 +msgid "User name" +msgstr "" + +#: setup_station/add_users.py:73 +msgid "Real name" +msgstr "" + +#: setup_station/add_users.py:76 +msgid "Password" +msgstr "" + +#: setup_station/add_users.py:80 +msgid "Verify Password" +msgstr "" + +#: setup_station/add_users.py:84 +msgid "Shell" +msgstr "" + +#: setup_station/add_users.py:97 +msgid "Set Hostname" +msgstr "" + +#: setup_station/add_users.py:102 +msgid "Hostname" +msgstr "" + +#: setup_station/common.py:118 +msgid "Very Weak" +msgstr "" + +#: setup_station/common.py:119 setup_station/common.py:122 +msgid "Fairly Weak" +msgstr "" + +#: setup_station/common.py:120 setup_station/common.py:123 +#: setup_station/common.py:126 +msgid "Weak" +msgstr "" + +#: setup_station/common.py:121 setup_station/common.py:124 +#: setup_station/common.py:127 setup_station/common.py:130 +msgid "Strong" +msgstr "" + +#: setup_station/common.py:125 setup_station/common.py:128 +#: setup_station/common.py:131 +msgid "Fairly Strong" +msgstr "" + +#: setup_station/common.py:129 setup_station/common.py:132 +msgid "Very Strong" +msgstr "" + +#: setup_station/interface_controller.py:22 +#: setup_station/interface_controller.py:31 +msgid "Back" +msgstr "" + +#: setup_station/interface_controller.py:24 +#: setup_station/interface_controller.py:32 +msgid "Next" +msgstr "" + +#: setup_station/interface_controller.py:118 setup_station/language.py:104 +msgid "GhostBSD Initial Setup" +msgstr "" + +#: setup_station/interface_controller.py:119 setup_station/language.py:102 +#: setup_station/language.py:119 +msgid "Language" +msgstr "" + +#: setup_station/interface_controller.py:131 +msgid "Button" +msgstr "" + +#: setup_station/interface_controller.py:155 +msgid "Keyboard" +msgstr "" + +#: setup_station/interface_controller.py:168 +msgid "Time Zone" +msgstr "" + +#: setup_station/interface_controller.py:180 +msgid "Network" +msgstr "" + +#: setup_station/interface_controller.py:192 +msgid "Admin User" +msgstr "" + +#: setup_station/interface_controller.py:204 +msgid "Setup GhostBSD" +msgstr "" + +#: setup_station/interface_controller.py:213 +msgid "Progress Bar" +msgstr "" + +#: setup_station/keyboard.py:41 +msgid "Type here to test your keyboard" +msgstr "" + +#: setup_station/keyboard.py:96 +msgid "Keyboard Layout" +msgstr "" + +#: setup_station/keyboard.py:108 +msgid "Keyboard Models" +msgstr "" + +#: setup_station/language.py:96 setup_station/language.py:162 +msgid "Please select your language:" +msgstr "" + +#: setup_station/network_setup.py:100 setup_station/network_setup.py:155 +msgid "Network card connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:105 setup_station/network_setup.py:160 +msgid "Network card not connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:108 setup_station/network_setup.py:163 +msgid "No network card detected" +msgstr "" + +#: setup_station/network_setup.py:116 setup_station/network_setup.py:171 +msgid "WiFi card detected and connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:120 setup_station/network_setup.py:175 +msgid "WiFi card detected but not connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:123 setup_station/network_setup.py:178 +msgid "WiFi card not detected or not supported" +msgstr "" + +#: setup_station/network_setup.py:200 +msgid "Stat" +msgstr "" + +#: setup_station/network_setup.py:205 +msgid "SSID" +msgstr "" + +#: setup_station/network_setup.py:338 +msgid "WiFi Network Authentication Required" +msgstr "" + +#: setup_station/network_setup.py:350 +msgid "Wi-Fi Network Authentication failed" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Authentication required by" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Wi-Fi Network" +msgstr "" + +#: setup_station/network_setup.py:355 +msgid "Password:" +msgstr "" + +#: setup_station/network_setup.py:358 +msgid "Show password" +msgstr "" + +#: setup_station/setup_system.py:39 +msgid "Setting system language" +msgstr "" + +#: setup_station/setup_system.py:43 +msgid "Setting keyboard layout" +msgstr "" + +#: setup_station/setup_system.py:47 +msgid "Setting timezone" +msgstr "" + +#: setup_station/setup_system.py:51 +msgid "Creating admin user" +msgstr "" + +#: setup_station/setup_system.py:55 +msgid "Setup complete!" +msgstr "" + +#: setup_station/setup_system.py:64 +msgid "Getting everything ready" +msgstr "" + +#: setup_station/setup_system.py:76 +msgid "This should not take too long." +msgstr "" + +#: setup_station/setup_system.py:78 +msgid "Don't turn your system off." +msgstr "" + +#: setup_station/timezone.py:57 +msgid "Continent" +msgstr "" + +#: setup_station/timezone.py:69 +msgid "City" +msgstr "" diff --git a/po/it_IT.po b/po/it_IT.po new file mode 100644 index 0000000..29c933a --- /dev/null +++ b/po/it_IT.po @@ -0,0 +1,252 @@ +# Italian translations for PACKAGE package. +# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Eric Turgeon , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-11-27 13:23-0400\n" +"PO-Revision-Date: 2025-11-25 08:34-0400\n" +"Last-Translator: Eric Turgeon \n" +"Language-Team: Italian \n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: setup_station/add_admin.py:132 +msgid "The initial root password will be set to the admin user password." +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:99 +msgid "Password not allowed" +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:101 +msgid "Space not allowed" +msgstr "" + +#: setup_station/add_users.py:57 +msgid "User Setup" +msgstr "" + +#: setup_station/add_users.py:68 +msgid "User Account" +msgstr "" + +#: setup_station/add_users.py:71 +msgid "User name" +msgstr "" + +#: setup_station/add_users.py:73 +msgid "Real name" +msgstr "" + +#: setup_station/add_users.py:76 +msgid "Password" +msgstr "" + +#: setup_station/add_users.py:80 +msgid "Verify Password" +msgstr "" + +#: setup_station/add_users.py:84 +msgid "Shell" +msgstr "" + +#: setup_station/add_users.py:97 +msgid "Set Hostname" +msgstr "" + +#: setup_station/add_users.py:102 +msgid "Hostname" +msgstr "" + +#: setup_station/common.py:118 +msgid "Very Weak" +msgstr "" + +#: setup_station/common.py:119 setup_station/common.py:122 +msgid "Fairly Weak" +msgstr "" + +#: setup_station/common.py:120 setup_station/common.py:123 +#: setup_station/common.py:126 +msgid "Weak" +msgstr "" + +#: setup_station/common.py:121 setup_station/common.py:124 +#: setup_station/common.py:127 setup_station/common.py:130 +msgid "Strong" +msgstr "" + +#: setup_station/common.py:125 setup_station/common.py:128 +#: setup_station/common.py:131 +msgid "Fairly Strong" +msgstr "" + +#: setup_station/common.py:129 setup_station/common.py:132 +msgid "Very Strong" +msgstr "" + +#: setup_station/interface_controller.py:22 +#: setup_station/interface_controller.py:31 +msgid "Back" +msgstr "" + +#: setup_station/interface_controller.py:24 +#: setup_station/interface_controller.py:32 +msgid "Next" +msgstr "" + +#: setup_station/interface_controller.py:118 setup_station/language.py:104 +msgid "GhostBSD Initial Setup" +msgstr "" + +#: setup_station/interface_controller.py:119 setup_station/language.py:102 +#: setup_station/language.py:119 +msgid "Language" +msgstr "" + +#: setup_station/interface_controller.py:131 +msgid "Button" +msgstr "" + +#: setup_station/interface_controller.py:155 +msgid "Keyboard" +msgstr "" + +#: setup_station/interface_controller.py:168 +msgid "Time Zone" +msgstr "" + +#: setup_station/interface_controller.py:180 +msgid "Network" +msgstr "" + +#: setup_station/interface_controller.py:192 +msgid "Admin User" +msgstr "" + +#: setup_station/interface_controller.py:204 +msgid "Setup GhostBSD" +msgstr "" + +#: setup_station/interface_controller.py:213 +msgid "Progress Bar" +msgstr "" + +#: setup_station/keyboard.py:41 +msgid "Type here to test your keyboard" +msgstr "" + +#: setup_station/keyboard.py:96 +msgid "Keyboard Layout" +msgstr "" + +#: setup_station/keyboard.py:108 +msgid "Keyboard Models" +msgstr "" + +#: setup_station/language.py:96 setup_station/language.py:162 +msgid "Please select your language:" +msgstr "" + +#: setup_station/network_setup.py:100 setup_station/network_setup.py:155 +msgid "Network card connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:105 setup_station/network_setup.py:160 +msgid "Network card not connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:108 setup_station/network_setup.py:163 +msgid "No network card detected" +msgstr "" + +#: setup_station/network_setup.py:116 setup_station/network_setup.py:171 +msgid "WiFi card detected and connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:120 setup_station/network_setup.py:175 +msgid "WiFi card detected but not connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:123 setup_station/network_setup.py:178 +msgid "WiFi card not detected or not supported" +msgstr "" + +#: setup_station/network_setup.py:200 +msgid "Stat" +msgstr "" + +#: setup_station/network_setup.py:205 +msgid "SSID" +msgstr "" + +#: setup_station/network_setup.py:338 +msgid "WiFi Network Authentication Required" +msgstr "" + +#: setup_station/network_setup.py:350 +msgid "Wi-Fi Network Authentication failed" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Authentication required by" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Wi-Fi Network" +msgstr "" + +#: setup_station/network_setup.py:355 +msgid "Password:" +msgstr "" + +#: setup_station/network_setup.py:358 +msgid "Show password" +msgstr "" + +#: setup_station/setup_system.py:39 +msgid "Setting system language" +msgstr "" + +#: setup_station/setup_system.py:43 +msgid "Setting keyboard layout" +msgstr "" + +#: setup_station/setup_system.py:47 +msgid "Setting timezone" +msgstr "" + +#: setup_station/setup_system.py:51 +msgid "Creating admin user" +msgstr "" + +#: setup_station/setup_system.py:55 +msgid "Setup complete!" +msgstr "" + +#: setup_station/setup_system.py:64 +msgid "Getting everything ready" +msgstr "" + +#: setup_station/setup_system.py:76 +msgid "This should not take too long." +msgstr "" + +#: setup_station/setup_system.py:78 +msgid "Don't turn your system off." +msgstr "" + +#: setup_station/timezone.py:57 +msgid "Continent" +msgstr "" + +#: setup_station/timezone.py:69 +msgid "City" +msgstr "" diff --git a/po/ja_JP.po b/po/ja_JP.po new file mode 100644 index 0000000..f09823f --- /dev/null +++ b/po/ja_JP.po @@ -0,0 +1,252 @@ +# Japanese translations for PACKAGE package. +# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Eric Turgeon , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-11-27 13:23-0400\n" +"PO-Revision-Date: 2025-11-25 08:34-0400\n" +"Last-Translator: Eric Turgeon \n" +"Language-Team: Japanese \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: setup_station/add_admin.py:132 +msgid "The initial root password will be set to the admin user password." +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:99 +msgid "Password not allowed" +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:101 +msgid "Space not allowed" +msgstr "" + +#: setup_station/add_users.py:57 +msgid "User Setup" +msgstr "" + +#: setup_station/add_users.py:68 +msgid "User Account" +msgstr "" + +#: setup_station/add_users.py:71 +msgid "User name" +msgstr "" + +#: setup_station/add_users.py:73 +msgid "Real name" +msgstr "" + +#: setup_station/add_users.py:76 +msgid "Password" +msgstr "" + +#: setup_station/add_users.py:80 +msgid "Verify Password" +msgstr "" + +#: setup_station/add_users.py:84 +msgid "Shell" +msgstr "" + +#: setup_station/add_users.py:97 +msgid "Set Hostname" +msgstr "" + +#: setup_station/add_users.py:102 +msgid "Hostname" +msgstr "" + +#: setup_station/common.py:118 +msgid "Very Weak" +msgstr "" + +#: setup_station/common.py:119 setup_station/common.py:122 +msgid "Fairly Weak" +msgstr "" + +#: setup_station/common.py:120 setup_station/common.py:123 +#: setup_station/common.py:126 +msgid "Weak" +msgstr "" + +#: setup_station/common.py:121 setup_station/common.py:124 +#: setup_station/common.py:127 setup_station/common.py:130 +msgid "Strong" +msgstr "" + +#: setup_station/common.py:125 setup_station/common.py:128 +#: setup_station/common.py:131 +msgid "Fairly Strong" +msgstr "" + +#: setup_station/common.py:129 setup_station/common.py:132 +msgid "Very Strong" +msgstr "" + +#: setup_station/interface_controller.py:22 +#: setup_station/interface_controller.py:31 +msgid "Back" +msgstr "" + +#: setup_station/interface_controller.py:24 +#: setup_station/interface_controller.py:32 +msgid "Next" +msgstr "" + +#: setup_station/interface_controller.py:118 setup_station/language.py:104 +msgid "GhostBSD Initial Setup" +msgstr "" + +#: setup_station/interface_controller.py:119 setup_station/language.py:102 +#: setup_station/language.py:119 +msgid "Language" +msgstr "" + +#: setup_station/interface_controller.py:131 +msgid "Button" +msgstr "" + +#: setup_station/interface_controller.py:155 +msgid "Keyboard" +msgstr "" + +#: setup_station/interface_controller.py:168 +msgid "Time Zone" +msgstr "" + +#: setup_station/interface_controller.py:180 +msgid "Network" +msgstr "" + +#: setup_station/interface_controller.py:192 +msgid "Admin User" +msgstr "" + +#: setup_station/interface_controller.py:204 +msgid "Setup GhostBSD" +msgstr "" + +#: setup_station/interface_controller.py:213 +msgid "Progress Bar" +msgstr "" + +#: setup_station/keyboard.py:41 +msgid "Type here to test your keyboard" +msgstr "" + +#: setup_station/keyboard.py:96 +msgid "Keyboard Layout" +msgstr "" + +#: setup_station/keyboard.py:108 +msgid "Keyboard Models" +msgstr "" + +#: setup_station/language.py:96 setup_station/language.py:162 +msgid "Please select your language:" +msgstr "" + +#: setup_station/network_setup.py:100 setup_station/network_setup.py:155 +msgid "Network card connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:105 setup_station/network_setup.py:160 +msgid "Network card not connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:108 setup_station/network_setup.py:163 +msgid "No network card detected" +msgstr "" + +#: setup_station/network_setup.py:116 setup_station/network_setup.py:171 +msgid "WiFi card detected and connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:120 setup_station/network_setup.py:175 +msgid "WiFi card detected but not connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:123 setup_station/network_setup.py:178 +msgid "WiFi card not detected or not supported" +msgstr "" + +#: setup_station/network_setup.py:200 +msgid "Stat" +msgstr "" + +#: setup_station/network_setup.py:205 +msgid "SSID" +msgstr "" + +#: setup_station/network_setup.py:338 +msgid "WiFi Network Authentication Required" +msgstr "" + +#: setup_station/network_setup.py:350 +msgid "Wi-Fi Network Authentication failed" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Authentication required by" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Wi-Fi Network" +msgstr "" + +#: setup_station/network_setup.py:355 +msgid "Password:" +msgstr "" + +#: setup_station/network_setup.py:358 +msgid "Show password" +msgstr "" + +#: setup_station/setup_system.py:39 +msgid "Setting system language" +msgstr "" + +#: setup_station/setup_system.py:43 +msgid "Setting keyboard layout" +msgstr "" + +#: setup_station/setup_system.py:47 +msgid "Setting timezone" +msgstr "" + +#: setup_station/setup_system.py:51 +msgid "Creating admin user" +msgstr "" + +#: setup_station/setup_system.py:55 +msgid "Setup complete!" +msgstr "" + +#: setup_station/setup_system.py:64 +msgid "Getting everything ready" +msgstr "" + +#: setup_station/setup_system.py:76 +msgid "This should not take too long." +msgstr "" + +#: setup_station/setup_system.py:78 +msgid "Don't turn your system off." +msgstr "" + +#: setup_station/timezone.py:57 +msgid "Continent" +msgstr "" + +#: setup_station/timezone.py:69 +msgid "City" +msgstr "" diff --git a/po/ko_KR.po b/po/ko_KR.po new file mode 100644 index 0000000..250c2a2 --- /dev/null +++ b/po/ko_KR.po @@ -0,0 +1,252 @@ +# Korean translations for PACKAGE package. +# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Eric Turgeon , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-11-27 13:23-0400\n" +"PO-Revision-Date: 2025-11-25 08:34-0400\n" +"Last-Translator: Eric Turgeon \n" +"Language-Team: Korean \n" +"Language: ko\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: setup_station/add_admin.py:132 +msgid "The initial root password will be set to the admin user password." +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:99 +msgid "Password not allowed" +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:101 +msgid "Space not allowed" +msgstr "" + +#: setup_station/add_users.py:57 +msgid "User Setup" +msgstr "" + +#: setup_station/add_users.py:68 +msgid "User Account" +msgstr "" + +#: setup_station/add_users.py:71 +msgid "User name" +msgstr "" + +#: setup_station/add_users.py:73 +msgid "Real name" +msgstr "" + +#: setup_station/add_users.py:76 +msgid "Password" +msgstr "" + +#: setup_station/add_users.py:80 +msgid "Verify Password" +msgstr "" + +#: setup_station/add_users.py:84 +msgid "Shell" +msgstr "" + +#: setup_station/add_users.py:97 +msgid "Set Hostname" +msgstr "" + +#: setup_station/add_users.py:102 +msgid "Hostname" +msgstr "" + +#: setup_station/common.py:118 +msgid "Very Weak" +msgstr "" + +#: setup_station/common.py:119 setup_station/common.py:122 +msgid "Fairly Weak" +msgstr "" + +#: setup_station/common.py:120 setup_station/common.py:123 +#: setup_station/common.py:126 +msgid "Weak" +msgstr "" + +#: setup_station/common.py:121 setup_station/common.py:124 +#: setup_station/common.py:127 setup_station/common.py:130 +msgid "Strong" +msgstr "" + +#: setup_station/common.py:125 setup_station/common.py:128 +#: setup_station/common.py:131 +msgid "Fairly Strong" +msgstr "" + +#: setup_station/common.py:129 setup_station/common.py:132 +msgid "Very Strong" +msgstr "" + +#: setup_station/interface_controller.py:22 +#: setup_station/interface_controller.py:31 +msgid "Back" +msgstr "" + +#: setup_station/interface_controller.py:24 +#: setup_station/interface_controller.py:32 +msgid "Next" +msgstr "" + +#: setup_station/interface_controller.py:118 setup_station/language.py:104 +msgid "GhostBSD Initial Setup" +msgstr "" + +#: setup_station/interface_controller.py:119 setup_station/language.py:102 +#: setup_station/language.py:119 +msgid "Language" +msgstr "" + +#: setup_station/interface_controller.py:131 +msgid "Button" +msgstr "" + +#: setup_station/interface_controller.py:155 +msgid "Keyboard" +msgstr "" + +#: setup_station/interface_controller.py:168 +msgid "Time Zone" +msgstr "" + +#: setup_station/interface_controller.py:180 +msgid "Network" +msgstr "" + +#: setup_station/interface_controller.py:192 +msgid "Admin User" +msgstr "" + +#: setup_station/interface_controller.py:204 +msgid "Setup GhostBSD" +msgstr "" + +#: setup_station/interface_controller.py:213 +msgid "Progress Bar" +msgstr "" + +#: setup_station/keyboard.py:41 +msgid "Type here to test your keyboard" +msgstr "" + +#: setup_station/keyboard.py:96 +msgid "Keyboard Layout" +msgstr "" + +#: setup_station/keyboard.py:108 +msgid "Keyboard Models" +msgstr "" + +#: setup_station/language.py:96 setup_station/language.py:162 +msgid "Please select your language:" +msgstr "" + +#: setup_station/network_setup.py:100 setup_station/network_setup.py:155 +msgid "Network card connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:105 setup_station/network_setup.py:160 +msgid "Network card not connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:108 setup_station/network_setup.py:163 +msgid "No network card detected" +msgstr "" + +#: setup_station/network_setup.py:116 setup_station/network_setup.py:171 +msgid "WiFi card detected and connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:120 setup_station/network_setup.py:175 +msgid "WiFi card detected but not connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:123 setup_station/network_setup.py:178 +msgid "WiFi card not detected or not supported" +msgstr "" + +#: setup_station/network_setup.py:200 +msgid "Stat" +msgstr "" + +#: setup_station/network_setup.py:205 +msgid "SSID" +msgstr "" + +#: setup_station/network_setup.py:338 +msgid "WiFi Network Authentication Required" +msgstr "" + +#: setup_station/network_setup.py:350 +msgid "Wi-Fi Network Authentication failed" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Authentication required by" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Wi-Fi Network" +msgstr "" + +#: setup_station/network_setup.py:355 +msgid "Password:" +msgstr "" + +#: setup_station/network_setup.py:358 +msgid "Show password" +msgstr "" + +#: setup_station/setup_system.py:39 +msgid "Setting system language" +msgstr "" + +#: setup_station/setup_system.py:43 +msgid "Setting keyboard layout" +msgstr "" + +#: setup_station/setup_system.py:47 +msgid "Setting timezone" +msgstr "" + +#: setup_station/setup_system.py:51 +msgid "Creating admin user" +msgstr "" + +#: setup_station/setup_system.py:55 +msgid "Setup complete!" +msgstr "" + +#: setup_station/setup_system.py:64 +msgid "Getting everything ready" +msgstr "" + +#: setup_station/setup_system.py:76 +msgid "This should not take too long." +msgstr "" + +#: setup_station/setup_system.py:78 +msgid "Don't turn your system off." +msgstr "" + +#: setup_station/timezone.py:57 +msgid "Continent" +msgstr "" + +#: setup_station/timezone.py:69 +msgid "City" +msgstr "" diff --git a/po/lt_LT.po b/po/lt_LT.po new file mode 100644 index 0000000..6eeea95 --- /dev/null +++ b/po/lt_LT.po @@ -0,0 +1,253 @@ +# Lithuanian translations for PACKAGE package. +# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Eric Turgeon , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-11-27 13:23-0400\n" +"PO-Revision-Date: 2025-11-25 08:34-0400\n" +"Last-Translator: Eric Turgeon \n" +"Language-Team: Lithuanian \n" +"Language: lt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"(n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: setup_station/add_admin.py:132 +msgid "The initial root password will be set to the admin user password." +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:99 +msgid "Password not allowed" +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:101 +msgid "Space not allowed" +msgstr "" + +#: setup_station/add_users.py:57 +msgid "User Setup" +msgstr "" + +#: setup_station/add_users.py:68 +msgid "User Account" +msgstr "" + +#: setup_station/add_users.py:71 +msgid "User name" +msgstr "" + +#: setup_station/add_users.py:73 +msgid "Real name" +msgstr "" + +#: setup_station/add_users.py:76 +msgid "Password" +msgstr "" + +#: setup_station/add_users.py:80 +msgid "Verify Password" +msgstr "" + +#: setup_station/add_users.py:84 +msgid "Shell" +msgstr "" + +#: setup_station/add_users.py:97 +msgid "Set Hostname" +msgstr "" + +#: setup_station/add_users.py:102 +msgid "Hostname" +msgstr "" + +#: setup_station/common.py:118 +msgid "Very Weak" +msgstr "" + +#: setup_station/common.py:119 setup_station/common.py:122 +msgid "Fairly Weak" +msgstr "" + +#: setup_station/common.py:120 setup_station/common.py:123 +#: setup_station/common.py:126 +msgid "Weak" +msgstr "" + +#: setup_station/common.py:121 setup_station/common.py:124 +#: setup_station/common.py:127 setup_station/common.py:130 +msgid "Strong" +msgstr "" + +#: setup_station/common.py:125 setup_station/common.py:128 +#: setup_station/common.py:131 +msgid "Fairly Strong" +msgstr "" + +#: setup_station/common.py:129 setup_station/common.py:132 +msgid "Very Strong" +msgstr "" + +#: setup_station/interface_controller.py:22 +#: setup_station/interface_controller.py:31 +msgid "Back" +msgstr "" + +#: setup_station/interface_controller.py:24 +#: setup_station/interface_controller.py:32 +msgid "Next" +msgstr "" + +#: setup_station/interface_controller.py:118 setup_station/language.py:104 +msgid "GhostBSD Initial Setup" +msgstr "" + +#: setup_station/interface_controller.py:119 setup_station/language.py:102 +#: setup_station/language.py:119 +msgid "Language" +msgstr "" + +#: setup_station/interface_controller.py:131 +msgid "Button" +msgstr "" + +#: setup_station/interface_controller.py:155 +msgid "Keyboard" +msgstr "" + +#: setup_station/interface_controller.py:168 +msgid "Time Zone" +msgstr "" + +#: setup_station/interface_controller.py:180 +msgid "Network" +msgstr "" + +#: setup_station/interface_controller.py:192 +msgid "Admin User" +msgstr "" + +#: setup_station/interface_controller.py:204 +msgid "Setup GhostBSD" +msgstr "" + +#: setup_station/interface_controller.py:213 +msgid "Progress Bar" +msgstr "" + +#: setup_station/keyboard.py:41 +msgid "Type here to test your keyboard" +msgstr "" + +#: setup_station/keyboard.py:96 +msgid "Keyboard Layout" +msgstr "" + +#: setup_station/keyboard.py:108 +msgid "Keyboard Models" +msgstr "" + +#: setup_station/language.py:96 setup_station/language.py:162 +msgid "Please select your language:" +msgstr "" + +#: setup_station/network_setup.py:100 setup_station/network_setup.py:155 +msgid "Network card connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:105 setup_station/network_setup.py:160 +msgid "Network card not connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:108 setup_station/network_setup.py:163 +msgid "No network card detected" +msgstr "" + +#: setup_station/network_setup.py:116 setup_station/network_setup.py:171 +msgid "WiFi card detected and connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:120 setup_station/network_setup.py:175 +msgid "WiFi card detected but not connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:123 setup_station/network_setup.py:178 +msgid "WiFi card not detected or not supported" +msgstr "" + +#: setup_station/network_setup.py:200 +msgid "Stat" +msgstr "" + +#: setup_station/network_setup.py:205 +msgid "SSID" +msgstr "" + +#: setup_station/network_setup.py:338 +msgid "WiFi Network Authentication Required" +msgstr "" + +#: setup_station/network_setup.py:350 +msgid "Wi-Fi Network Authentication failed" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Authentication required by" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Wi-Fi Network" +msgstr "" + +#: setup_station/network_setup.py:355 +msgid "Password:" +msgstr "" + +#: setup_station/network_setup.py:358 +msgid "Show password" +msgstr "" + +#: setup_station/setup_system.py:39 +msgid "Setting system language" +msgstr "" + +#: setup_station/setup_system.py:43 +msgid "Setting keyboard layout" +msgstr "" + +#: setup_station/setup_system.py:47 +msgid "Setting timezone" +msgstr "" + +#: setup_station/setup_system.py:51 +msgid "Creating admin user" +msgstr "" + +#: setup_station/setup_system.py:55 +msgid "Setup complete!" +msgstr "" + +#: setup_station/setup_system.py:64 +msgid "Getting everything ready" +msgstr "" + +#: setup_station/setup_system.py:76 +msgid "This should not take too long." +msgstr "" + +#: setup_station/setup_system.py:78 +msgid "Don't turn your system off." +msgstr "" + +#: setup_station/timezone.py:57 +msgid "Continent" +msgstr "" + +#: setup_station/timezone.py:69 +msgid "City" +msgstr "" diff --git a/po/lv_LV.po b/po/lv_LV.po new file mode 100644 index 0000000..96b49cd --- /dev/null +++ b/po/lv_LV.po @@ -0,0 +1,253 @@ +# Latvian translations for PACKAGE package. +# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Eric Turgeon , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-11-27 13:23-0400\n" +"PO-Revision-Date: 2025-11-25 08:34-0400\n" +"Last-Translator: Eric Turgeon \n" +"Language-Team: Latvian \n" +"Language: lv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : " +"2);\n" + +#: setup_station/add_admin.py:132 +msgid "The initial root password will be set to the admin user password." +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:99 +msgid "Password not allowed" +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:101 +msgid "Space not allowed" +msgstr "" + +#: setup_station/add_users.py:57 +msgid "User Setup" +msgstr "" + +#: setup_station/add_users.py:68 +msgid "User Account" +msgstr "" + +#: setup_station/add_users.py:71 +msgid "User name" +msgstr "" + +#: setup_station/add_users.py:73 +msgid "Real name" +msgstr "" + +#: setup_station/add_users.py:76 +msgid "Password" +msgstr "" + +#: setup_station/add_users.py:80 +msgid "Verify Password" +msgstr "" + +#: setup_station/add_users.py:84 +msgid "Shell" +msgstr "" + +#: setup_station/add_users.py:97 +msgid "Set Hostname" +msgstr "" + +#: setup_station/add_users.py:102 +msgid "Hostname" +msgstr "" + +#: setup_station/common.py:118 +msgid "Very Weak" +msgstr "" + +#: setup_station/common.py:119 setup_station/common.py:122 +msgid "Fairly Weak" +msgstr "" + +#: setup_station/common.py:120 setup_station/common.py:123 +#: setup_station/common.py:126 +msgid "Weak" +msgstr "" + +#: setup_station/common.py:121 setup_station/common.py:124 +#: setup_station/common.py:127 setup_station/common.py:130 +msgid "Strong" +msgstr "" + +#: setup_station/common.py:125 setup_station/common.py:128 +#: setup_station/common.py:131 +msgid "Fairly Strong" +msgstr "" + +#: setup_station/common.py:129 setup_station/common.py:132 +msgid "Very Strong" +msgstr "" + +#: setup_station/interface_controller.py:22 +#: setup_station/interface_controller.py:31 +msgid "Back" +msgstr "" + +#: setup_station/interface_controller.py:24 +#: setup_station/interface_controller.py:32 +msgid "Next" +msgstr "" + +#: setup_station/interface_controller.py:118 setup_station/language.py:104 +msgid "GhostBSD Initial Setup" +msgstr "" + +#: setup_station/interface_controller.py:119 setup_station/language.py:102 +#: setup_station/language.py:119 +msgid "Language" +msgstr "" + +#: setup_station/interface_controller.py:131 +msgid "Button" +msgstr "" + +#: setup_station/interface_controller.py:155 +msgid "Keyboard" +msgstr "" + +#: setup_station/interface_controller.py:168 +msgid "Time Zone" +msgstr "" + +#: setup_station/interface_controller.py:180 +msgid "Network" +msgstr "" + +#: setup_station/interface_controller.py:192 +msgid "Admin User" +msgstr "" + +#: setup_station/interface_controller.py:204 +msgid "Setup GhostBSD" +msgstr "" + +#: setup_station/interface_controller.py:213 +msgid "Progress Bar" +msgstr "" + +#: setup_station/keyboard.py:41 +msgid "Type here to test your keyboard" +msgstr "" + +#: setup_station/keyboard.py:96 +msgid "Keyboard Layout" +msgstr "" + +#: setup_station/keyboard.py:108 +msgid "Keyboard Models" +msgstr "" + +#: setup_station/language.py:96 setup_station/language.py:162 +msgid "Please select your language:" +msgstr "" + +#: setup_station/network_setup.py:100 setup_station/network_setup.py:155 +msgid "Network card connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:105 setup_station/network_setup.py:160 +msgid "Network card not connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:108 setup_station/network_setup.py:163 +msgid "No network card detected" +msgstr "" + +#: setup_station/network_setup.py:116 setup_station/network_setup.py:171 +msgid "WiFi card detected and connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:120 setup_station/network_setup.py:175 +msgid "WiFi card detected but not connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:123 setup_station/network_setup.py:178 +msgid "WiFi card not detected or not supported" +msgstr "" + +#: setup_station/network_setup.py:200 +msgid "Stat" +msgstr "" + +#: setup_station/network_setup.py:205 +msgid "SSID" +msgstr "" + +#: setup_station/network_setup.py:338 +msgid "WiFi Network Authentication Required" +msgstr "" + +#: setup_station/network_setup.py:350 +msgid "Wi-Fi Network Authentication failed" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Authentication required by" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Wi-Fi Network" +msgstr "" + +#: setup_station/network_setup.py:355 +msgid "Password:" +msgstr "" + +#: setup_station/network_setup.py:358 +msgid "Show password" +msgstr "" + +#: setup_station/setup_system.py:39 +msgid "Setting system language" +msgstr "" + +#: setup_station/setup_system.py:43 +msgid "Setting keyboard layout" +msgstr "" + +#: setup_station/setup_system.py:47 +msgid "Setting timezone" +msgstr "" + +#: setup_station/setup_system.py:51 +msgid "Creating admin user" +msgstr "" + +#: setup_station/setup_system.py:55 +msgid "Setup complete!" +msgstr "" + +#: setup_station/setup_system.py:64 +msgid "Getting everything ready" +msgstr "" + +#: setup_station/setup_system.py:76 +msgid "This should not take too long." +msgstr "" + +#: setup_station/setup_system.py:78 +msgid "Don't turn your system off." +msgstr "" + +#: setup_station/timezone.py:57 +msgid "Continent" +msgstr "" + +#: setup_station/timezone.py:69 +msgid "City" +msgstr "" diff --git a/po/nl_NL.po b/po/nl_NL.po new file mode 100644 index 0000000..c66942d --- /dev/null +++ b/po/nl_NL.po @@ -0,0 +1,252 @@ +# Dutch translations for PACKAGE package. +# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Eric Turgeon , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-11-27 13:23-0400\n" +"PO-Revision-Date: 2025-11-25 08:34-0400\n" +"Last-Translator: Eric Turgeon \n" +"Language-Team: Dutch \n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: setup_station/add_admin.py:132 +msgid "The initial root password will be set to the admin user password." +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:99 +msgid "Password not allowed" +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:101 +msgid "Space not allowed" +msgstr "" + +#: setup_station/add_users.py:57 +msgid "User Setup" +msgstr "" + +#: setup_station/add_users.py:68 +msgid "User Account" +msgstr "" + +#: setup_station/add_users.py:71 +msgid "User name" +msgstr "" + +#: setup_station/add_users.py:73 +msgid "Real name" +msgstr "" + +#: setup_station/add_users.py:76 +msgid "Password" +msgstr "" + +#: setup_station/add_users.py:80 +msgid "Verify Password" +msgstr "" + +#: setup_station/add_users.py:84 +msgid "Shell" +msgstr "" + +#: setup_station/add_users.py:97 +msgid "Set Hostname" +msgstr "" + +#: setup_station/add_users.py:102 +msgid "Hostname" +msgstr "" + +#: setup_station/common.py:118 +msgid "Very Weak" +msgstr "" + +#: setup_station/common.py:119 setup_station/common.py:122 +msgid "Fairly Weak" +msgstr "" + +#: setup_station/common.py:120 setup_station/common.py:123 +#: setup_station/common.py:126 +msgid "Weak" +msgstr "" + +#: setup_station/common.py:121 setup_station/common.py:124 +#: setup_station/common.py:127 setup_station/common.py:130 +msgid "Strong" +msgstr "" + +#: setup_station/common.py:125 setup_station/common.py:128 +#: setup_station/common.py:131 +msgid "Fairly Strong" +msgstr "" + +#: setup_station/common.py:129 setup_station/common.py:132 +msgid "Very Strong" +msgstr "" + +#: setup_station/interface_controller.py:22 +#: setup_station/interface_controller.py:31 +msgid "Back" +msgstr "" + +#: setup_station/interface_controller.py:24 +#: setup_station/interface_controller.py:32 +msgid "Next" +msgstr "" + +#: setup_station/interface_controller.py:118 setup_station/language.py:104 +msgid "GhostBSD Initial Setup" +msgstr "" + +#: setup_station/interface_controller.py:119 setup_station/language.py:102 +#: setup_station/language.py:119 +msgid "Language" +msgstr "" + +#: setup_station/interface_controller.py:131 +msgid "Button" +msgstr "" + +#: setup_station/interface_controller.py:155 +msgid "Keyboard" +msgstr "" + +#: setup_station/interface_controller.py:168 +msgid "Time Zone" +msgstr "" + +#: setup_station/interface_controller.py:180 +msgid "Network" +msgstr "" + +#: setup_station/interface_controller.py:192 +msgid "Admin User" +msgstr "" + +#: setup_station/interface_controller.py:204 +msgid "Setup GhostBSD" +msgstr "" + +#: setup_station/interface_controller.py:213 +msgid "Progress Bar" +msgstr "" + +#: setup_station/keyboard.py:41 +msgid "Type here to test your keyboard" +msgstr "" + +#: setup_station/keyboard.py:96 +msgid "Keyboard Layout" +msgstr "" + +#: setup_station/keyboard.py:108 +msgid "Keyboard Models" +msgstr "" + +#: setup_station/language.py:96 setup_station/language.py:162 +msgid "Please select your language:" +msgstr "" + +#: setup_station/network_setup.py:100 setup_station/network_setup.py:155 +msgid "Network card connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:105 setup_station/network_setup.py:160 +msgid "Network card not connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:108 setup_station/network_setup.py:163 +msgid "No network card detected" +msgstr "" + +#: setup_station/network_setup.py:116 setup_station/network_setup.py:171 +msgid "WiFi card detected and connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:120 setup_station/network_setup.py:175 +msgid "WiFi card detected but not connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:123 setup_station/network_setup.py:178 +msgid "WiFi card not detected or not supported" +msgstr "" + +#: setup_station/network_setup.py:200 +msgid "Stat" +msgstr "" + +#: setup_station/network_setup.py:205 +msgid "SSID" +msgstr "" + +#: setup_station/network_setup.py:338 +msgid "WiFi Network Authentication Required" +msgstr "" + +#: setup_station/network_setup.py:350 +msgid "Wi-Fi Network Authentication failed" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Authentication required by" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Wi-Fi Network" +msgstr "" + +#: setup_station/network_setup.py:355 +msgid "Password:" +msgstr "" + +#: setup_station/network_setup.py:358 +msgid "Show password" +msgstr "" + +#: setup_station/setup_system.py:39 +msgid "Setting system language" +msgstr "" + +#: setup_station/setup_system.py:43 +msgid "Setting keyboard layout" +msgstr "" + +#: setup_station/setup_system.py:47 +msgid "Setting timezone" +msgstr "" + +#: setup_station/setup_system.py:51 +msgid "Creating admin user" +msgstr "" + +#: setup_station/setup_system.py:55 +msgid "Setup complete!" +msgstr "" + +#: setup_station/setup_system.py:64 +msgid "Getting everything ready" +msgstr "" + +#: setup_station/setup_system.py:76 +msgid "This should not take too long." +msgstr "" + +#: setup_station/setup_system.py:78 +msgid "Don't turn your system off." +msgstr "" + +#: setup_station/timezone.py:57 +msgid "Continent" +msgstr "" + +#: setup_station/timezone.py:69 +msgid "City" +msgstr "" diff --git a/po/no_NO.po b/po/no_NO.po new file mode 100644 index 0000000..d566a45 --- /dev/null +++ b/po/no_NO.po @@ -0,0 +1,252 @@ +# Norwegian translations for PACKAGE package. +# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Eric Turgeon , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-11-27 13:23-0400\n" +"PO-Revision-Date: 2025-11-25 08:34-0400\n" +"Last-Translator: Eric Turgeon \n" +"Language-Team: Norwegian\n" +"Language: no\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: setup_station/add_admin.py:132 +msgid "The initial root password will be set to the admin user password." +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:99 +msgid "Password not allowed" +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:101 +msgid "Space not allowed" +msgstr "" + +#: setup_station/add_users.py:57 +msgid "User Setup" +msgstr "" + +#: setup_station/add_users.py:68 +msgid "User Account" +msgstr "" + +#: setup_station/add_users.py:71 +msgid "User name" +msgstr "" + +#: setup_station/add_users.py:73 +msgid "Real name" +msgstr "" + +#: setup_station/add_users.py:76 +msgid "Password" +msgstr "" + +#: setup_station/add_users.py:80 +msgid "Verify Password" +msgstr "" + +#: setup_station/add_users.py:84 +msgid "Shell" +msgstr "" + +#: setup_station/add_users.py:97 +msgid "Set Hostname" +msgstr "" + +#: setup_station/add_users.py:102 +msgid "Hostname" +msgstr "" + +#: setup_station/common.py:118 +msgid "Very Weak" +msgstr "" + +#: setup_station/common.py:119 setup_station/common.py:122 +msgid "Fairly Weak" +msgstr "" + +#: setup_station/common.py:120 setup_station/common.py:123 +#: setup_station/common.py:126 +msgid "Weak" +msgstr "" + +#: setup_station/common.py:121 setup_station/common.py:124 +#: setup_station/common.py:127 setup_station/common.py:130 +msgid "Strong" +msgstr "" + +#: setup_station/common.py:125 setup_station/common.py:128 +#: setup_station/common.py:131 +msgid "Fairly Strong" +msgstr "" + +#: setup_station/common.py:129 setup_station/common.py:132 +msgid "Very Strong" +msgstr "" + +#: setup_station/interface_controller.py:22 +#: setup_station/interface_controller.py:31 +msgid "Back" +msgstr "" + +#: setup_station/interface_controller.py:24 +#: setup_station/interface_controller.py:32 +msgid "Next" +msgstr "" + +#: setup_station/interface_controller.py:118 setup_station/language.py:104 +msgid "GhostBSD Initial Setup" +msgstr "" + +#: setup_station/interface_controller.py:119 setup_station/language.py:102 +#: setup_station/language.py:119 +msgid "Language" +msgstr "" + +#: setup_station/interface_controller.py:131 +msgid "Button" +msgstr "" + +#: setup_station/interface_controller.py:155 +msgid "Keyboard" +msgstr "" + +#: setup_station/interface_controller.py:168 +msgid "Time Zone" +msgstr "" + +#: setup_station/interface_controller.py:180 +msgid "Network" +msgstr "" + +#: setup_station/interface_controller.py:192 +msgid "Admin User" +msgstr "" + +#: setup_station/interface_controller.py:204 +msgid "Setup GhostBSD" +msgstr "" + +#: setup_station/interface_controller.py:213 +msgid "Progress Bar" +msgstr "" + +#: setup_station/keyboard.py:41 +msgid "Type here to test your keyboard" +msgstr "" + +#: setup_station/keyboard.py:96 +msgid "Keyboard Layout" +msgstr "" + +#: setup_station/keyboard.py:108 +msgid "Keyboard Models" +msgstr "" + +#: setup_station/language.py:96 setup_station/language.py:162 +msgid "Please select your language:" +msgstr "" + +#: setup_station/network_setup.py:100 setup_station/network_setup.py:155 +msgid "Network card connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:105 setup_station/network_setup.py:160 +msgid "Network card not connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:108 setup_station/network_setup.py:163 +msgid "No network card detected" +msgstr "" + +#: setup_station/network_setup.py:116 setup_station/network_setup.py:171 +msgid "WiFi card detected and connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:120 setup_station/network_setup.py:175 +msgid "WiFi card detected but not connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:123 setup_station/network_setup.py:178 +msgid "WiFi card not detected or not supported" +msgstr "" + +#: setup_station/network_setup.py:200 +msgid "Stat" +msgstr "" + +#: setup_station/network_setup.py:205 +msgid "SSID" +msgstr "" + +#: setup_station/network_setup.py:338 +msgid "WiFi Network Authentication Required" +msgstr "" + +#: setup_station/network_setup.py:350 +msgid "Wi-Fi Network Authentication failed" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Authentication required by" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Wi-Fi Network" +msgstr "" + +#: setup_station/network_setup.py:355 +msgid "Password:" +msgstr "" + +#: setup_station/network_setup.py:358 +msgid "Show password" +msgstr "" + +#: setup_station/setup_system.py:39 +msgid "Setting system language" +msgstr "" + +#: setup_station/setup_system.py:43 +msgid "Setting keyboard layout" +msgstr "" + +#: setup_station/setup_system.py:47 +msgid "Setting timezone" +msgstr "" + +#: setup_station/setup_system.py:51 +msgid "Creating admin user" +msgstr "" + +#: setup_station/setup_system.py:55 +msgid "Setup complete!" +msgstr "" + +#: setup_station/setup_system.py:64 +msgid "Getting everything ready" +msgstr "" + +#: setup_station/setup_system.py:76 +msgid "This should not take too long." +msgstr "" + +#: setup_station/setup_system.py:78 +msgid "Don't turn your system off." +msgstr "" + +#: setup_station/timezone.py:57 +msgid "Continent" +msgstr "" + +#: setup_station/timezone.py:69 +msgid "City" +msgstr "" diff --git a/po/pl_PL.po b/po/pl_PL.po new file mode 100644 index 0000000..11eaff0 --- /dev/null +++ b/po/pl_PL.po @@ -0,0 +1,253 @@ +# Polish translations for PACKAGE package. +# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Eric Turgeon , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-11-27 13:23-0400\n" +"PO-Revision-Date: 2025-11-25 08:34-0400\n" +"Last-Translator: Eric Turgeon \n" +"Language-Team: Polish \n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" + +#: setup_station/add_admin.py:132 +msgid "The initial root password will be set to the admin user password." +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:99 +msgid "Password not allowed" +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:101 +msgid "Space not allowed" +msgstr "" + +#: setup_station/add_users.py:57 +msgid "User Setup" +msgstr "" + +#: setup_station/add_users.py:68 +msgid "User Account" +msgstr "" + +#: setup_station/add_users.py:71 +msgid "User name" +msgstr "" + +#: setup_station/add_users.py:73 +msgid "Real name" +msgstr "" + +#: setup_station/add_users.py:76 +msgid "Password" +msgstr "" + +#: setup_station/add_users.py:80 +msgid "Verify Password" +msgstr "" + +#: setup_station/add_users.py:84 +msgid "Shell" +msgstr "" + +#: setup_station/add_users.py:97 +msgid "Set Hostname" +msgstr "" + +#: setup_station/add_users.py:102 +msgid "Hostname" +msgstr "" + +#: setup_station/common.py:118 +msgid "Very Weak" +msgstr "" + +#: setup_station/common.py:119 setup_station/common.py:122 +msgid "Fairly Weak" +msgstr "" + +#: setup_station/common.py:120 setup_station/common.py:123 +#: setup_station/common.py:126 +msgid "Weak" +msgstr "" + +#: setup_station/common.py:121 setup_station/common.py:124 +#: setup_station/common.py:127 setup_station/common.py:130 +msgid "Strong" +msgstr "" + +#: setup_station/common.py:125 setup_station/common.py:128 +#: setup_station/common.py:131 +msgid "Fairly Strong" +msgstr "" + +#: setup_station/common.py:129 setup_station/common.py:132 +msgid "Very Strong" +msgstr "" + +#: setup_station/interface_controller.py:22 +#: setup_station/interface_controller.py:31 +msgid "Back" +msgstr "" + +#: setup_station/interface_controller.py:24 +#: setup_station/interface_controller.py:32 +msgid "Next" +msgstr "" + +#: setup_station/interface_controller.py:118 setup_station/language.py:104 +msgid "GhostBSD Initial Setup" +msgstr "" + +#: setup_station/interface_controller.py:119 setup_station/language.py:102 +#: setup_station/language.py:119 +msgid "Language" +msgstr "" + +#: setup_station/interface_controller.py:131 +msgid "Button" +msgstr "" + +#: setup_station/interface_controller.py:155 +msgid "Keyboard" +msgstr "" + +#: setup_station/interface_controller.py:168 +msgid "Time Zone" +msgstr "" + +#: setup_station/interface_controller.py:180 +msgid "Network" +msgstr "" + +#: setup_station/interface_controller.py:192 +msgid "Admin User" +msgstr "" + +#: setup_station/interface_controller.py:204 +msgid "Setup GhostBSD" +msgstr "" + +#: setup_station/interface_controller.py:213 +msgid "Progress Bar" +msgstr "" + +#: setup_station/keyboard.py:41 +msgid "Type here to test your keyboard" +msgstr "" + +#: setup_station/keyboard.py:96 +msgid "Keyboard Layout" +msgstr "" + +#: setup_station/keyboard.py:108 +msgid "Keyboard Models" +msgstr "" + +#: setup_station/language.py:96 setup_station/language.py:162 +msgid "Please select your language:" +msgstr "" + +#: setup_station/network_setup.py:100 setup_station/network_setup.py:155 +msgid "Network card connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:105 setup_station/network_setup.py:160 +msgid "Network card not connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:108 setup_station/network_setup.py:163 +msgid "No network card detected" +msgstr "" + +#: setup_station/network_setup.py:116 setup_station/network_setup.py:171 +msgid "WiFi card detected and connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:120 setup_station/network_setup.py:175 +msgid "WiFi card detected but not connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:123 setup_station/network_setup.py:178 +msgid "WiFi card not detected or not supported" +msgstr "" + +#: setup_station/network_setup.py:200 +msgid "Stat" +msgstr "" + +#: setup_station/network_setup.py:205 +msgid "SSID" +msgstr "" + +#: setup_station/network_setup.py:338 +msgid "WiFi Network Authentication Required" +msgstr "" + +#: setup_station/network_setup.py:350 +msgid "Wi-Fi Network Authentication failed" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Authentication required by" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Wi-Fi Network" +msgstr "" + +#: setup_station/network_setup.py:355 +msgid "Password:" +msgstr "" + +#: setup_station/network_setup.py:358 +msgid "Show password" +msgstr "" + +#: setup_station/setup_system.py:39 +msgid "Setting system language" +msgstr "" + +#: setup_station/setup_system.py:43 +msgid "Setting keyboard layout" +msgstr "" + +#: setup_station/setup_system.py:47 +msgid "Setting timezone" +msgstr "" + +#: setup_station/setup_system.py:51 +msgid "Creating admin user" +msgstr "" + +#: setup_station/setup_system.py:55 +msgid "Setup complete!" +msgstr "" + +#: setup_station/setup_system.py:64 +msgid "Getting everything ready" +msgstr "" + +#: setup_station/setup_system.py:76 +msgid "This should not take too long." +msgstr "" + +#: setup_station/setup_system.py:78 +msgid "Don't turn your system off." +msgstr "" + +#: setup_station/timezone.py:57 +msgid "Continent" +msgstr "" + +#: setup_station/timezone.py:69 +msgid "City" +msgstr "" diff --git a/po/pt_BR.po b/po/pt_BR.po new file mode 100644 index 0000000..522888a --- /dev/null +++ b/po/pt_BR.po @@ -0,0 +1,253 @@ +# Portuguese translations for PACKAGE package. +# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Eric Turgeon , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-11-27 13:23-0400\n" +"PO-Revision-Date: 2025-11-25 08:34-0400\n" +"Last-Translator: Eric Turgeon \n" +"Language-Team: Brazilian Portuguese \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: setup_station/add_admin.py:132 +msgid "The initial root password will be set to the admin user password." +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:99 +msgid "Password not allowed" +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:101 +msgid "Space not allowed" +msgstr "" + +#: setup_station/add_users.py:57 +msgid "User Setup" +msgstr "" + +#: setup_station/add_users.py:68 +msgid "User Account" +msgstr "" + +#: setup_station/add_users.py:71 +msgid "User name" +msgstr "" + +#: setup_station/add_users.py:73 +msgid "Real name" +msgstr "" + +#: setup_station/add_users.py:76 +msgid "Password" +msgstr "" + +#: setup_station/add_users.py:80 +msgid "Verify Password" +msgstr "" + +#: setup_station/add_users.py:84 +msgid "Shell" +msgstr "" + +#: setup_station/add_users.py:97 +msgid "Set Hostname" +msgstr "" + +#: setup_station/add_users.py:102 +msgid "Hostname" +msgstr "" + +#: setup_station/common.py:118 +msgid "Very Weak" +msgstr "" + +#: setup_station/common.py:119 setup_station/common.py:122 +msgid "Fairly Weak" +msgstr "" + +#: setup_station/common.py:120 setup_station/common.py:123 +#: setup_station/common.py:126 +msgid "Weak" +msgstr "" + +#: setup_station/common.py:121 setup_station/common.py:124 +#: setup_station/common.py:127 setup_station/common.py:130 +msgid "Strong" +msgstr "" + +#: setup_station/common.py:125 setup_station/common.py:128 +#: setup_station/common.py:131 +msgid "Fairly Strong" +msgstr "" + +#: setup_station/common.py:129 setup_station/common.py:132 +msgid "Very Strong" +msgstr "" + +#: setup_station/interface_controller.py:22 +#: setup_station/interface_controller.py:31 +msgid "Back" +msgstr "" + +#: setup_station/interface_controller.py:24 +#: setup_station/interface_controller.py:32 +msgid "Next" +msgstr "" + +#: setup_station/interface_controller.py:118 setup_station/language.py:104 +msgid "GhostBSD Initial Setup" +msgstr "" + +#: setup_station/interface_controller.py:119 setup_station/language.py:102 +#: setup_station/language.py:119 +msgid "Language" +msgstr "" + +#: setup_station/interface_controller.py:131 +msgid "Button" +msgstr "" + +#: setup_station/interface_controller.py:155 +msgid "Keyboard" +msgstr "" + +#: setup_station/interface_controller.py:168 +msgid "Time Zone" +msgstr "" + +#: setup_station/interface_controller.py:180 +msgid "Network" +msgstr "" + +#: setup_station/interface_controller.py:192 +msgid "Admin User" +msgstr "" + +#: setup_station/interface_controller.py:204 +msgid "Setup GhostBSD" +msgstr "" + +#: setup_station/interface_controller.py:213 +msgid "Progress Bar" +msgstr "" + +#: setup_station/keyboard.py:41 +msgid "Type here to test your keyboard" +msgstr "" + +#: setup_station/keyboard.py:96 +msgid "Keyboard Layout" +msgstr "" + +#: setup_station/keyboard.py:108 +msgid "Keyboard Models" +msgstr "" + +#: setup_station/language.py:96 setup_station/language.py:162 +msgid "Please select your language:" +msgstr "" + +#: setup_station/network_setup.py:100 setup_station/network_setup.py:155 +msgid "Network card connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:105 setup_station/network_setup.py:160 +msgid "Network card not connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:108 setup_station/network_setup.py:163 +msgid "No network card detected" +msgstr "" + +#: setup_station/network_setup.py:116 setup_station/network_setup.py:171 +msgid "WiFi card detected and connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:120 setup_station/network_setup.py:175 +msgid "WiFi card detected but not connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:123 setup_station/network_setup.py:178 +msgid "WiFi card not detected or not supported" +msgstr "" + +#: setup_station/network_setup.py:200 +msgid "Stat" +msgstr "" + +#: setup_station/network_setup.py:205 +msgid "SSID" +msgstr "" + +#: setup_station/network_setup.py:338 +msgid "WiFi Network Authentication Required" +msgstr "" + +#: setup_station/network_setup.py:350 +msgid "Wi-Fi Network Authentication failed" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Authentication required by" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Wi-Fi Network" +msgstr "" + +#: setup_station/network_setup.py:355 +msgid "Password:" +msgstr "" + +#: setup_station/network_setup.py:358 +msgid "Show password" +msgstr "" + +#: setup_station/setup_system.py:39 +msgid "Setting system language" +msgstr "" + +#: setup_station/setup_system.py:43 +msgid "Setting keyboard layout" +msgstr "" + +#: setup_station/setup_system.py:47 +msgid "Setting timezone" +msgstr "" + +#: setup_station/setup_system.py:51 +msgid "Creating admin user" +msgstr "" + +#: setup_station/setup_system.py:55 +msgid "Setup complete!" +msgstr "" + +#: setup_station/setup_system.py:64 +msgid "Getting everything ready" +msgstr "" + +#: setup_station/setup_system.py:76 +msgid "This should not take too long." +msgstr "" + +#: setup_station/setup_system.py:78 +msgid "Don't turn your system off." +msgstr "" + +#: setup_station/timezone.py:57 +msgid "Continent" +msgstr "" + +#: setup_station/timezone.py:69 +msgid "City" +msgstr "" diff --git a/po/pt_PT.po b/po/pt_PT.po new file mode 100644 index 0000000..f8fce23 --- /dev/null +++ b/po/pt_PT.po @@ -0,0 +1,252 @@ +# Portuguese translations for PACKAGE package. +# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Eric Turgeon , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-11-27 13:23-0400\n" +"PO-Revision-Date: 2025-11-25 08:34-0400\n" +"Last-Translator: Eric Turgeon \n" +"Language-Team: Portuguese \n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: setup_station/add_admin.py:132 +msgid "The initial root password will be set to the admin user password." +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:99 +msgid "Password not allowed" +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:101 +msgid "Space not allowed" +msgstr "" + +#: setup_station/add_users.py:57 +msgid "User Setup" +msgstr "" + +#: setup_station/add_users.py:68 +msgid "User Account" +msgstr "" + +#: setup_station/add_users.py:71 +msgid "User name" +msgstr "" + +#: setup_station/add_users.py:73 +msgid "Real name" +msgstr "" + +#: setup_station/add_users.py:76 +msgid "Password" +msgstr "" + +#: setup_station/add_users.py:80 +msgid "Verify Password" +msgstr "" + +#: setup_station/add_users.py:84 +msgid "Shell" +msgstr "" + +#: setup_station/add_users.py:97 +msgid "Set Hostname" +msgstr "" + +#: setup_station/add_users.py:102 +msgid "Hostname" +msgstr "" + +#: setup_station/common.py:118 +msgid "Very Weak" +msgstr "" + +#: setup_station/common.py:119 setup_station/common.py:122 +msgid "Fairly Weak" +msgstr "" + +#: setup_station/common.py:120 setup_station/common.py:123 +#: setup_station/common.py:126 +msgid "Weak" +msgstr "" + +#: setup_station/common.py:121 setup_station/common.py:124 +#: setup_station/common.py:127 setup_station/common.py:130 +msgid "Strong" +msgstr "" + +#: setup_station/common.py:125 setup_station/common.py:128 +#: setup_station/common.py:131 +msgid "Fairly Strong" +msgstr "" + +#: setup_station/common.py:129 setup_station/common.py:132 +msgid "Very Strong" +msgstr "" + +#: setup_station/interface_controller.py:22 +#: setup_station/interface_controller.py:31 +msgid "Back" +msgstr "" + +#: setup_station/interface_controller.py:24 +#: setup_station/interface_controller.py:32 +msgid "Next" +msgstr "" + +#: setup_station/interface_controller.py:118 setup_station/language.py:104 +msgid "GhostBSD Initial Setup" +msgstr "" + +#: setup_station/interface_controller.py:119 setup_station/language.py:102 +#: setup_station/language.py:119 +msgid "Language" +msgstr "" + +#: setup_station/interface_controller.py:131 +msgid "Button" +msgstr "" + +#: setup_station/interface_controller.py:155 +msgid "Keyboard" +msgstr "" + +#: setup_station/interface_controller.py:168 +msgid "Time Zone" +msgstr "" + +#: setup_station/interface_controller.py:180 +msgid "Network" +msgstr "" + +#: setup_station/interface_controller.py:192 +msgid "Admin User" +msgstr "" + +#: setup_station/interface_controller.py:204 +msgid "Setup GhostBSD" +msgstr "" + +#: setup_station/interface_controller.py:213 +msgid "Progress Bar" +msgstr "" + +#: setup_station/keyboard.py:41 +msgid "Type here to test your keyboard" +msgstr "" + +#: setup_station/keyboard.py:96 +msgid "Keyboard Layout" +msgstr "" + +#: setup_station/keyboard.py:108 +msgid "Keyboard Models" +msgstr "" + +#: setup_station/language.py:96 setup_station/language.py:162 +msgid "Please select your language:" +msgstr "" + +#: setup_station/network_setup.py:100 setup_station/network_setup.py:155 +msgid "Network card connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:105 setup_station/network_setup.py:160 +msgid "Network card not connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:108 setup_station/network_setup.py:163 +msgid "No network card detected" +msgstr "" + +#: setup_station/network_setup.py:116 setup_station/network_setup.py:171 +msgid "WiFi card detected and connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:120 setup_station/network_setup.py:175 +msgid "WiFi card detected but not connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:123 setup_station/network_setup.py:178 +msgid "WiFi card not detected or not supported" +msgstr "" + +#: setup_station/network_setup.py:200 +msgid "Stat" +msgstr "" + +#: setup_station/network_setup.py:205 +msgid "SSID" +msgstr "" + +#: setup_station/network_setup.py:338 +msgid "WiFi Network Authentication Required" +msgstr "" + +#: setup_station/network_setup.py:350 +msgid "Wi-Fi Network Authentication failed" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Authentication required by" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Wi-Fi Network" +msgstr "" + +#: setup_station/network_setup.py:355 +msgid "Password:" +msgstr "" + +#: setup_station/network_setup.py:358 +msgid "Show password" +msgstr "" + +#: setup_station/setup_system.py:39 +msgid "Setting system language" +msgstr "" + +#: setup_station/setup_system.py:43 +msgid "Setting keyboard layout" +msgstr "" + +#: setup_station/setup_system.py:47 +msgid "Setting timezone" +msgstr "" + +#: setup_station/setup_system.py:51 +msgid "Creating admin user" +msgstr "" + +#: setup_station/setup_system.py:55 +msgid "Setup complete!" +msgstr "" + +#: setup_station/setup_system.py:64 +msgid "Getting everything ready" +msgstr "" + +#: setup_station/setup_system.py:76 +msgid "This should not take too long." +msgstr "" + +#: setup_station/setup_system.py:78 +msgid "Don't turn your system off." +msgstr "" + +#: setup_station/timezone.py:57 +msgid "Continent" +msgstr "" + +#: setup_station/timezone.py:69 +msgid "City" +msgstr "" diff --git a/po/ro_RO.po b/po/ro_RO.po new file mode 100644 index 0000000..e83669f --- /dev/null +++ b/po/ro_RO.po @@ -0,0 +1,253 @@ +# Romanian translations for PACKAGE package. +# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Eric Turgeon , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-11-27 13:23-0400\n" +"PO-Revision-Date: 2025-11-25 08:34-0400\n" +"Last-Translator: Eric Turgeon \n" +"Language-Team: Romanian \n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2;\n" + +#: setup_station/add_admin.py:132 +msgid "The initial root password will be set to the admin user password." +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:99 +msgid "Password not allowed" +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:101 +msgid "Space not allowed" +msgstr "" + +#: setup_station/add_users.py:57 +msgid "User Setup" +msgstr "" + +#: setup_station/add_users.py:68 +msgid "User Account" +msgstr "" + +#: setup_station/add_users.py:71 +msgid "User name" +msgstr "" + +#: setup_station/add_users.py:73 +msgid "Real name" +msgstr "" + +#: setup_station/add_users.py:76 +msgid "Password" +msgstr "" + +#: setup_station/add_users.py:80 +msgid "Verify Password" +msgstr "" + +#: setup_station/add_users.py:84 +msgid "Shell" +msgstr "" + +#: setup_station/add_users.py:97 +msgid "Set Hostname" +msgstr "" + +#: setup_station/add_users.py:102 +msgid "Hostname" +msgstr "" + +#: setup_station/common.py:118 +msgid "Very Weak" +msgstr "" + +#: setup_station/common.py:119 setup_station/common.py:122 +msgid "Fairly Weak" +msgstr "" + +#: setup_station/common.py:120 setup_station/common.py:123 +#: setup_station/common.py:126 +msgid "Weak" +msgstr "" + +#: setup_station/common.py:121 setup_station/common.py:124 +#: setup_station/common.py:127 setup_station/common.py:130 +msgid "Strong" +msgstr "" + +#: setup_station/common.py:125 setup_station/common.py:128 +#: setup_station/common.py:131 +msgid "Fairly Strong" +msgstr "" + +#: setup_station/common.py:129 setup_station/common.py:132 +msgid "Very Strong" +msgstr "" + +#: setup_station/interface_controller.py:22 +#: setup_station/interface_controller.py:31 +msgid "Back" +msgstr "" + +#: setup_station/interface_controller.py:24 +#: setup_station/interface_controller.py:32 +msgid "Next" +msgstr "" + +#: setup_station/interface_controller.py:118 setup_station/language.py:104 +msgid "GhostBSD Initial Setup" +msgstr "" + +#: setup_station/interface_controller.py:119 setup_station/language.py:102 +#: setup_station/language.py:119 +msgid "Language" +msgstr "" + +#: setup_station/interface_controller.py:131 +msgid "Button" +msgstr "" + +#: setup_station/interface_controller.py:155 +msgid "Keyboard" +msgstr "" + +#: setup_station/interface_controller.py:168 +msgid "Time Zone" +msgstr "" + +#: setup_station/interface_controller.py:180 +msgid "Network" +msgstr "" + +#: setup_station/interface_controller.py:192 +msgid "Admin User" +msgstr "" + +#: setup_station/interface_controller.py:204 +msgid "Setup GhostBSD" +msgstr "" + +#: setup_station/interface_controller.py:213 +msgid "Progress Bar" +msgstr "" + +#: setup_station/keyboard.py:41 +msgid "Type here to test your keyboard" +msgstr "" + +#: setup_station/keyboard.py:96 +msgid "Keyboard Layout" +msgstr "" + +#: setup_station/keyboard.py:108 +msgid "Keyboard Models" +msgstr "" + +#: setup_station/language.py:96 setup_station/language.py:162 +msgid "Please select your language:" +msgstr "" + +#: setup_station/network_setup.py:100 setup_station/network_setup.py:155 +msgid "Network card connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:105 setup_station/network_setup.py:160 +msgid "Network card not connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:108 setup_station/network_setup.py:163 +msgid "No network card detected" +msgstr "" + +#: setup_station/network_setup.py:116 setup_station/network_setup.py:171 +msgid "WiFi card detected and connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:120 setup_station/network_setup.py:175 +msgid "WiFi card detected but not connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:123 setup_station/network_setup.py:178 +msgid "WiFi card not detected or not supported" +msgstr "" + +#: setup_station/network_setup.py:200 +msgid "Stat" +msgstr "" + +#: setup_station/network_setup.py:205 +msgid "SSID" +msgstr "" + +#: setup_station/network_setup.py:338 +msgid "WiFi Network Authentication Required" +msgstr "" + +#: setup_station/network_setup.py:350 +msgid "Wi-Fi Network Authentication failed" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Authentication required by" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Wi-Fi Network" +msgstr "" + +#: setup_station/network_setup.py:355 +msgid "Password:" +msgstr "" + +#: setup_station/network_setup.py:358 +msgid "Show password" +msgstr "" + +#: setup_station/setup_system.py:39 +msgid "Setting system language" +msgstr "" + +#: setup_station/setup_system.py:43 +msgid "Setting keyboard layout" +msgstr "" + +#: setup_station/setup_system.py:47 +msgid "Setting timezone" +msgstr "" + +#: setup_station/setup_system.py:51 +msgid "Creating admin user" +msgstr "" + +#: setup_station/setup_system.py:55 +msgid "Setup complete!" +msgstr "" + +#: setup_station/setup_system.py:64 +msgid "Getting everything ready" +msgstr "" + +#: setup_station/setup_system.py:76 +msgid "This should not take too long." +msgstr "" + +#: setup_station/setup_system.py:78 +msgid "Don't turn your system off." +msgstr "" + +#: setup_station/timezone.py:57 +msgid "Continent" +msgstr "" + +#: setup_station/timezone.py:69 +msgid "City" +msgstr "" diff --git a/po/ru_RU.po b/po/ru_RU.po new file mode 100644 index 0000000..5dc71a0 --- /dev/null +++ b/po/ru_RU.po @@ -0,0 +1,253 @@ +# Russian translations for PACKAGE package. +# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Eric Turgeon , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-11-27 13:23-0400\n" +"PO-Revision-Date: 2025-11-25 08:34-0400\n" +"Last-Translator: Eric Turgeon \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: setup_station/add_admin.py:132 +msgid "The initial root password will be set to the admin user password." +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:99 +msgid "Password not allowed" +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:101 +msgid "Space not allowed" +msgstr "" + +#: setup_station/add_users.py:57 +msgid "User Setup" +msgstr "" + +#: setup_station/add_users.py:68 +msgid "User Account" +msgstr "" + +#: setup_station/add_users.py:71 +msgid "User name" +msgstr "" + +#: setup_station/add_users.py:73 +msgid "Real name" +msgstr "" + +#: setup_station/add_users.py:76 +msgid "Password" +msgstr "" + +#: setup_station/add_users.py:80 +msgid "Verify Password" +msgstr "" + +#: setup_station/add_users.py:84 +msgid "Shell" +msgstr "" + +#: setup_station/add_users.py:97 +msgid "Set Hostname" +msgstr "" + +#: setup_station/add_users.py:102 +msgid "Hostname" +msgstr "" + +#: setup_station/common.py:118 +msgid "Very Weak" +msgstr "" + +#: setup_station/common.py:119 setup_station/common.py:122 +msgid "Fairly Weak" +msgstr "" + +#: setup_station/common.py:120 setup_station/common.py:123 +#: setup_station/common.py:126 +msgid "Weak" +msgstr "" + +#: setup_station/common.py:121 setup_station/common.py:124 +#: setup_station/common.py:127 setup_station/common.py:130 +msgid "Strong" +msgstr "" + +#: setup_station/common.py:125 setup_station/common.py:128 +#: setup_station/common.py:131 +msgid "Fairly Strong" +msgstr "" + +#: setup_station/common.py:129 setup_station/common.py:132 +msgid "Very Strong" +msgstr "" + +#: setup_station/interface_controller.py:22 +#: setup_station/interface_controller.py:31 +msgid "Back" +msgstr "" + +#: setup_station/interface_controller.py:24 +#: setup_station/interface_controller.py:32 +msgid "Next" +msgstr "" + +#: setup_station/interface_controller.py:118 setup_station/language.py:104 +msgid "GhostBSD Initial Setup" +msgstr "" + +#: setup_station/interface_controller.py:119 setup_station/language.py:102 +#: setup_station/language.py:119 +msgid "Language" +msgstr "" + +#: setup_station/interface_controller.py:131 +msgid "Button" +msgstr "" + +#: setup_station/interface_controller.py:155 +msgid "Keyboard" +msgstr "" + +#: setup_station/interface_controller.py:168 +msgid "Time Zone" +msgstr "" + +#: setup_station/interface_controller.py:180 +msgid "Network" +msgstr "" + +#: setup_station/interface_controller.py:192 +msgid "Admin User" +msgstr "" + +#: setup_station/interface_controller.py:204 +msgid "Setup GhostBSD" +msgstr "" + +#: setup_station/interface_controller.py:213 +msgid "Progress Bar" +msgstr "" + +#: setup_station/keyboard.py:41 +msgid "Type here to test your keyboard" +msgstr "" + +#: setup_station/keyboard.py:96 +msgid "Keyboard Layout" +msgstr "" + +#: setup_station/keyboard.py:108 +msgid "Keyboard Models" +msgstr "" + +#: setup_station/language.py:96 setup_station/language.py:162 +msgid "Please select your language:" +msgstr "" + +#: setup_station/network_setup.py:100 setup_station/network_setup.py:155 +msgid "Network card connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:105 setup_station/network_setup.py:160 +msgid "Network card not connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:108 setup_station/network_setup.py:163 +msgid "No network card detected" +msgstr "" + +#: setup_station/network_setup.py:116 setup_station/network_setup.py:171 +msgid "WiFi card detected and connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:120 setup_station/network_setup.py:175 +msgid "WiFi card detected but not connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:123 setup_station/network_setup.py:178 +msgid "WiFi card not detected or not supported" +msgstr "" + +#: setup_station/network_setup.py:200 +msgid "Stat" +msgstr "" + +#: setup_station/network_setup.py:205 +msgid "SSID" +msgstr "" + +#: setup_station/network_setup.py:338 +msgid "WiFi Network Authentication Required" +msgstr "" + +#: setup_station/network_setup.py:350 +msgid "Wi-Fi Network Authentication failed" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Authentication required by" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Wi-Fi Network" +msgstr "" + +#: setup_station/network_setup.py:355 +msgid "Password:" +msgstr "" + +#: setup_station/network_setup.py:358 +msgid "Show password" +msgstr "" + +#: setup_station/setup_system.py:39 +msgid "Setting system language" +msgstr "" + +#: setup_station/setup_system.py:43 +msgid "Setting keyboard layout" +msgstr "" + +#: setup_station/setup_system.py:47 +msgid "Setting timezone" +msgstr "" + +#: setup_station/setup_system.py:51 +msgid "Creating admin user" +msgstr "" + +#: setup_station/setup_system.py:55 +msgid "Setup complete!" +msgstr "" + +#: setup_station/setup_system.py:64 +msgid "Getting everything ready" +msgstr "" + +#: setup_station/setup_system.py:76 +msgid "This should not take too long." +msgstr "" + +#: setup_station/setup_system.py:78 +msgid "Don't turn your system off." +msgstr "" + +#: setup_station/timezone.py:57 +msgid "Continent" +msgstr "" + +#: setup_station/timezone.py:69 +msgid "City" +msgstr "" diff --git a/po/setup-station.pot b/po/setup-station.pot new file mode 100644 index 0000000..2e97b32 --- /dev/null +++ b/po/setup-station.pot @@ -0,0 +1,252 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-11-27 13:23-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: setup_station/add_admin.py:132 +msgid "The initial root password will be set to the admin user password." +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:99 +msgid "Password not allowed" +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:101 +msgid "Space not allowed" +msgstr "" + +#: setup_station/add_users.py:57 +msgid "User Setup" +msgstr "" + +#: setup_station/add_users.py:68 +msgid "User Account" +msgstr "" + +#: setup_station/add_users.py:71 +msgid "User name" +msgstr "" + +#: setup_station/add_users.py:73 +msgid "Real name" +msgstr "" + +#: setup_station/add_users.py:76 +msgid "Password" +msgstr "" + +#: setup_station/add_users.py:80 +msgid "Verify Password" +msgstr "" + +#: setup_station/add_users.py:84 +msgid "Shell" +msgstr "" + +#: setup_station/add_users.py:97 +msgid "Set Hostname" +msgstr "" + +#: setup_station/add_users.py:102 +msgid "Hostname" +msgstr "" + +#: setup_station/common.py:118 +msgid "Very Weak" +msgstr "" + +#: setup_station/common.py:119 setup_station/common.py:122 +msgid "Fairly Weak" +msgstr "" + +#: setup_station/common.py:120 setup_station/common.py:123 +#: setup_station/common.py:126 +msgid "Weak" +msgstr "" + +#: setup_station/common.py:121 setup_station/common.py:124 +#: setup_station/common.py:127 setup_station/common.py:130 +msgid "Strong" +msgstr "" + +#: setup_station/common.py:125 setup_station/common.py:128 +#: setup_station/common.py:131 +msgid "Fairly Strong" +msgstr "" + +#: setup_station/common.py:129 setup_station/common.py:132 +msgid "Very Strong" +msgstr "" + +#: setup_station/interface_controller.py:22 +#: setup_station/interface_controller.py:31 +msgid "Back" +msgstr "" + +#: setup_station/interface_controller.py:24 +#: setup_station/interface_controller.py:32 +msgid "Next" +msgstr "" + +#: setup_station/interface_controller.py:118 setup_station/language.py:104 +msgid "GhostBSD Initial Setup" +msgstr "" + +#: setup_station/interface_controller.py:119 setup_station/language.py:102 +#: setup_station/language.py:119 +msgid "Language" +msgstr "" + +#: setup_station/interface_controller.py:131 +msgid "Button" +msgstr "" + +#: setup_station/interface_controller.py:155 +msgid "Keyboard" +msgstr "" + +#: setup_station/interface_controller.py:168 +msgid "Time Zone" +msgstr "" + +#: setup_station/interface_controller.py:180 +msgid "Network" +msgstr "" + +#: setup_station/interface_controller.py:192 +msgid "Admin User" +msgstr "" + +#: setup_station/interface_controller.py:204 +msgid "Setup GhostBSD" +msgstr "" + +#: setup_station/interface_controller.py:213 +msgid "Progress Bar" +msgstr "" + +#: setup_station/keyboard.py:41 +msgid "Type here to test your keyboard" +msgstr "" + +#: setup_station/keyboard.py:96 +msgid "Keyboard Layout" +msgstr "" + +#: setup_station/keyboard.py:108 +msgid "Keyboard Models" +msgstr "" + +#: setup_station/language.py:96 setup_station/language.py:162 +msgid "Please select your language:" +msgstr "" + +#: setup_station/network_setup.py:100 setup_station/network_setup.py:155 +msgid "Network card connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:105 setup_station/network_setup.py:160 +msgid "Network card not connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:108 setup_station/network_setup.py:163 +msgid "No network card detected" +msgstr "" + +#: setup_station/network_setup.py:116 setup_station/network_setup.py:171 +msgid "WiFi card detected and connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:120 setup_station/network_setup.py:175 +msgid "WiFi card detected but not connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:123 setup_station/network_setup.py:178 +msgid "WiFi card not detected or not supported" +msgstr "" + +#: setup_station/network_setup.py:200 +msgid "Stat" +msgstr "" + +#: setup_station/network_setup.py:205 +msgid "SSID" +msgstr "" + +#: setup_station/network_setup.py:338 +msgid "WiFi Network Authentication Required" +msgstr "" + +#: setup_station/network_setup.py:350 +msgid "Wi-Fi Network Authentication failed" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Authentication required by" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Wi-Fi Network" +msgstr "" + +#: setup_station/network_setup.py:355 +msgid "Password:" +msgstr "" + +#: setup_station/network_setup.py:358 +msgid "Show password" +msgstr "" + +#: setup_station/setup_system.py:39 +msgid "Setting system language" +msgstr "" + +#: setup_station/setup_system.py:43 +msgid "Setting keyboard layout" +msgstr "" + +#: setup_station/setup_system.py:47 +msgid "Setting timezone" +msgstr "" + +#: setup_station/setup_system.py:51 +msgid "Creating admin user" +msgstr "" + +#: setup_station/setup_system.py:55 +msgid "Setup complete!" +msgstr "" + +#: setup_station/setup_system.py:64 +msgid "Getting everything ready" +msgstr "" + +#: setup_station/setup_system.py:76 +msgid "This should not take too long." +msgstr "" + +#: setup_station/setup_system.py:78 +msgid "Don't turn your system off." +msgstr "" + +#: setup_station/timezone.py:57 +msgid "Continent" +msgstr "" + +#: setup_station/timezone.py:69 +msgid "City" +msgstr "" diff --git a/po/sk_SK.po b/po/sk_SK.po new file mode 100644 index 0000000..8940cf5 --- /dev/null +++ b/po/sk_SK.po @@ -0,0 +1,252 @@ +# Slovak translations for PACKAGE package. +# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Eric Turgeon , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-11-27 13:23-0400\n" +"PO-Revision-Date: 2025-11-25 08:34-0400\n" +"Last-Translator: Eric Turgeon \n" +"Language-Team: Slovak \n" +"Language: sk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +#: setup_station/add_admin.py:132 +msgid "The initial root password will be set to the admin user password." +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:99 +msgid "Password not allowed" +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:101 +msgid "Space not allowed" +msgstr "" + +#: setup_station/add_users.py:57 +msgid "User Setup" +msgstr "" + +#: setup_station/add_users.py:68 +msgid "User Account" +msgstr "" + +#: setup_station/add_users.py:71 +msgid "User name" +msgstr "" + +#: setup_station/add_users.py:73 +msgid "Real name" +msgstr "" + +#: setup_station/add_users.py:76 +msgid "Password" +msgstr "" + +#: setup_station/add_users.py:80 +msgid "Verify Password" +msgstr "" + +#: setup_station/add_users.py:84 +msgid "Shell" +msgstr "" + +#: setup_station/add_users.py:97 +msgid "Set Hostname" +msgstr "" + +#: setup_station/add_users.py:102 +msgid "Hostname" +msgstr "" + +#: setup_station/common.py:118 +msgid "Very Weak" +msgstr "" + +#: setup_station/common.py:119 setup_station/common.py:122 +msgid "Fairly Weak" +msgstr "" + +#: setup_station/common.py:120 setup_station/common.py:123 +#: setup_station/common.py:126 +msgid "Weak" +msgstr "" + +#: setup_station/common.py:121 setup_station/common.py:124 +#: setup_station/common.py:127 setup_station/common.py:130 +msgid "Strong" +msgstr "" + +#: setup_station/common.py:125 setup_station/common.py:128 +#: setup_station/common.py:131 +msgid "Fairly Strong" +msgstr "" + +#: setup_station/common.py:129 setup_station/common.py:132 +msgid "Very Strong" +msgstr "" + +#: setup_station/interface_controller.py:22 +#: setup_station/interface_controller.py:31 +msgid "Back" +msgstr "" + +#: setup_station/interface_controller.py:24 +#: setup_station/interface_controller.py:32 +msgid "Next" +msgstr "" + +#: setup_station/interface_controller.py:118 setup_station/language.py:104 +msgid "GhostBSD Initial Setup" +msgstr "" + +#: setup_station/interface_controller.py:119 setup_station/language.py:102 +#: setup_station/language.py:119 +msgid "Language" +msgstr "" + +#: setup_station/interface_controller.py:131 +msgid "Button" +msgstr "" + +#: setup_station/interface_controller.py:155 +msgid "Keyboard" +msgstr "" + +#: setup_station/interface_controller.py:168 +msgid "Time Zone" +msgstr "" + +#: setup_station/interface_controller.py:180 +msgid "Network" +msgstr "" + +#: setup_station/interface_controller.py:192 +msgid "Admin User" +msgstr "" + +#: setup_station/interface_controller.py:204 +msgid "Setup GhostBSD" +msgstr "" + +#: setup_station/interface_controller.py:213 +msgid "Progress Bar" +msgstr "" + +#: setup_station/keyboard.py:41 +msgid "Type here to test your keyboard" +msgstr "" + +#: setup_station/keyboard.py:96 +msgid "Keyboard Layout" +msgstr "" + +#: setup_station/keyboard.py:108 +msgid "Keyboard Models" +msgstr "" + +#: setup_station/language.py:96 setup_station/language.py:162 +msgid "Please select your language:" +msgstr "" + +#: setup_station/network_setup.py:100 setup_station/network_setup.py:155 +msgid "Network card connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:105 setup_station/network_setup.py:160 +msgid "Network card not connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:108 setup_station/network_setup.py:163 +msgid "No network card detected" +msgstr "" + +#: setup_station/network_setup.py:116 setup_station/network_setup.py:171 +msgid "WiFi card detected and connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:120 setup_station/network_setup.py:175 +msgid "WiFi card detected but not connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:123 setup_station/network_setup.py:178 +msgid "WiFi card not detected or not supported" +msgstr "" + +#: setup_station/network_setup.py:200 +msgid "Stat" +msgstr "" + +#: setup_station/network_setup.py:205 +msgid "SSID" +msgstr "" + +#: setup_station/network_setup.py:338 +msgid "WiFi Network Authentication Required" +msgstr "" + +#: setup_station/network_setup.py:350 +msgid "Wi-Fi Network Authentication failed" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Authentication required by" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Wi-Fi Network" +msgstr "" + +#: setup_station/network_setup.py:355 +msgid "Password:" +msgstr "" + +#: setup_station/network_setup.py:358 +msgid "Show password" +msgstr "" + +#: setup_station/setup_system.py:39 +msgid "Setting system language" +msgstr "" + +#: setup_station/setup_system.py:43 +msgid "Setting keyboard layout" +msgstr "" + +#: setup_station/setup_system.py:47 +msgid "Setting timezone" +msgstr "" + +#: setup_station/setup_system.py:51 +msgid "Creating admin user" +msgstr "" + +#: setup_station/setup_system.py:55 +msgid "Setup complete!" +msgstr "" + +#: setup_station/setup_system.py:64 +msgid "Getting everything ready" +msgstr "" + +#: setup_station/setup_system.py:76 +msgid "This should not take too long." +msgstr "" + +#: setup_station/setup_system.py:78 +msgid "Don't turn your system off." +msgstr "" + +#: setup_station/timezone.py:57 +msgid "Continent" +msgstr "" + +#: setup_station/timezone.py:69 +msgid "City" +msgstr "" diff --git a/po/sl_SI.po b/po/sl_SI.po new file mode 100644 index 0000000..85a9fda --- /dev/null +++ b/po/sl_SI.po @@ -0,0 +1,253 @@ +# Slovenian translations for PACKAGE package. +# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Eric Turgeon , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-11-27 13:23-0400\n" +"PO-Revision-Date: 2025-11-25 08:34-0400\n" +"Last-Translator: Eric Turgeon \n" +"Language-Team: Slovenian \n" +"Language: sl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || " +"n%100==4 ? 2 : 3);\n" + +#: setup_station/add_admin.py:132 +msgid "The initial root password will be set to the admin user password." +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:99 +msgid "Password not allowed" +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:101 +msgid "Space not allowed" +msgstr "" + +#: setup_station/add_users.py:57 +msgid "User Setup" +msgstr "" + +#: setup_station/add_users.py:68 +msgid "User Account" +msgstr "" + +#: setup_station/add_users.py:71 +msgid "User name" +msgstr "" + +#: setup_station/add_users.py:73 +msgid "Real name" +msgstr "" + +#: setup_station/add_users.py:76 +msgid "Password" +msgstr "" + +#: setup_station/add_users.py:80 +msgid "Verify Password" +msgstr "" + +#: setup_station/add_users.py:84 +msgid "Shell" +msgstr "" + +#: setup_station/add_users.py:97 +msgid "Set Hostname" +msgstr "" + +#: setup_station/add_users.py:102 +msgid "Hostname" +msgstr "" + +#: setup_station/common.py:118 +msgid "Very Weak" +msgstr "" + +#: setup_station/common.py:119 setup_station/common.py:122 +msgid "Fairly Weak" +msgstr "" + +#: setup_station/common.py:120 setup_station/common.py:123 +#: setup_station/common.py:126 +msgid "Weak" +msgstr "" + +#: setup_station/common.py:121 setup_station/common.py:124 +#: setup_station/common.py:127 setup_station/common.py:130 +msgid "Strong" +msgstr "" + +#: setup_station/common.py:125 setup_station/common.py:128 +#: setup_station/common.py:131 +msgid "Fairly Strong" +msgstr "" + +#: setup_station/common.py:129 setup_station/common.py:132 +msgid "Very Strong" +msgstr "" + +#: setup_station/interface_controller.py:22 +#: setup_station/interface_controller.py:31 +msgid "Back" +msgstr "" + +#: setup_station/interface_controller.py:24 +#: setup_station/interface_controller.py:32 +msgid "Next" +msgstr "" + +#: setup_station/interface_controller.py:118 setup_station/language.py:104 +msgid "GhostBSD Initial Setup" +msgstr "" + +#: setup_station/interface_controller.py:119 setup_station/language.py:102 +#: setup_station/language.py:119 +msgid "Language" +msgstr "" + +#: setup_station/interface_controller.py:131 +msgid "Button" +msgstr "" + +#: setup_station/interface_controller.py:155 +msgid "Keyboard" +msgstr "" + +#: setup_station/interface_controller.py:168 +msgid "Time Zone" +msgstr "" + +#: setup_station/interface_controller.py:180 +msgid "Network" +msgstr "" + +#: setup_station/interface_controller.py:192 +msgid "Admin User" +msgstr "" + +#: setup_station/interface_controller.py:204 +msgid "Setup GhostBSD" +msgstr "" + +#: setup_station/interface_controller.py:213 +msgid "Progress Bar" +msgstr "" + +#: setup_station/keyboard.py:41 +msgid "Type here to test your keyboard" +msgstr "" + +#: setup_station/keyboard.py:96 +msgid "Keyboard Layout" +msgstr "" + +#: setup_station/keyboard.py:108 +msgid "Keyboard Models" +msgstr "" + +#: setup_station/language.py:96 setup_station/language.py:162 +msgid "Please select your language:" +msgstr "" + +#: setup_station/network_setup.py:100 setup_station/network_setup.py:155 +msgid "Network card connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:105 setup_station/network_setup.py:160 +msgid "Network card not connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:108 setup_station/network_setup.py:163 +msgid "No network card detected" +msgstr "" + +#: setup_station/network_setup.py:116 setup_station/network_setup.py:171 +msgid "WiFi card detected and connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:120 setup_station/network_setup.py:175 +msgid "WiFi card detected but not connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:123 setup_station/network_setup.py:178 +msgid "WiFi card not detected or not supported" +msgstr "" + +#: setup_station/network_setup.py:200 +msgid "Stat" +msgstr "" + +#: setup_station/network_setup.py:205 +msgid "SSID" +msgstr "" + +#: setup_station/network_setup.py:338 +msgid "WiFi Network Authentication Required" +msgstr "" + +#: setup_station/network_setup.py:350 +msgid "Wi-Fi Network Authentication failed" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Authentication required by" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Wi-Fi Network" +msgstr "" + +#: setup_station/network_setup.py:355 +msgid "Password:" +msgstr "" + +#: setup_station/network_setup.py:358 +msgid "Show password" +msgstr "" + +#: setup_station/setup_system.py:39 +msgid "Setting system language" +msgstr "" + +#: setup_station/setup_system.py:43 +msgid "Setting keyboard layout" +msgstr "" + +#: setup_station/setup_system.py:47 +msgid "Setting timezone" +msgstr "" + +#: setup_station/setup_system.py:51 +msgid "Creating admin user" +msgstr "" + +#: setup_station/setup_system.py:55 +msgid "Setup complete!" +msgstr "" + +#: setup_station/setup_system.py:64 +msgid "Getting everything ready" +msgstr "" + +#: setup_station/setup_system.py:76 +msgid "This should not take too long." +msgstr "" + +#: setup_station/setup_system.py:78 +msgid "Don't turn your system off." +msgstr "" + +#: setup_station/timezone.py:57 +msgid "Continent" +msgstr "" + +#: setup_station/timezone.py:69 +msgid "City" +msgstr "" diff --git a/po/sv_SE.po b/po/sv_SE.po new file mode 100644 index 0000000..e540633 --- /dev/null +++ b/po/sv_SE.po @@ -0,0 +1,252 @@ +# Swedish translations for PACKAGE package. +# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Eric Turgeon , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-11-27 13:23-0400\n" +"PO-Revision-Date: 2025-11-25 08:34-0400\n" +"Last-Translator: Eric Turgeon \n" +"Language-Team: Swedish \n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: setup_station/add_admin.py:132 +msgid "The initial root password will be set to the admin user password." +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:99 +msgid "Password not allowed" +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:101 +msgid "Space not allowed" +msgstr "" + +#: setup_station/add_users.py:57 +msgid "User Setup" +msgstr "" + +#: setup_station/add_users.py:68 +msgid "User Account" +msgstr "" + +#: setup_station/add_users.py:71 +msgid "User name" +msgstr "" + +#: setup_station/add_users.py:73 +msgid "Real name" +msgstr "" + +#: setup_station/add_users.py:76 +msgid "Password" +msgstr "" + +#: setup_station/add_users.py:80 +msgid "Verify Password" +msgstr "" + +#: setup_station/add_users.py:84 +msgid "Shell" +msgstr "" + +#: setup_station/add_users.py:97 +msgid "Set Hostname" +msgstr "" + +#: setup_station/add_users.py:102 +msgid "Hostname" +msgstr "" + +#: setup_station/common.py:118 +msgid "Very Weak" +msgstr "" + +#: setup_station/common.py:119 setup_station/common.py:122 +msgid "Fairly Weak" +msgstr "" + +#: setup_station/common.py:120 setup_station/common.py:123 +#: setup_station/common.py:126 +msgid "Weak" +msgstr "" + +#: setup_station/common.py:121 setup_station/common.py:124 +#: setup_station/common.py:127 setup_station/common.py:130 +msgid "Strong" +msgstr "" + +#: setup_station/common.py:125 setup_station/common.py:128 +#: setup_station/common.py:131 +msgid "Fairly Strong" +msgstr "" + +#: setup_station/common.py:129 setup_station/common.py:132 +msgid "Very Strong" +msgstr "" + +#: setup_station/interface_controller.py:22 +#: setup_station/interface_controller.py:31 +msgid "Back" +msgstr "" + +#: setup_station/interface_controller.py:24 +#: setup_station/interface_controller.py:32 +msgid "Next" +msgstr "" + +#: setup_station/interface_controller.py:118 setup_station/language.py:104 +msgid "GhostBSD Initial Setup" +msgstr "" + +#: setup_station/interface_controller.py:119 setup_station/language.py:102 +#: setup_station/language.py:119 +msgid "Language" +msgstr "" + +#: setup_station/interface_controller.py:131 +msgid "Button" +msgstr "" + +#: setup_station/interface_controller.py:155 +msgid "Keyboard" +msgstr "" + +#: setup_station/interface_controller.py:168 +msgid "Time Zone" +msgstr "" + +#: setup_station/interface_controller.py:180 +msgid "Network" +msgstr "" + +#: setup_station/interface_controller.py:192 +msgid "Admin User" +msgstr "" + +#: setup_station/interface_controller.py:204 +msgid "Setup GhostBSD" +msgstr "" + +#: setup_station/interface_controller.py:213 +msgid "Progress Bar" +msgstr "" + +#: setup_station/keyboard.py:41 +msgid "Type here to test your keyboard" +msgstr "" + +#: setup_station/keyboard.py:96 +msgid "Keyboard Layout" +msgstr "" + +#: setup_station/keyboard.py:108 +msgid "Keyboard Models" +msgstr "" + +#: setup_station/language.py:96 setup_station/language.py:162 +msgid "Please select your language:" +msgstr "" + +#: setup_station/network_setup.py:100 setup_station/network_setup.py:155 +msgid "Network card connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:105 setup_station/network_setup.py:160 +msgid "Network card not connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:108 setup_station/network_setup.py:163 +msgid "No network card detected" +msgstr "" + +#: setup_station/network_setup.py:116 setup_station/network_setup.py:171 +msgid "WiFi card detected and connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:120 setup_station/network_setup.py:175 +msgid "WiFi card detected but not connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:123 setup_station/network_setup.py:178 +msgid "WiFi card not detected or not supported" +msgstr "" + +#: setup_station/network_setup.py:200 +msgid "Stat" +msgstr "" + +#: setup_station/network_setup.py:205 +msgid "SSID" +msgstr "" + +#: setup_station/network_setup.py:338 +msgid "WiFi Network Authentication Required" +msgstr "" + +#: setup_station/network_setup.py:350 +msgid "Wi-Fi Network Authentication failed" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Authentication required by" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Wi-Fi Network" +msgstr "" + +#: setup_station/network_setup.py:355 +msgid "Password:" +msgstr "" + +#: setup_station/network_setup.py:358 +msgid "Show password" +msgstr "" + +#: setup_station/setup_system.py:39 +msgid "Setting system language" +msgstr "" + +#: setup_station/setup_system.py:43 +msgid "Setting keyboard layout" +msgstr "" + +#: setup_station/setup_system.py:47 +msgid "Setting timezone" +msgstr "" + +#: setup_station/setup_system.py:51 +msgid "Creating admin user" +msgstr "" + +#: setup_station/setup_system.py:55 +msgid "Setup complete!" +msgstr "" + +#: setup_station/setup_system.py:64 +msgid "Getting everything ready" +msgstr "" + +#: setup_station/setup_system.py:76 +msgid "This should not take too long." +msgstr "" + +#: setup_station/setup_system.py:78 +msgid "Don't turn your system off." +msgstr "" + +#: setup_station/timezone.py:57 +msgid "Continent" +msgstr "" + +#: setup_station/timezone.py:69 +msgid "City" +msgstr "" diff --git a/po/th_TH.po b/po/th_TH.po new file mode 100644 index 0000000..9f9839e --- /dev/null +++ b/po/th_TH.po @@ -0,0 +1,251 @@ +# Thai translations for PACKAGE package. +# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Eric Turgeon , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-11-27 13:23-0400\n" +"PO-Revision-Date: 2025-11-25 08:34-0400\n" +"Last-Translator: Eric Turgeon \n" +"Language-Team: Thai <(nothing)>\n" +"Language: th\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: setup_station/add_admin.py:132 +msgid "The initial root password will be set to the admin user password." +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:99 +msgid "Password not allowed" +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:101 +msgid "Space not allowed" +msgstr "" + +#: setup_station/add_users.py:57 +msgid "User Setup" +msgstr "" + +#: setup_station/add_users.py:68 +msgid "User Account" +msgstr "" + +#: setup_station/add_users.py:71 +msgid "User name" +msgstr "" + +#: setup_station/add_users.py:73 +msgid "Real name" +msgstr "" + +#: setup_station/add_users.py:76 +msgid "Password" +msgstr "" + +#: setup_station/add_users.py:80 +msgid "Verify Password" +msgstr "" + +#: setup_station/add_users.py:84 +msgid "Shell" +msgstr "" + +#: setup_station/add_users.py:97 +msgid "Set Hostname" +msgstr "" + +#: setup_station/add_users.py:102 +msgid "Hostname" +msgstr "" + +#: setup_station/common.py:118 +msgid "Very Weak" +msgstr "" + +#: setup_station/common.py:119 setup_station/common.py:122 +msgid "Fairly Weak" +msgstr "" + +#: setup_station/common.py:120 setup_station/common.py:123 +#: setup_station/common.py:126 +msgid "Weak" +msgstr "" + +#: setup_station/common.py:121 setup_station/common.py:124 +#: setup_station/common.py:127 setup_station/common.py:130 +msgid "Strong" +msgstr "" + +#: setup_station/common.py:125 setup_station/common.py:128 +#: setup_station/common.py:131 +msgid "Fairly Strong" +msgstr "" + +#: setup_station/common.py:129 setup_station/common.py:132 +msgid "Very Strong" +msgstr "" + +#: setup_station/interface_controller.py:22 +#: setup_station/interface_controller.py:31 +msgid "Back" +msgstr "" + +#: setup_station/interface_controller.py:24 +#: setup_station/interface_controller.py:32 +msgid "Next" +msgstr "" + +#: setup_station/interface_controller.py:118 setup_station/language.py:104 +msgid "GhostBSD Initial Setup" +msgstr "" + +#: setup_station/interface_controller.py:119 setup_station/language.py:102 +#: setup_station/language.py:119 +msgid "Language" +msgstr "" + +#: setup_station/interface_controller.py:131 +msgid "Button" +msgstr "" + +#: setup_station/interface_controller.py:155 +msgid "Keyboard" +msgstr "" + +#: setup_station/interface_controller.py:168 +msgid "Time Zone" +msgstr "" + +#: setup_station/interface_controller.py:180 +msgid "Network" +msgstr "" + +#: setup_station/interface_controller.py:192 +msgid "Admin User" +msgstr "" + +#: setup_station/interface_controller.py:204 +msgid "Setup GhostBSD" +msgstr "" + +#: setup_station/interface_controller.py:213 +msgid "Progress Bar" +msgstr "" + +#: setup_station/keyboard.py:41 +msgid "Type here to test your keyboard" +msgstr "" + +#: setup_station/keyboard.py:96 +msgid "Keyboard Layout" +msgstr "" + +#: setup_station/keyboard.py:108 +msgid "Keyboard Models" +msgstr "" + +#: setup_station/language.py:96 setup_station/language.py:162 +msgid "Please select your language:" +msgstr "" + +#: setup_station/network_setup.py:100 setup_station/network_setup.py:155 +msgid "Network card connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:105 setup_station/network_setup.py:160 +msgid "Network card not connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:108 setup_station/network_setup.py:163 +msgid "No network card detected" +msgstr "" + +#: setup_station/network_setup.py:116 setup_station/network_setup.py:171 +msgid "WiFi card detected and connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:120 setup_station/network_setup.py:175 +msgid "WiFi card detected but not connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:123 setup_station/network_setup.py:178 +msgid "WiFi card not detected or not supported" +msgstr "" + +#: setup_station/network_setup.py:200 +msgid "Stat" +msgstr "" + +#: setup_station/network_setup.py:205 +msgid "SSID" +msgstr "" + +#: setup_station/network_setup.py:338 +msgid "WiFi Network Authentication Required" +msgstr "" + +#: setup_station/network_setup.py:350 +msgid "Wi-Fi Network Authentication failed" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Authentication required by" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Wi-Fi Network" +msgstr "" + +#: setup_station/network_setup.py:355 +msgid "Password:" +msgstr "" + +#: setup_station/network_setup.py:358 +msgid "Show password" +msgstr "" + +#: setup_station/setup_system.py:39 +msgid "Setting system language" +msgstr "" + +#: setup_station/setup_system.py:43 +msgid "Setting keyboard layout" +msgstr "" + +#: setup_station/setup_system.py:47 +msgid "Setting timezone" +msgstr "" + +#: setup_station/setup_system.py:51 +msgid "Creating admin user" +msgstr "" + +#: setup_station/setup_system.py:55 +msgid "Setup complete!" +msgstr "" + +#: setup_station/setup_system.py:64 +msgid "Getting everything ready" +msgstr "" + +#: setup_station/setup_system.py:76 +msgid "This should not take too long." +msgstr "" + +#: setup_station/setup_system.py:78 +msgid "Don't turn your system off." +msgstr "" + +#: setup_station/timezone.py:57 +msgid "Continent" +msgstr "" + +#: setup_station/timezone.py:69 +msgid "City" +msgstr "" diff --git a/po/tr_TR.po b/po/tr_TR.po new file mode 100644 index 0000000..3b2b88c --- /dev/null +++ b/po/tr_TR.po @@ -0,0 +1,252 @@ +# Turkish translations for PACKAGE package. +# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Eric Turgeon , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-11-27 13:23-0400\n" +"PO-Revision-Date: 2025-11-25 08:34-0400\n" +"Last-Translator: Eric Turgeon \n" +"Language-Team: Turkish \n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: setup_station/add_admin.py:132 +msgid "The initial root password will be set to the admin user password." +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:99 +msgid "Password not allowed" +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:101 +msgid "Space not allowed" +msgstr "" + +#: setup_station/add_users.py:57 +msgid "User Setup" +msgstr "" + +#: setup_station/add_users.py:68 +msgid "User Account" +msgstr "" + +#: setup_station/add_users.py:71 +msgid "User name" +msgstr "" + +#: setup_station/add_users.py:73 +msgid "Real name" +msgstr "" + +#: setup_station/add_users.py:76 +msgid "Password" +msgstr "" + +#: setup_station/add_users.py:80 +msgid "Verify Password" +msgstr "" + +#: setup_station/add_users.py:84 +msgid "Shell" +msgstr "" + +#: setup_station/add_users.py:97 +msgid "Set Hostname" +msgstr "" + +#: setup_station/add_users.py:102 +msgid "Hostname" +msgstr "" + +#: setup_station/common.py:118 +msgid "Very Weak" +msgstr "" + +#: setup_station/common.py:119 setup_station/common.py:122 +msgid "Fairly Weak" +msgstr "" + +#: setup_station/common.py:120 setup_station/common.py:123 +#: setup_station/common.py:126 +msgid "Weak" +msgstr "" + +#: setup_station/common.py:121 setup_station/common.py:124 +#: setup_station/common.py:127 setup_station/common.py:130 +msgid "Strong" +msgstr "" + +#: setup_station/common.py:125 setup_station/common.py:128 +#: setup_station/common.py:131 +msgid "Fairly Strong" +msgstr "" + +#: setup_station/common.py:129 setup_station/common.py:132 +msgid "Very Strong" +msgstr "" + +#: setup_station/interface_controller.py:22 +#: setup_station/interface_controller.py:31 +msgid "Back" +msgstr "" + +#: setup_station/interface_controller.py:24 +#: setup_station/interface_controller.py:32 +msgid "Next" +msgstr "" + +#: setup_station/interface_controller.py:118 setup_station/language.py:104 +msgid "GhostBSD Initial Setup" +msgstr "" + +#: setup_station/interface_controller.py:119 setup_station/language.py:102 +#: setup_station/language.py:119 +msgid "Language" +msgstr "" + +#: setup_station/interface_controller.py:131 +msgid "Button" +msgstr "" + +#: setup_station/interface_controller.py:155 +msgid "Keyboard" +msgstr "" + +#: setup_station/interface_controller.py:168 +msgid "Time Zone" +msgstr "" + +#: setup_station/interface_controller.py:180 +msgid "Network" +msgstr "" + +#: setup_station/interface_controller.py:192 +msgid "Admin User" +msgstr "" + +#: setup_station/interface_controller.py:204 +msgid "Setup GhostBSD" +msgstr "" + +#: setup_station/interface_controller.py:213 +msgid "Progress Bar" +msgstr "" + +#: setup_station/keyboard.py:41 +msgid "Type here to test your keyboard" +msgstr "" + +#: setup_station/keyboard.py:96 +msgid "Keyboard Layout" +msgstr "" + +#: setup_station/keyboard.py:108 +msgid "Keyboard Models" +msgstr "" + +#: setup_station/language.py:96 setup_station/language.py:162 +msgid "Please select your language:" +msgstr "" + +#: setup_station/network_setup.py:100 setup_station/network_setup.py:155 +msgid "Network card connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:105 setup_station/network_setup.py:160 +msgid "Network card not connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:108 setup_station/network_setup.py:163 +msgid "No network card detected" +msgstr "" + +#: setup_station/network_setup.py:116 setup_station/network_setup.py:171 +msgid "WiFi card detected and connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:120 setup_station/network_setup.py:175 +msgid "WiFi card detected but not connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:123 setup_station/network_setup.py:178 +msgid "WiFi card not detected or not supported" +msgstr "" + +#: setup_station/network_setup.py:200 +msgid "Stat" +msgstr "" + +#: setup_station/network_setup.py:205 +msgid "SSID" +msgstr "" + +#: setup_station/network_setup.py:338 +msgid "WiFi Network Authentication Required" +msgstr "" + +#: setup_station/network_setup.py:350 +msgid "Wi-Fi Network Authentication failed" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Authentication required by" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Wi-Fi Network" +msgstr "" + +#: setup_station/network_setup.py:355 +msgid "Password:" +msgstr "" + +#: setup_station/network_setup.py:358 +msgid "Show password" +msgstr "" + +#: setup_station/setup_system.py:39 +msgid "Setting system language" +msgstr "" + +#: setup_station/setup_system.py:43 +msgid "Setting keyboard layout" +msgstr "" + +#: setup_station/setup_system.py:47 +msgid "Setting timezone" +msgstr "" + +#: setup_station/setup_system.py:51 +msgid "Creating admin user" +msgstr "" + +#: setup_station/setup_system.py:55 +msgid "Setup complete!" +msgstr "" + +#: setup_station/setup_system.py:64 +msgid "Getting everything ready" +msgstr "" + +#: setup_station/setup_system.py:76 +msgid "This should not take too long." +msgstr "" + +#: setup_station/setup_system.py:78 +msgid "Don't turn your system off." +msgstr "" + +#: setup_station/timezone.py:57 +msgid "Continent" +msgstr "" + +#: setup_station/timezone.py:69 +msgid "City" +msgstr "" diff --git a/po/vi_VN.po b/po/vi_VN.po new file mode 100644 index 0000000..dc2f4ff --- /dev/null +++ b/po/vi_VN.po @@ -0,0 +1,252 @@ +# Vietnamese translations for PACKAGE package. +# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Eric Turgeon , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-11-27 13:23-0400\n" +"PO-Revision-Date: 2025-11-25 08:34-0400\n" +"Last-Translator: Eric Turgeon \n" +"Language-Team: Vietnamese \n" +"Language: vi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: setup_station/add_admin.py:132 +msgid "The initial root password will be set to the admin user password." +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:99 +msgid "Password not allowed" +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:101 +msgid "Space not allowed" +msgstr "" + +#: setup_station/add_users.py:57 +msgid "User Setup" +msgstr "" + +#: setup_station/add_users.py:68 +msgid "User Account" +msgstr "" + +#: setup_station/add_users.py:71 +msgid "User name" +msgstr "" + +#: setup_station/add_users.py:73 +msgid "Real name" +msgstr "" + +#: setup_station/add_users.py:76 +msgid "Password" +msgstr "" + +#: setup_station/add_users.py:80 +msgid "Verify Password" +msgstr "" + +#: setup_station/add_users.py:84 +msgid "Shell" +msgstr "" + +#: setup_station/add_users.py:97 +msgid "Set Hostname" +msgstr "" + +#: setup_station/add_users.py:102 +msgid "Hostname" +msgstr "" + +#: setup_station/common.py:118 +msgid "Very Weak" +msgstr "" + +#: setup_station/common.py:119 setup_station/common.py:122 +msgid "Fairly Weak" +msgstr "" + +#: setup_station/common.py:120 setup_station/common.py:123 +#: setup_station/common.py:126 +msgid "Weak" +msgstr "" + +#: setup_station/common.py:121 setup_station/common.py:124 +#: setup_station/common.py:127 setup_station/common.py:130 +msgid "Strong" +msgstr "" + +#: setup_station/common.py:125 setup_station/common.py:128 +#: setup_station/common.py:131 +msgid "Fairly Strong" +msgstr "" + +#: setup_station/common.py:129 setup_station/common.py:132 +msgid "Very Strong" +msgstr "" + +#: setup_station/interface_controller.py:22 +#: setup_station/interface_controller.py:31 +msgid "Back" +msgstr "" + +#: setup_station/interface_controller.py:24 +#: setup_station/interface_controller.py:32 +msgid "Next" +msgstr "" + +#: setup_station/interface_controller.py:118 setup_station/language.py:104 +msgid "GhostBSD Initial Setup" +msgstr "" + +#: setup_station/interface_controller.py:119 setup_station/language.py:102 +#: setup_station/language.py:119 +msgid "Language" +msgstr "" + +#: setup_station/interface_controller.py:131 +msgid "Button" +msgstr "" + +#: setup_station/interface_controller.py:155 +msgid "Keyboard" +msgstr "" + +#: setup_station/interface_controller.py:168 +msgid "Time Zone" +msgstr "" + +#: setup_station/interface_controller.py:180 +msgid "Network" +msgstr "" + +#: setup_station/interface_controller.py:192 +msgid "Admin User" +msgstr "" + +#: setup_station/interface_controller.py:204 +msgid "Setup GhostBSD" +msgstr "" + +#: setup_station/interface_controller.py:213 +msgid "Progress Bar" +msgstr "" + +#: setup_station/keyboard.py:41 +msgid "Type here to test your keyboard" +msgstr "" + +#: setup_station/keyboard.py:96 +msgid "Keyboard Layout" +msgstr "" + +#: setup_station/keyboard.py:108 +msgid "Keyboard Models" +msgstr "" + +#: setup_station/language.py:96 setup_station/language.py:162 +msgid "Please select your language:" +msgstr "" + +#: setup_station/network_setup.py:100 setup_station/network_setup.py:155 +msgid "Network card connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:105 setup_station/network_setup.py:160 +msgid "Network card not connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:108 setup_station/network_setup.py:163 +msgid "No network card detected" +msgstr "" + +#: setup_station/network_setup.py:116 setup_station/network_setup.py:171 +msgid "WiFi card detected and connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:120 setup_station/network_setup.py:175 +msgid "WiFi card detected but not connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:123 setup_station/network_setup.py:178 +msgid "WiFi card not detected or not supported" +msgstr "" + +#: setup_station/network_setup.py:200 +msgid "Stat" +msgstr "" + +#: setup_station/network_setup.py:205 +msgid "SSID" +msgstr "" + +#: setup_station/network_setup.py:338 +msgid "WiFi Network Authentication Required" +msgstr "" + +#: setup_station/network_setup.py:350 +msgid "Wi-Fi Network Authentication failed" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Authentication required by" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Wi-Fi Network" +msgstr "" + +#: setup_station/network_setup.py:355 +msgid "Password:" +msgstr "" + +#: setup_station/network_setup.py:358 +msgid "Show password" +msgstr "" + +#: setup_station/setup_system.py:39 +msgid "Setting system language" +msgstr "" + +#: setup_station/setup_system.py:43 +msgid "Setting keyboard layout" +msgstr "" + +#: setup_station/setup_system.py:47 +msgid "Setting timezone" +msgstr "" + +#: setup_station/setup_system.py:51 +msgid "Creating admin user" +msgstr "" + +#: setup_station/setup_system.py:55 +msgid "Setup complete!" +msgstr "" + +#: setup_station/setup_system.py:64 +msgid "Getting everything ready" +msgstr "" + +#: setup_station/setup_system.py:76 +msgid "This should not take too long." +msgstr "" + +#: setup_station/setup_system.py:78 +msgid "Don't turn your system off." +msgstr "" + +#: setup_station/timezone.py:57 +msgid "Continent" +msgstr "" + +#: setup_station/timezone.py:69 +msgid "City" +msgstr "" diff --git a/po/zh_CN.po b/po/zh_CN.po new file mode 100644 index 0000000..6a82e38 --- /dev/null +++ b/po/zh_CN.po @@ -0,0 +1,251 @@ +# Chinese translations for PACKAGE package. +# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Eric Turgeon , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-11-27 13:23-0400\n" +"PO-Revision-Date: 2025-11-25 08:34-0400\n" +"Last-Translator: Eric Turgeon \n" +"Language-Team: Chinese (simplified) \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: setup_station/add_admin.py:132 +msgid "The initial root password will be set to the admin user password." +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:99 +msgid "Password not allowed" +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:101 +msgid "Space not allowed" +msgstr "" + +#: setup_station/add_users.py:57 +msgid "User Setup" +msgstr "" + +#: setup_station/add_users.py:68 +msgid "User Account" +msgstr "" + +#: setup_station/add_users.py:71 +msgid "User name" +msgstr "" + +#: setup_station/add_users.py:73 +msgid "Real name" +msgstr "" + +#: setup_station/add_users.py:76 +msgid "Password" +msgstr "" + +#: setup_station/add_users.py:80 +msgid "Verify Password" +msgstr "" + +#: setup_station/add_users.py:84 +msgid "Shell" +msgstr "" + +#: setup_station/add_users.py:97 +msgid "Set Hostname" +msgstr "" + +#: setup_station/add_users.py:102 +msgid "Hostname" +msgstr "" + +#: setup_station/common.py:118 +msgid "Very Weak" +msgstr "" + +#: setup_station/common.py:119 setup_station/common.py:122 +msgid "Fairly Weak" +msgstr "" + +#: setup_station/common.py:120 setup_station/common.py:123 +#: setup_station/common.py:126 +msgid "Weak" +msgstr "" + +#: setup_station/common.py:121 setup_station/common.py:124 +#: setup_station/common.py:127 setup_station/common.py:130 +msgid "Strong" +msgstr "" + +#: setup_station/common.py:125 setup_station/common.py:128 +#: setup_station/common.py:131 +msgid "Fairly Strong" +msgstr "" + +#: setup_station/common.py:129 setup_station/common.py:132 +msgid "Very Strong" +msgstr "" + +#: setup_station/interface_controller.py:22 +#: setup_station/interface_controller.py:31 +msgid "Back" +msgstr "" + +#: setup_station/interface_controller.py:24 +#: setup_station/interface_controller.py:32 +msgid "Next" +msgstr "" + +#: setup_station/interface_controller.py:118 setup_station/language.py:104 +msgid "GhostBSD Initial Setup" +msgstr "" + +#: setup_station/interface_controller.py:119 setup_station/language.py:102 +#: setup_station/language.py:119 +msgid "Language" +msgstr "" + +#: setup_station/interface_controller.py:131 +msgid "Button" +msgstr "" + +#: setup_station/interface_controller.py:155 +msgid "Keyboard" +msgstr "" + +#: setup_station/interface_controller.py:168 +msgid "Time Zone" +msgstr "" + +#: setup_station/interface_controller.py:180 +msgid "Network" +msgstr "" + +#: setup_station/interface_controller.py:192 +msgid "Admin User" +msgstr "" + +#: setup_station/interface_controller.py:204 +msgid "Setup GhostBSD" +msgstr "" + +#: setup_station/interface_controller.py:213 +msgid "Progress Bar" +msgstr "" + +#: setup_station/keyboard.py:41 +msgid "Type here to test your keyboard" +msgstr "" + +#: setup_station/keyboard.py:96 +msgid "Keyboard Layout" +msgstr "" + +#: setup_station/keyboard.py:108 +msgid "Keyboard Models" +msgstr "" + +#: setup_station/language.py:96 setup_station/language.py:162 +msgid "Please select your language:" +msgstr "" + +#: setup_station/network_setup.py:100 setup_station/network_setup.py:155 +msgid "Network card connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:105 setup_station/network_setup.py:160 +msgid "Network card not connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:108 setup_station/network_setup.py:163 +msgid "No network card detected" +msgstr "" + +#: setup_station/network_setup.py:116 setup_station/network_setup.py:171 +msgid "WiFi card detected and connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:120 setup_station/network_setup.py:175 +msgid "WiFi card detected but not connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:123 setup_station/network_setup.py:178 +msgid "WiFi card not detected or not supported" +msgstr "" + +#: setup_station/network_setup.py:200 +msgid "Stat" +msgstr "" + +#: setup_station/network_setup.py:205 +msgid "SSID" +msgstr "" + +#: setup_station/network_setup.py:338 +msgid "WiFi Network Authentication Required" +msgstr "" + +#: setup_station/network_setup.py:350 +msgid "Wi-Fi Network Authentication failed" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Authentication required by" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Wi-Fi Network" +msgstr "" + +#: setup_station/network_setup.py:355 +msgid "Password:" +msgstr "" + +#: setup_station/network_setup.py:358 +msgid "Show password" +msgstr "" + +#: setup_station/setup_system.py:39 +msgid "Setting system language" +msgstr "" + +#: setup_station/setup_system.py:43 +msgid "Setting keyboard layout" +msgstr "" + +#: setup_station/setup_system.py:47 +msgid "Setting timezone" +msgstr "" + +#: setup_station/setup_system.py:51 +msgid "Creating admin user" +msgstr "" + +#: setup_station/setup_system.py:55 +msgid "Setup complete!" +msgstr "" + +#: setup_station/setup_system.py:64 +msgid "Getting everything ready" +msgstr "" + +#: setup_station/setup_system.py:76 +msgid "This should not take too long." +msgstr "" + +#: setup_station/setup_system.py:78 +msgid "Don't turn your system off." +msgstr "" + +#: setup_station/timezone.py:57 +msgid "Continent" +msgstr "" + +#: setup_station/timezone.py:69 +msgid "City" +msgstr "" diff --git a/po/zh_TW.po b/po/zh_TW.po new file mode 100644 index 0000000..e21b747 --- /dev/null +++ b/po/zh_TW.po @@ -0,0 +1,251 @@ +# Chinese translations for PACKAGE package. +# Copyright (C) 2025 THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Eric Turgeon , 2025. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-11-27 13:23-0400\n" +"PO-Revision-Date: 2025-11-25 08:34-0400\n" +"Last-Translator: Eric Turgeon \n" +"Language-Team: Chinese (traditional) \n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: setup_station/add_admin.py:132 +msgid "The initial root password will be set to the admin user password." +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:99 +msgid "Password not allowed" +msgstr "" + +#: setup_station/add_admin.py:214 setup_station/common.py:101 +msgid "Space not allowed" +msgstr "" + +#: setup_station/add_users.py:57 +msgid "User Setup" +msgstr "" + +#: setup_station/add_users.py:68 +msgid "User Account" +msgstr "" + +#: setup_station/add_users.py:71 +msgid "User name" +msgstr "" + +#: setup_station/add_users.py:73 +msgid "Real name" +msgstr "" + +#: setup_station/add_users.py:76 +msgid "Password" +msgstr "" + +#: setup_station/add_users.py:80 +msgid "Verify Password" +msgstr "" + +#: setup_station/add_users.py:84 +msgid "Shell" +msgstr "" + +#: setup_station/add_users.py:97 +msgid "Set Hostname" +msgstr "" + +#: setup_station/add_users.py:102 +msgid "Hostname" +msgstr "" + +#: setup_station/common.py:118 +msgid "Very Weak" +msgstr "" + +#: setup_station/common.py:119 setup_station/common.py:122 +msgid "Fairly Weak" +msgstr "" + +#: setup_station/common.py:120 setup_station/common.py:123 +#: setup_station/common.py:126 +msgid "Weak" +msgstr "" + +#: setup_station/common.py:121 setup_station/common.py:124 +#: setup_station/common.py:127 setup_station/common.py:130 +msgid "Strong" +msgstr "" + +#: setup_station/common.py:125 setup_station/common.py:128 +#: setup_station/common.py:131 +msgid "Fairly Strong" +msgstr "" + +#: setup_station/common.py:129 setup_station/common.py:132 +msgid "Very Strong" +msgstr "" + +#: setup_station/interface_controller.py:22 +#: setup_station/interface_controller.py:31 +msgid "Back" +msgstr "" + +#: setup_station/interface_controller.py:24 +#: setup_station/interface_controller.py:32 +msgid "Next" +msgstr "" + +#: setup_station/interface_controller.py:118 setup_station/language.py:104 +msgid "GhostBSD Initial Setup" +msgstr "" + +#: setup_station/interface_controller.py:119 setup_station/language.py:102 +#: setup_station/language.py:119 +msgid "Language" +msgstr "" + +#: setup_station/interface_controller.py:131 +msgid "Button" +msgstr "" + +#: setup_station/interface_controller.py:155 +msgid "Keyboard" +msgstr "" + +#: setup_station/interface_controller.py:168 +msgid "Time Zone" +msgstr "" + +#: setup_station/interface_controller.py:180 +msgid "Network" +msgstr "" + +#: setup_station/interface_controller.py:192 +msgid "Admin User" +msgstr "" + +#: setup_station/interface_controller.py:204 +msgid "Setup GhostBSD" +msgstr "" + +#: setup_station/interface_controller.py:213 +msgid "Progress Bar" +msgstr "" + +#: setup_station/keyboard.py:41 +msgid "Type here to test your keyboard" +msgstr "" + +#: setup_station/keyboard.py:96 +msgid "Keyboard Layout" +msgstr "" + +#: setup_station/keyboard.py:108 +msgid "Keyboard Models" +msgstr "" + +#: setup_station/language.py:96 setup_station/language.py:162 +msgid "Please select your language:" +msgstr "" + +#: setup_station/network_setup.py:100 setup_station/network_setup.py:155 +msgid "Network card connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:105 setup_station/network_setup.py:160 +msgid "Network card not connected to the internet" +msgstr "" + +#: setup_station/network_setup.py:108 setup_station/network_setup.py:163 +msgid "No network card detected" +msgstr "" + +#: setup_station/network_setup.py:116 setup_station/network_setup.py:171 +msgid "WiFi card detected and connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:120 setup_station/network_setup.py:175 +msgid "WiFi card detected but not connected to an access point" +msgstr "" + +#: setup_station/network_setup.py:123 setup_station/network_setup.py:178 +msgid "WiFi card not detected or not supported" +msgstr "" + +#: setup_station/network_setup.py:200 +msgid "Stat" +msgstr "" + +#: setup_station/network_setup.py:205 +msgid "SSID" +msgstr "" + +#: setup_station/network_setup.py:338 +msgid "WiFi Network Authentication Required" +msgstr "" + +#: setup_station/network_setup.py:350 +msgid "Wi-Fi Network Authentication failed" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Authentication required by" +msgstr "" + +#: setup_station/network_setup.py:352 +msgid "Wi-Fi Network" +msgstr "" + +#: setup_station/network_setup.py:355 +msgid "Password:" +msgstr "" + +#: setup_station/network_setup.py:358 +msgid "Show password" +msgstr "" + +#: setup_station/setup_system.py:39 +msgid "Setting system language" +msgstr "" + +#: setup_station/setup_system.py:43 +msgid "Setting keyboard layout" +msgstr "" + +#: setup_station/setup_system.py:47 +msgid "Setting timezone" +msgstr "" + +#: setup_station/setup_system.py:51 +msgid "Creating admin user" +msgstr "" + +#: setup_station/setup_system.py:55 +msgid "Setup complete!" +msgstr "" + +#: setup_station/setup_system.py:64 +msgid "Getting everything ready" +msgstr "" + +#: setup_station/setup_system.py:76 +msgid "This should not take too long." +msgstr "" + +#: setup_station/setup_system.py:78 +msgid "Don't turn your system off." +msgstr "" + +#: setup_station/timezone.py:57 +msgid "Continent" +msgstr "" + +#: setup_station/timezone.py:69 +msgid "City" +msgstr "" diff --git a/setup-station b/setup-station deleted file mode 100755 index a9b874f..0000000 --- a/setup-station +++ /dev/null @@ -1,185 +0,0 @@ -#!/usr/local/bin/python - -import sys -import os -import shutil -import gi -gi.require_version('Gtk', '3.0') -from gi.repository import Gtk -installer = "/usr/local/lib/gbi/" -sys.path.append(installer) -from language import Language -from keyboard import Keyboard -from timezone import TimeZone -from network_setup import network_setup -from add_admin import AddUser -from setup_system import setup_window, installProgress -# from add_users import AddUsers - - -logo = "/usr/local/lib/gbi/image/logo.png" - - -class MainWindow(): - """Main window class.""" - - def delete(self, widget, event=None): - """Close the main window.""" - if os.path.exists('/tmp/.gbi'): - shutil.rmtree('/tmp/.gbi') - Gtk.main_quit() - return False - - def next_page(self, widget): - self.initial_setup_page() - - def initial_setup_page(self): - page = self.notebook.get_current_page() - if page == 0: - #self.welcome.save_language() - kbbox = Gtk.VBox(homogeneous=False, spacing=0) - kbbox.show() - self.kb = Keyboard(self.next_button) - get_kb = self.kb.get_model() - kbbox.pack_start(get_kb, True, True, 0) - label = Gtk.Label(label="Keyboard") - self.notebook.insert_page(kbbox, label, 1) - self.window.show_all() - self.notebook.next_page() - self.skip_button.hide() - self.next_button.set_sensitive(True) - elif page == 1: - #self.kb.save_keyboard() - tbbox = Gtk.VBox(homogeneous=False, spacing=0) - tbbox.show() - self.tz = TimeZone(self.next_button) - get_tz = self.tz.get_model() - tbbox.pack_start(get_tz, True, True, 0) - label = Gtk.Label(label="TimeZone") - self.notebook.insert_page(tbbox, label, 2) - self.window.show_all() - self.notebook.next_page() - self.next_button.set_sensitive(True) - elif page == 2: - #self.tz.save_timezone() - tbbox = Gtk.VBox(homogeneous=False, spacing=0) - tbbox.show() - self.netsetup = network_setup(self.next_button) - get_netsetup = self.netsetup.get_model() - tbbox.pack_start(get_netsetup, True, True, 0) - label = Gtk.Label(label="Network") - self.notebook.insert_page(tbbox, label, 3) - self.window.show_all() - self.notebook.next_page() - self.skip_button.hide() - self.next_button.set_sensitive(True) - elif page == 3: - Rbox = Gtk.VBox(homogeneous=False, spacing=0) - Rbox.show() - self.adminuser = AddUser(self.next_button) - get_adminuser = self.adminuser.get_model() - Rbox.pack_start(get_adminuser, True, True, 0) - label = Gtk.Label(label="Root Password") - self.notebook.insert_page(Rbox, label, 4) - self.window.show_all() - self.notebook.next_page() - self.skip_button.hide() - self.next_button.set_sensitive(False) - # elif page == 4: - # #self.adminuser.save_adminuser() - # Abox = Gtk.VBox(homogeneous=False, spacing=0) - # Abox.show() - # self.adduser = AddUsers(self.next_button) - # get_adduser = self.adduser.get_model() - # Abox.pack_start(get_adduser, True, True, 0) - # label = Gtk.Label(label="Adding User") - # self.notebook.insert_page(Abox, label, 5) - # self.next_button.set_label("Install") - # self.window.show_all() - # self.notebook.next_page() - # self.next_button.set_sensitive(False) - if page == 4: - # self.adminuser.save_adminuser() - # automatic hostname setup - # - Ibox = Gtk.VBox(False, 0) - Ibox.show() - install = setup_window() - get_install = install.get_model() - Ibox.pack_start(get_install, True, True, 0) - label = Gtk.Label("Installation") - self.notebook.insert_page(Ibox, label, 5) - self.notebook.next_page() - instpro = installProgress( - self.window, - self.welcome, - self.kb, - self.tz, - self.adminuser - ) - progressBar = instpro.getProgressBar() - box1 = Gtk.VBox(False, 0) - box1.show() - label = Gtk.Label(label="Progress Bar") - box1.pack_end(progressBar, False, False, 0) - self.nbButton.insert_page(box1, label, 1) - self.nbButton.next_page() - self.window.show_all() - pass - - def skip_page(self, widget): - """Go back to the previous window.""" - pass - - def __init__(self): - """Were the Main window start.""" - self.window = Gtk.Window() - self.window.connect("delete_event", self.delete) - self.window.set_border_width(0) - self.window.set_default_size(800, 500) - self.window.set_size_request(800, 500) - self.window.set_title("GhostBSD Initial Setup") - self.window.set_border_width(0) - self.window.set_icon_from_file(logo) - mainHBox = Gtk.HBox(homogeneous=False, spacing=0) - mainHBox.show() - mainVbox = Gtk.VBox(homogeneous=False, spacing=0) - mainVbox.show() - self.window.add(mainHBox) - mainHBox.pack_start(mainVbox, True, True, 0) - self.notebook = Gtk.Notebook() - mainVbox.pack_start(self.notebook, True, True, 0) - self.notebook.show() - self.notebook.set_show_tabs(False) - self.notebook.set_show_border(False) - welcome_box = Gtk.VBox(homogeneous=False, spacing=0) - welcome_box.show() - self.welcome = Language() - get_types = self.welcome.get_model() - welcome_box.pack_start(get_types, True, True, 0) - label = Gtk.Label(label="Welcome") - self.notebook.insert_page(welcome_box, label, 0) - # Set what page to start at type of installation - self.notebook.set_current_page(0) - self.table = Gtk.Table(n_rows=1, n_columns=6, homogeneous=True) - self.skip_button = Gtk.Button(label='Skip') - self.skip_button.connect("clicked", self.skip_page) - self.table.attach(self.skip_button, 4, 5, 0, 1) - self.next_button = Gtk.Button(label='Next') - self.next_button.connect("clicked", self.next_page) - self.table.attach(self.next_button, 5, 6, 0, 1) - self.table.set_col_spacings(5) - self.table.show() - self.nbButton = Gtk.Notebook() - mainVbox.pack_end(self.nbButton, False, False, 5) - self.nbButton.show() - self.nbButton.set_show_tabs(False) - self.nbButton.set_show_border(False) - label = Gtk.Label(label="Button") - self.nbButton.insert_page(self.table, label, 0) - self.window.show_all() - self.skip_button.hide() - - -MainWindow() -Gtk.main() diff --git a/setup-station-init b/setup-station-init new file mode 100755 index 0000000..5f6aa5d --- /dev/null +++ b/setup-station-init @@ -0,0 +1,58 @@ +#!/usr/local/bin/python +""" +Setup Station executable module. + +This is the main entry point for the Setup Station GTK+ application. +It initializes all page components and sets up the main window interface. +""" +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import Gtk + +from setup_station.language import Language +from setup_station.keyboard import Keyboard +from setup_station.timezone import TimeZone +from setup_station.network_setup import NetworkSetup +from setup_station.add_admin import AddUser +from setup_station.data import logo +from setup_station.window import Window +from setup_station.interface_controller import Interface, Button + + +class MainWindow: + """ + Setup Station main window class. + + This class initializes the main GTK window and sets up all page components + for the setup wizard interface. + """ + + def __init__(self) -> None: + """ + Initialize the Setup Station main window. + + Sets up page assignments to Interface class, configures the main window + properties, and creates the main interface layout. + """ + Interface.language = Language + Interface.keyboard = Keyboard + Interface.timezone = TimeZone + Interface.network_setup = NetworkSetup + Interface.add_admin = AddUser + Window.connect("delete_event", Interface.delete) + Window.set_border_width(0) + Window.set_default_size(800, 500) + Window.set_size_request(800, 500) + Window.set_title("GhostBSD Initial Setup") + Window.set_border_width(0) + Window.set_icon_from_file(logo) + main_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, homogeneous=False, spacing=0) + main_box.show() + Window.add(main_box) + main_box.pack_start(Interface.get_interface(), True, True, 0) + Window.show_all() + Button.show_initial() + + +MainWindow() +Gtk.main() diff --git a/setup.py b/setup.py index 50d9311..a0ffc4a 100755 --- a/setup.py +++ b/setup.py @@ -1,56 +1,171 @@ #!/usr/bin/env python -# -*- coding: utf-8 -*- +""" +Setup script for Setup Station. +Setup Station is GhostBSD's post-installation setup utility, providing +a GTK+ interface for language, keyboard, timezone, network, and user configuration. +""" import os import sys -# from glob import glob -from setuptools import setup +from setuptools import setup, Command +import glob +from DistUtilsExtra.command.build_extra import build_extra +from DistUtilsExtra.command.build_i18n import build_i18n +from DistUtilsExtra.command.clean_i18n import clean_i18n -# import DistUtilsExtra.command.build_extra -# import DistUtilsExtra.command.build_i18n -# import DistUtilsExtra.command.clean_i18n - -# to update i18n .mo files (and merge .pot file into .po files) run on Linux: -# ,,python setup.py build_i18n -m'' - -# silence pyflakes, __VERSION__ is properly assigned below... +prefix = sys.prefix __VERSION__ = '0.1' - -# for line in open('gbinstall', 'r').readlines(): -# if (line.startswith('__VERSION__')): -# exec(line.strip()) PROGRAM_VERSION = __VERSION__ -def datafilelist(installbase, sourcebase): - datafileList = [] - for root, subFolders, files in os.walk(sourcebase): - fileList = [] +def data_file_list(install_base, source_base): + """ + Generate list of data files for installation. + + Args: + install_base: Base installation path + source_base: Source directory to scan + + Returns: + List of (install_path, files) tuples for setuptools + """ + data = [] + for root, subFolders, files in os.walk(source_base): + file_list = [] for f in files: - fileList.append(os.path.join(root, f)) - datafileList.append((root.replace(sourcebase, installbase), fileList)) - return datafileList + file_list.append(os.path.join(root, f)) + # Only add directories that actually have files + if file_list: + data.append((root.replace(source_base, install_base), file_list)) + return data -prefix = sys.prefix +class UpdateTranslationsCommand(Command): + """Custom command to extract messages and update .po files.""" + + description = 'Extract messages to .pot and update .po' + user_options = [] # No custom options + + def initialize_options(self): + pass + + def finalize_options(self): + pass + + def run(self): + # Define paths + pot_file = 'po/setup-station.pot' + po_files = glob.glob('po/*.po') + + # Check if .pot file exists, create it if it doesn't + if not os.path.exists(pot_file): + print(f"POT file {pot_file} does not exist. Creating it...") + else: + print("Updating existing .pot file...") + + # Step 1: Extract messages to .pot file (create or update) + print("Extracting messages to .pot file...") + os.makedirs('po', exist_ok=True) + os.system( + f'xgettext --from-code=UTF-8 -L Python --keyword=get_text -o {pot_file}' + ' setup_station/*.py setup-station-init' + ) + + # Verify .pot file was created successfully + if not os.path.exists(pot_file): + print(f"Error: Failed to create {pot_file}") + return + + # Fix charset to UTF-8 in the .pot file + print("Setting charset to UTF-8 in .pot file...") + os.system(f"sed -i '' 's/charset=CHARSET/charset=UTF-8/g' {pot_file}") + + # Step 2: Update .po files with the new .pot file + print("Updating .po files with new translations...") + for po_file in po_files: + print(f"Updating {po_file}...") + os.system(f'msgmerge -U {po_file} {pot_file}') + print("Translation update complete.") + + +class CreateTranslationCommand(Command): + """Custom command to create a new .po file for a specific language.""" + locale = None + description = 'Create a new .po file for the specified language' + user_options = [ + ('locale=', 'l', 'Locale code for the new translation (e.g., fr, es)') + ] + + def initialize_options(self): + self.locale = None # Initialize the locale option to None + + def finalize_options(self): + if self.locale is None: + raise Exception("You must specify the locale code (e.g., --locale=fr)") + + def run(self): + # Define paths + pot_file = 'po/setup-station.pot' + po_dir = 'po' + po_file = os.path.join(po_dir, f'{self.locale}.po') + # Check if the .pot file exists + if not os.path.exists(pot_file): + print("Extracting messages to .pot file...") + os.makedirs(po_dir, exist_ok=True) + os.system( + f'xgettext --from-code=UTF-8 -L Python --keyword=get_text -o {pot_file}' + ' setup_station/*.py setup-station-init' + ) + # Fix charset to UTF-8 in the .pot file + print("Setting charset to UTF-8 in .pot file...") + os.system(f"sed -i '' 's/charset=CHARSET/charset=UTF-8/g' {pot_file}") + # Create the new .po file + if not os.path.exists(po_file): + print(f"Creating new {po_file} for locale '{self.locale}'...") + os.makedirs(po_dir, exist_ok=True) + os.system(f'msginit --locale={self.locale} --input={pot_file} --output-file={po_file}') + else: + print(f"PO file for locale '{self.locale}' already exists: {po_file}") + + +lib_setup_station_image = [ + 'src/image/G_logo.gif', + 'src/image/install-gbsd.png', + 'src/image/install-gbsd.svg', + 'src/image/logo.png', + 'src/image/disk.png', + 'src/image/laptop.png', + 'src/image/install.png', + 'src/image/installation.jpg' +] -# data_files.extend(datafilelist('{prefix}/share/locale'.format(prefix=sys.prefix), 'build/mo')) +data_files = [ + (f'{prefix}/lib/setup-station', ['src/ghostbsd-style.css']), + (f'{prefix}/lib/setup-station/image', lib_setup_station_image), + (f'{prefix}/share/applications', ['src/setup-station.desktop']) +] -# cmdclass ={ -# "build" : DistUtilsExtra.command.build_extra.build_extra, -# "build_i18n" : DistUtilsExtra.command.build_i18n.build_i18n, -# "clean": DistUtilsExtra.command.clean_i18n.clean_i18n, -# } +# Add locale files if they exist +if os.path.exists('build/mo'): + data_files.extend(data_file_list(f'{prefix}/share/locale', 'build/mo')) setup( name="setup-station", version=PROGRAM_VERSION, - description="setup-station is use to setup GhostBSD after installation", + description="Setup Station - GhostBSD post-installation setup utility", license='BSD', author='Eric Turgeon', - url='https://github/GhostBSD/setup-station/', + url='https://github.com/GhostBSD/setup-station/', package_dir={'': '.'}, install_requires=['setuptools'], - scripts=['setup-station'] -) -# cmdclass = cmdclass, + packages=['setup_station'], + scripts=['setup-station-init'], + data_files=data_files, + cmdclass={ + 'create_translation': CreateTranslationCommand, + 'update_translations': UpdateTranslationsCommand, + "build": build_extra, + "build_i18n": build_i18n, + "clean": clean_i18n + } +) \ No newline at end of file diff --git a/setup_station/__init__.py b/setup_station/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/setup_station/add_admin.py b/setup_station/add_admin.py new file mode 100644 index 0000000..a7f0ebd --- /dev/null +++ b/setup_station/add_admin.py @@ -0,0 +1,225 @@ +""" +This module is used to add the admin user following the utility class pattern. +""" +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import Gtk, Gdk +from setup_station.data import ( + SetupData, + css_path, + get_text +) +from setup_station.common import ( + password_strength, +) +from setup_station.system_calls import set_admin_user +from setup_station.interface_controller import Button + +cssProvider = Gtk.CssProvider() +cssProvider.load_from_path(css_path) +screen = Gdk.Screen.get_default() +styleContext = Gtk.StyleContext() +styleContext.add_provider_for_screen( + screen, + cssProvider, + Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION +) + + +class AddAdminUser: + """ + Utility class for the admin user setup screen following the utility class pattern. + + This class provides a GTK+ interface for admin user creation including: + - Username and full name entry + - Password entry with strength validation + - Shell selection + - Integration with SetupData for persistent configuration + - Root password setting (same as user password) + + The class follows a utility pattern with class methods and variables for state management, + designed to integrate with the main application for navigation flow. + """ + # Class variables instead of instance variables + vbox1: Gtk.Box | None = None + user: Gtk.Entry | None = None + name: Gtk.Entry | None = None + password: Gtk.Entry | None = None + repassword: Gtk.Entry | None = None + label3: Gtk.Label | None = None + img: Gtk.Image | None = None + host: Gtk.Entry | None = None + shell: str = '/usr/local/bin/fish' + + @classmethod + def save_user_data(cls) -> None: + """Save user data to SetupData.""" + # Validate all widgets exist before accessing + if not all([cls.user, cls.name, cls.password, cls.host]): + raise ValueError("UI widgets not initialized") + + # Get values from widgets + username = cls.user.get_text() + fullname = cls.name.get_text() + password = cls.password.get_text() + hostname = cls.host.get_text() + + # Basic validation - just check not empty + if not username: + raise ValueError("Username is required") + if not fullname: + raise ValueError("Full name is required") + if not password: + raise ValueError("Password is required") + + # Save to SetupData + SetupData.username = username + SetupData.user_fullname = fullname + SetupData.user_password = password + SetupData.user_shell = '/usr/local/bin/zsh' + SetupData.user_home_directory = f'/home/{username}' + SetupData.hostname = hostname if hostname else f'{username}-ghostbsd' + SetupData.root_password = password + + @classmethod + def get_user_information(cls) -> dict: + """Get current user information as a dictionary.""" + return { + 'username': SetupData.username, + 'name': SetupData.user_fullname, + 'password': SetupData.user_password, + 'shell': SetupData.user_shell, + 'home_directory': SetupData.user_home_directory, + 'hostname': SetupData.hostname + } + + @classmethod + def save_admin_user(cls) -> None: + """ + Save admin user configuration and apply system changes. + + Raises: + ValueError: If user data validation fails + subprocess.CalledProcessError: If system commands fail + """ + cls.save_user_data() + set_admin_user( + SetupData.username, + SetupData.user_fullname, + SetupData.user_password, + SetupData.user_shell, + SetupData.user_home_directory, + SetupData.hostname + ) + + @classmethod + def user_and_host(cls, _widget: Gtk.Entry) -> None: + """Auto-generate username and hostname from full name.""" + if cls.name and cls.user and cls.host: + username = cls.name.get_text().split() + if len(username) > 0: + cls.host.set_text(f"{username[0].lower()}-ghostbsd-pc") + cls.user.set_text(username[0].lower()) + else: + cls.host.set_text("") + cls.user.set_text("") + + @classmethod + def _initialize_ui(cls) -> None: + """Initialize the user interface components.""" + cls.vbox1 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, spacing=0) + cls.vbox1.show() + admin_message = Gtk.Label(label=get_text("The initial root password will be set to the admin user password.")) + cls.vbox1.pack_start(admin_message, False, False, 0) + + box2 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, spacing=0) + box2.set_border_width(10) + cls.vbox1.pack_start(box2, False, False, 0) + box2.show() + + box2 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, spacing=10) + cls.vbox1.pack_start(box2, False, False, 0) + box2.show() + + label = Gtk.Label(label='User Account') + label.set_use_markup(True) + label.set_alignment(.2, .2) + + username_label = Gtk.Label(label="User name") + cls.user = Gtk.Entry() + name_label = Gtk.Label(label="Real name") + cls.name = Gtk.Entry() + cls.name.connect("changed", cls.user_and_host) + + password_label = Gtk.Label(label="Password") + cls.password = Gtk.Entry() + cls.password.set_visibility(False) + cls.password.connect("changed", cls.password_verification) + + verify_label = Gtk.Label(label="Verify Password") + cls.repassword = Gtk.Entry() + cls.repassword.set_visibility(False) + cls.repassword.connect("changed", cls.password_verification) + + hostname_label = Gtk.Label(label='Set Hostname') + hostname_label.set_use_markup(True) + hostname_label.set_alignment(0, .5) + cls.host = Gtk.Entry() + + table = Gtk.Table(1, 3, True) + table.set_row_spacings(10) + table.attach(name_label, 0, 1, 1, 2) + table.attach(cls.name, 1, 2, 1, 2) + table.attach(username_label, 0, 1, 2, 3) + table.attach(cls.user, 1, 2, 2, 3) + table.attach(password_label, 0, 1, 4, 5) + table.attach(cls.password, 1, 2, 4, 5) + + cls.label3 = Gtk.Label() + table.attach(cls.label3, 2, 3, 4, 5) + table.attach(verify_label, 0, 1, 5, 6) + table.attach(cls.repassword, 1, 2, 5, 6) + + # Set image for password matching + cls.img = Gtk.Image() + table.attach(cls.img, 2, 3, 5, 6) + + box2.pack_start(table, False, False, 0) + + box3 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, spacing=10) + box3.set_border_width(10) + cls.vbox1.pack_start(box3, True, True, 0) + box3.show() + + @classmethod + def get_model(cls) -> Gtk.Box: + """Get the main widget for this screen.""" + if cls.vbox1 is None: + cls._initialize_ui() + return cls.vbox1 + + @classmethod + def password_verification(cls, _widget: Gtk.Entry) -> None: + """Verify password matches and check strength.""" + if cls.password and cls.repassword and cls.label3 and cls.img: + password = cls.password.get_text() + repassword = cls.repassword.get_text() + + # Get password strength message and display it + strength_message = password_strength(password) + cls.label3.set_text(strength_message) + + # Check if passwords match, meet requirements, and are allowed + passwords_match = password == repassword and password != "" and " " not in password + password_allowed = strength_message not in [get_text("Password not allowed"), get_text("Space not allowed")] + + if passwords_match and password_allowed: + cls.img.set_from_stock(Gtk.STOCK_YES, 5) + Button.next_button.set_sensitive(True) + else: + cls.img.set_from_stock(Gtk.STOCK_NO, 5) + Button.next_button.set_sensitive(False) + + +# Backward compatibility alias +AddUser = AddAdminUser diff --git a/setup_station/add_users.py b/setup_station/add_users.py new file mode 100644 index 0000000..9e443f7 --- /dev/null +++ b/setup_station/add_users.py @@ -0,0 +1,143 @@ +#!/usr/bin/env python +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import Gtk, Gdk +from setup_station.common import password_strength +from setup_station.data import css_path, get_text + +cssProvider = Gtk.CssProvider() +cssProvider.load_from_path(css_path) +screen = Gdk.Screen.get_default() +styleContext = Gtk.StyleContext() +styleContext.add_provider_for_screen( + screen, + cssProvider, + Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION +) + + +class AddUsers: + + def save_selection(self): + uname = self.user.get_text() + name = self.name.get_text() + up = self.password.get_text() + shell = self.sh + hf = f'/home/{self.user.get_text()}' + hst = self.host.get_text() + ul = [uname, name, up, shell, hf] + + def on_shell(self, widget): + SHELL = widget.get_active_text() + if SHELL == 'sh': + self.sh = '/bin/sh' + elif SHELL == 'csh': + self.sh = '/bin/csh' + elif SHELL == 'tcsh': + self.sh = '/bin/tcsh' + elif SHELL == 'fish': + self.sh = '/usr/local/bin/fish' + elif SHELL == 'bash': + self.sh = '/usr/local/bin/bash' + elif SHELL == 'rbash': + self.sh = '/usr/local/bin/rbash' + elif SHELL == 'zsh': + self.sh = '/usr/local/bin/zsh' + elif SHELL == 'ksh': + self.sh = '/usr/local/bin/ksh93' + + def user_and_host(self, _widget): + username = self.name.get_text().split() + self.host.set_text(f"{username[0].lower()}-ghostbsd-pc") + self.user.set_text(username[0].lower()) + + def __init__(self, button3): + self.vbox1 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, spacing=0) + self.vbox1.show() + title = Gtk.Label(label=get_text("User Setup"), name="Header") + title.set_property("height-request", 50) + self.vbox1.pack_start(title, False, False, 0) + box2 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, spacing=0) + box2.set_border_width(10) + self.vbox1.pack_start(box2, False, False, 0) + box2.show() + box2 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, spacing=10) + # box2.set_border_width(10) + self.vbox1.pack_start(box2, False, False, 0) + box2.show() + label = Gtk.Label(label='' + get_text('User Account') + '') + label.set_use_markup(True) + label.set_alignment(.2, .2) + Username = Gtk.Label(label=get_text("User name")) + self.user = Gtk.Entry() + self.label2 = Gtk.Label(label=get_text("Real name")) + self.name = Gtk.Entry() + self.name.connect("changed", self.user_and_host) + self.labelpass = Gtk.Label(label=get_text("Password")) + self.password = Gtk.Entry() + self.password.set_visibility(False) + self.password.connect("changed", self.password_verification, button3) + self.label4 = Gtk.Label(label=get_text("Verify Password")) + self.repassword = Gtk.Entry() + self.repassword.set_visibility(False) + self.repassword.connect("changed", self.password_verification, button3) + self.label5 = Gtk.Label(label=get_text("Shell")) + shell = Gtk.ComboBoxText() + self.sh = '/usr/local/bin/fish' + shell.append_text('sh') + shell.append_text('csh') + shell.append_text('tcsh') + shell.append_text('fish') + shell.append_text('bash') + shell.append_text('rbash') + shell.append_text('ksh') + shell.append_text('zsh') + shell.set_active(3) + shell.connect("changed", self.on_shell) + label = Gtk.Label(label='' + get_text('Set Hostname') + '') + label.set_use_markup(True) + label.set_alignment(0, .5) + table = Gtk.Table(1, 3, True) + table.set_row_spacings(10) + pcname = Gtk.Label(label=get_text("Hostname")) + self.host = Gtk.Entry() + # table.attach(label, 0, 2, 0, 1) + table.attach(self.label2, 0, 1, 1, 2) + table.attach(self.name, 1, 2, 1, 2) + table.attach(pcname, 0, 1, 2, 3) + table.attach(self.host, 1, 2, 2, 3) + table.attach(Username, 0, 1, 3, 4) + table.attach(self.user, 1, 2, 3, 4) + table.attach(self.labelpass, 0, 1, 4, 5) + table.attach(self.password, 1, 2, 4, 5) + self.label3 = Gtk.Label() + table.attach(self.label3, 2, 3, 4, 5) + table.attach(self.label4, 0, 1, 5, 6) + table.attach(self.repassword, 1, 2, 5, 6) + # set image for password matching + self.img = Gtk.Image() + table.attach(self.img, 2, 3, 5, 6) + table.attach(self.label5, 0, 1, 6, 7) + table.attach(shell, 1, 2, 6, 7) + box2.pack_start(table, False, False, 0) + self.box3 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, spacing=10) + self.box3.set_border_width(10) + self.vbox1.pack_start(self.box3, True, True, 0) + self.box3.show() + # self.label3 = Gtk.Label() + # self.box3.pack_start(self.label3, False, False, 0) + + def get_model(self): + return self.vbox1 + + def password_verification(self, _widget, button3): + password = self.password.get_text() + strength_message = password_strength(password) + self.label3.set_label(strength_message) + repassword = self.repassword.get_text() + if password == repassword and password != "" and " " not in password: + self.img.set_from_stock(Gtk.STOCK_YES, 5) + button3.set_sensitive(True) + else: + self.img.set_from_stock(Gtk.STOCK_NO, 5) + button3.set_sensitive(False) diff --git a/setup_station/common.py b/setup_station/common.py new file mode 100644 index 0000000..435fa34 --- /dev/null +++ b/setup_station/common.py @@ -0,0 +1,157 @@ +""" +Password validation utilities for setup-station and setup-station-init. +""" +import re +import warnings +from setup_station.data import get_text + + +def is_same_type(text: str) -> bool: + """ + Check if password contains only one character type. + + Args: + text: Password string to validate + + Returns: + bool: True if password is all lowercase, all uppercase, or all digits + """ + return bool(re.match(r'^[a-z]+$|^[A-Z]+$|^[0-9]+$', text)) + + +def mix_character(text: str) -> bool: + """ + Check if password contains exactly two character types. + + Args: + text: Password string to validate + + Returns: + bool: True if password contains lower+number, upper+number, or lower+upper + """ + return bool(re.match(r'^[a-z0-9]+$|^[A-Z0-9]+$|^[a-zA-Z]+$', text)) + + +def lower_upper_number(text: str) -> bool: + """ + Check if password contains letters and numbers (three character types). + + Args: + text: Password string to validate + + Returns: + bool: True if password contains only letters (a-z, A-Z) and digits (0-9) + """ + return bool(re.match(r'^[a-zA-Z0-9]+$', text)) + + +def all_character(text: str) -> bool: + """ + Check if password contains letters, numbers, and special characters. + + Args: + text: Password string to validate + + Returns: + bool: True if password contains allowed characters (a-z, A-Z, 0-9, and ~!@#$%^&*_+":;'-) + """ + return bool(re.match(r'^[a-zA-Z0-9~!@#$%^&*_+":;\'-]+$', text)) + + +def _get_complexity_tier(password: str) -> int: + """ + Determine password complexity tier based on character type diversity. + + Args: + password: The password to evaluate + + Returns: + int: Complexity tier (0-3) + 0 = single character type (all lowercase, all uppercase, or all digits) + 1 = two character types (lower+number, upper+number, or lower+upper) + 2 = three character types (letters + numbers) + 3 = all character types (letters + numbers + special chars) + """ + if all_character(password): + return 3 + if lower_upper_number(password): + return 2 + if mix_character(password): + return 1 + return 0 + + +def password_strength(password: str) -> str: + """ + Evaluate password strength and return the message. + + Uses structural pattern matching to determine strength based on + password length and character complexity. + + Args: + password: The password to evaluate + + Returns: + str: Message describing password strength or validation error + """ + # Guard clauses for invalid passwords + if password in {'password', 'Password', 'PASSWORD'}: + return get_text("Password not allowed") + if ' ' in password or '\t' in password: + return get_text("Space not allowed") + + # Determine length range + length = len(password) + if length <= 8: + length_range = 8 + elif length <= 12: + length_range = 12 + elif length <= 15: + length_range = 15 + else: + length_range = 16 + + complexity = _get_complexity_tier(password) + + # Pattern matching for strength evaluation + match (length_range, complexity): + case (8, 0): return get_text("Very Weak") + case (8, 1): return get_text("Fairly Weak") + case (8, 2): return get_text("Weak") + case (8, 3): return get_text("Strong") + case (12, 0): return get_text("Fairly Weak") + case (12, 1): return get_text("Weak") + case (12, 2): return get_text("Strong") + case (12, 3): return get_text("Fairly Strong") + case (15, 0): return get_text("Weak") + case (15, 1): return get_text("Strong") + case (15, 2): return get_text("Fairly Strong") + case (15, 3): return get_text("Very Strong") + case (16, 0): return get_text("Strong") + case (16, 1): return get_text("Fairly Strong") + case _: return get_text("Very Strong") + + +def deprecated(*, version: str, reason: str): + """ + Decorator to mark functions as deprecated. + + Args: + version: Version in which the function was deprecated + reason: Reason for deprecation + + Returns: + Decorator function + """ + def decorator(func): + def wrapper(*args, **kwargs): + warnings.warn( + f"{func.__name__} is deprecated (version {version}): {reason}", + category=DeprecationWarning, + stacklevel=2 + ) + return func(*args, **kwargs) + wrapper.__name__ = func.__name__ + wrapper.__doc__ = func.__doc__ + return wrapper + return decorator \ No newline at end of file diff --git a/setup_station/data.py b/setup_station/data.py new file mode 100644 index 0000000..d7e0f41 --- /dev/null +++ b/setup_station/data.py @@ -0,0 +1,78 @@ +""" +Contains the data class and some commonly used variables for setup-station-init +""" +import os +import gettext + +logo: str = "/usr/local/lib/setup-station/image/logo.png" +gif_logo: str = "/usr/local/lib/setup-station/image/G_logo.gif" +pc_sysinstall: str = "/usr/local/sbin/pc-sysinstall" +tmp: str = "/tmp/.setup-station" +css_path: str = "/usr/local/lib/setup-station/ghostbsd-style.css" + + +class SetupData: + """ + Centralized data storage for setup configuration + """ + # Language and localization + language: str = "" + language_code: str = "" + + # Keyboard configuration + keyboard_layout: str = "" + keyboard_layout_code: str = "" + keyboard_variant: str = "" + keyboard_model: str = "" + keyboard_model_code: str = "" + + # Timezone configuration + timezone: str = "" + + # Network configuration + network_config: dict = {} + + # Admin user configuration + username: str = "" + user_fullname: str = "" + user_password: str = "" + user_shell: str = "" + user_home_directory: str = "" + hostname: str = "" + root_password: str = "" + + @classmethod + def reset(cls) -> None: + """Reset all setup data""" + cls.language = "" + cls.language_code = "" + cls.keyboard_layout = "" + cls.keyboard_layout_code = "" + cls.keyboard_variant = "" + cls.keyboard_model = "" + cls.keyboard_model_code = "" + cls.timezone = "" + cls.network_config = {} + cls.username = "" + cls.user_fullname = "" + cls.user_password = "" + cls.user_shell = "" + cls.user_home_directory = "" + cls.hostname = "" + cls.root_password = "" + + +def get_text(text: str) -> str: + """ + Global translation function that always returns current language translation. + + Args: + text: Text to translate + + Returns: + str: Translated text in current language + """ + # Force reload of translations for current language + gettext.bindtextdomain('setup-station-init', '/usr/local/share/locale') + gettext.textdomain('setup-station-init') + return gettext.gettext(text) \ No newline at end of file diff --git a/setup_station/interface_controller.py b/setup_station/interface_controller.py new file mode 100644 index 0000000..8cf2b69 --- /dev/null +++ b/setup_station/interface_controller.py @@ -0,0 +1,236 @@ +""" +Interface Controller Module. + +This module provides the main navigation interface and button controls +for the Setup Station GTK application wizard. +""" +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import Gtk +from setup_station.setup_system import SetupWindow, SetupProgress +from setup_station.window import Window +from setup_station.data import SetupData, get_text + + +class Button: + """ + Button management class for navigation controls. + + Manages the Back and Next buttons used throughout + the setup wizard interface. + """ + back_button: Gtk.Button = Gtk.Button(label=get_text('Back')) + """This button is used to go back to the previous page.""" + next_button: Gtk.Button = Gtk.Button(label=get_text('Next')) + """This button is used to go to the next page.""" + _box: Gtk.Box | None = None + + @classmethod + def update_button_labels(cls) -> None: + """Update button labels with current language translations.""" + cls.back_button.set_label(get_text('Back')) + cls.next_button.set_label(get_text('Next')) + + @classmethod + def hide_all(cls) -> None: + """ + This method hides all buttons. + """ + cls.back_button.hide() + cls.next_button.hide() + + @classmethod + def show_initial(cls) -> None: + """ + This method shows the initial buttons. Just Next. + """ + cls.back_button.hide() + cls.next_button.show() + + @classmethod + def show_back(cls) -> None: + """ + This method shows the back button. + """ + cls.back_button.show() + + @classmethod + def hide_back(cls) -> None: + """ + This method hides the back button. + """ + cls.back_button.hide() + + @classmethod + def box(cls) -> Gtk.Box: + """ + This method creates a box container of buttons aligned to the right. + + Returns: + Box container with buttons aligned to the right for navigation. + """ + if cls._box is None: + # Use Box for better right-alignment control + cls._box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, homogeneous=False, spacing=5) + cls._box.set_halign(Gtk.Align.END) # Align the entire box to the right + + cls.back_button.connect("clicked", Interface.back_page) + cls._box.pack_start(cls.back_button, False, False, 0) + + cls.next_button.connect("clicked", Interface.next_page) + cls._box.pack_start(cls.next_button, False, False, 0) + + cls._box.show() + return cls._box + + +class Interface: + """ + Main interface controller for the setup wizard. + + Manages the GTK Notebook pages and navigation between different + screens in the setup process including language, keyboard, + timezone, network setup, and admin user configuration. + """ + language = None + keyboard = None + timezone = None + network_setup = None + add_admin = None + page: Gtk.Notebook = Gtk.Notebook() + nbButton: Gtk.Notebook | None = None + + @classmethod + def get_interface(cls) -> Gtk.Box: + interface_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, spacing=0) + interface_box.show() + interface_box.pack_start(cls.page, True, True, 0) + cls.page.show() + cls.page.set_show_tabs(False) + cls.page.set_show_border(False) + + # Create the language page + language_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, spacing=0) + language_box.show() + cls.language.initialize() + get_types = cls.language.get_model() + language_box.pack_start(get_types, True, True, 0) + Window.set_title(get_text("GhostBSD Initial Setup")) + label = Gtk.Label(label=get_text("Language")) + cls.page.insert_page(language_box, label, 0) + + # Set what page to start at + cls.page.set_current_page(0) + + # Create button container + cls.nbButton = Gtk.Notebook() + interface_box.pack_end(cls.nbButton, False, False, 5) + cls.nbButton.show() + cls.nbButton.set_show_tabs(False) + cls.nbButton.set_show_border(False) + label = Gtk.Label(label=get_text("Button")) + cls.nbButton.insert_page(Button.box(), label, 0) + + return interface_box + + @classmethod + def delete(cls, _widget: Gtk.Widget, _event=None) -> None: + """ + Close the main window and clean up application state. + """ + SetupData.reset() + Gtk.main_quit() + + @classmethod + def next_page(cls, _widget: Gtk.Button) -> None: + """Go to the next window.""" + page = cls.page.get_current_page() + if page == 0: + # Check if the keyboard page already exists + if cls.page.get_n_pages() <= 1: + keyboard_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, spacing=0) + keyboard_box.show() + get_keyboard = cls.keyboard.get_model() + keyboard_box.pack_start(get_keyboard, True, True, 0) + label = Gtk.Label(label=get_text("Keyboard")) + cls.page.insert_page(keyboard_box, label, 1) + cls.page.next_page() + Window.show_all() + Button.show_back() + Button.next_button.set_sensitive(True) + elif page == 1: + # Check if the timezone page already exists + if cls.page.get_n_pages() <= 2: + timezone_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, spacing=0) + timezone_box.show() + get_timezone = cls.timezone.get_model() + timezone_box.pack_start(get_timezone, True, True, 0) + label = Gtk.Label(label=get_text("Time Zone")) + cls.page.insert_page(timezone_box, label, 2) + cls.page.next_page() + Window.show_all() + Button.next_button.set_sensitive(True) + elif page == 2: + # Check if the network setup page already exists + if cls.page.get_n_pages() <= 3: + network_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, spacing=0) + network_box.show() + get_network = cls.network_setup.get_model() + network_box.pack_start(get_network, True, True, 0) + label = Gtk.Label(label=get_text("Network")) + cls.page.insert_page(network_box, label, 3) + cls.page.next_page() + Window.show_all() + Button.next_button.set_sensitive(True) + elif page == 3: + # Check if the admin user page already exists + if cls.page.get_n_pages() <= 4: + admin_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, spacing=0) + admin_box.show() + get_admin = cls.add_admin.get_model() + admin_box.pack_start(get_admin, True, True, 0) + label = Gtk.Label(label=get_text("Admin User")) + cls.page.insert_page(admin_box, label, 4) + cls.page.next_page() + Window.show_all() + Button.next_button.set_sensitive(False) + elif page == 4: + # Create the Setup Progress page + install_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, spacing=0) + install_box.show() + install = SetupWindow() + get_install = install.get_model() + install_box.pack_start(get_install, True, True, 0) + label = Gtk.Label(label=get_text("Setup GhostBSD")) + cls.page.insert_page(install_box, label, 5) + cls.page.next_page() + + # Start the setup progress + instpro = SetupProgress() + progress_bar = instpro.get_progressbar() + box1 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, spacing=0) + box1.show() + label = Gtk.Label(label=get_text("Progress Bar")) + box1.pack_end(progress_bar, False, False, 0) + cls.nbButton.insert_page(box1, label, 1) + cls.nbButton.next_page() + Window.show_all() + + # Update window title + current_page_widget = cls.page.get_nth_page(cls.page.get_current_page()) + title_text = cls.page.get_tab_label_text(current_page_widget) + Window.set_title(title_text) + + @classmethod + def back_page(cls, _widget: Gtk.Button) -> None: + """Go back to the previous window.""" + current_page = cls.page.get_current_page() + if current_page == 1: + # Going back to the language page hide back button + Button.hide_back() + cls.page.prev_page() + + # Update window title + current_page_widget = cls.page.get_nth_page(cls.page.get_current_page()) + title_text = cls.page.get_tab_label_text(current_page_widget) + Window.set_title(title_text) \ No newline at end of file diff --git a/setup_station/keyboard.py b/setup_station/keyboard.py new file mode 100644 index 0000000..ae8fa92 --- /dev/null +++ b/setup_station/keyboard.py @@ -0,0 +1,238 @@ +""" +Keyboard configuration module following the utility class pattern. +""" +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import Gtk, Gdk +from setup_station.system_calls import ( + keyboard_dictionary, + keyboard_models, + change_keyboard, + set_keyboard +) +from setup_station.data import ( + SetupData, + css_path, + get_text +) + +kb_dictionary = keyboard_dictionary() +kbm_dictionary = keyboard_models() + +cssProvider = Gtk.CssProvider() +cssProvider.load_from_path(css_path) +screen = Gdk.Screen.get_default() +styleContext = Gtk.StyleContext() +styleContext.add_provider_for_screen( + screen, + cssProvider, + Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION +) + + +# This class is for placeholder for entry. +class PlaceHolderEntry(Gtk.Entry): + + placeholder = 'Type here to test your keyboard' + _default = True + + def __init__(self, *args, **kwds): + Gtk.Entry.__init__(self, *args, **kwds) + self.placeholder = get_text('Type here to test your keyboard') + self.set_text(self.placeholder) + # self.modify_text(Gtk.STATE_NORMAL, Gtk.gdk.color_parse("#4d4d4d")) + self._default = True + self.connect('focus-in-event', self._focus_in_event) + self.connect('focus-out-event', self._focus_out_event) + + def _focus_in_event(self, _widget, _event): + if self._default: + self.set_text('') + # self.modify_text(Gtk.STATE_NORMAL, Gtk.gdk.color_parse('black')) + + def _focus_out_event(self, _widget, _event): + if Gtk.Entry.get_text(self) == '': + self.set_text(self.placeholder) + # self.modify_text(Gtk.STATE_NORMAL, + # Gtk.gdk.color_parse("#4d4d4d")) + self._default = True + else: + self._default = False + + def get_text(self): + if self._default: + return '' + return Gtk.Entry.get_text(self) + + +class Keyboard: + """ + Utility class for the keyboard configuration screen following the utility class pattern. + + This class provides a GTK+ interface for keyboard configuration including: + - Keyboard layout selection from available system layouts + - Keyboard model selection + - Live keyboard testing with placeholder entry + - Integration with SetupData for persistent configuration + - Real-time keyboard switching for immediate testing + + The class follows a utility pattern with class methods and variables for state management, + designed to integrate with the main application for navigation flow. + """ + # Class variables instead of instance variables + vbox1: Gtk.Box | None = None + kb_layout: str | None = None + kb_variant: str | None = None + kb_model: str | None = None + treeView: Gtk.TreeView | None = None + model_store: Gtk.TreeStore | None = None + tree_selection: Gtk.TreeSelection | None = None + + @classmethod + def layout_columns(cls, treeview: Gtk.TreeView) -> None: + """Setup the keyboard layout column in the tree view.""" + cell = Gtk.CellRendererText() + column = Gtk.TreeViewColumn(None, cell, text=0) + column_header = Gtk.Label(label='' + get_text('Keyboard Layout') + '') + column_header.set_use_markup(True) + column_header.show() + column.set_widget(column_header) + column.set_sort_column_id(0) + treeview.append_column(column) + + @classmethod + def variant_columns(cls, treeview: Gtk.TreeView) -> None: + """Setup the keyboard model column in the tree view.""" + cell = Gtk.CellRendererText() + column = Gtk.TreeViewColumn(None, cell, text=0) + column_header = Gtk.Label(label='' + get_text('Keyboard Models') + '') + column_header.set_use_markup(True) + column_header.show() + column.set_widget(column_header) + column.set_sort_column_id(0) + treeview.append_column(column) + + @classmethod + def layout_selection(cls, tree_selection: Gtk.TreeSelection) -> None: + """Handle keyboard layout selection from the tree view.""" + model, treeiter = tree_selection.get_selected() + if treeiter is not None: + value = model[treeiter][0] + kb_lv = kb_dictionary[value] + cls.kb_layout = kb_lv['layout'] + cls.kb_variant = kb_lv['variant'] + try: + change_keyboard(cls.kb_layout, cls.kb_variant) + except RuntimeError as e: + print(f"Warning: Failed to apply keyboard layout immediately: {e}") + # Save to SetupData + SetupData.keyboard_layout = cls.kb_layout + SetupData.keyboard_variant = cls.kb_variant or "" + + @classmethod + def model_selection(cls, tree_selection: Gtk.TreeSelection) -> None: + """Handle keyboard model selection from the tree view.""" + model, treeiter = tree_selection.get_selected() + if treeiter is not None: + value = model[treeiter][0] + cls.kb_model = kbm_dictionary[value] + try: + change_keyboard(cls.kb_layout, cls.kb_variant, cls.kb_model) + except RuntimeError as e: + print(f"Warning: Failed to apply keyboard model immediately: {e}") + # Save to SetupData + SetupData.keyboard_model = cls.kb_model + + @classmethod + def get_model(cls) -> Gtk.Box: + """Get the main widget for this screen.""" + if cls.vbox1 is None: + cls._initialize_ui() + if cls.treeView: + cls.treeView.set_cursor(0) + return cls.vbox1 + + @classmethod + def save_keyboard_data(cls) -> None: + """Save keyboard data to SetupData.""" + SetupData.keyboard_layout = cls.kb_layout or "" + SetupData.keyboard_variant = cls.kb_variant or "" + SetupData.keyboard_model = cls.kb_model or "" + + @classmethod + def save_keyboard(cls) -> None: + """ + Apply keyboard configuration to the system. + + Raises: + IOError: If file operations fail + RuntimeError: If keyboard configuration fails + """ + cls.save_keyboard_data() + set_keyboard( + SetupData.keyboard_layout, + SetupData.keyboard_variant, + SetupData.keyboard_model + ) + + @classmethod + def _initialize_ui(cls) -> None: + """Initialize the user interface components.""" + cls.vbox1 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, spacing=0) + cls.vbox1.show() + vbox2 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, spacing=10) + vbox2.set_border_width(10) + cls.vbox1.pack_start(vbox2, True, True, 0) + vbox2.show() + table = Gtk.Table(1, 2, True) + vbox2.pack_start(table, False, False, 0) + hbox1 = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, homogeneous=False, spacing=10) + hbox1.set_border_width(5) + vbox2.pack_start(hbox1, True, True, 5) + hbox1.show() + + # Keyboard layout selection + sw = Gtk.ScrolledWindow() + sw.set_shadow_type(Gtk.ShadowType.ETCHED_IN) + sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) + store = Gtk.TreeStore(str) + store.append(None, ['English (US)']) + store.append(None, ['English (Canada)']) + store.append(None, ['French (Canada)']) + for line in sorted(kb_dictionary): + store.append(None, [line.rstrip()]) + cls.treeView = Gtk.TreeView() + cls.treeView.set_model(store) + cls.treeView.set_rules_hint(True) + cls.layout_columns(cls.treeView) + cls.tree_selection = cls.treeView.get_selection() + cls.tree_selection.set_mode(Gtk.SelectionMode.SINGLE) + cls.tree_selection.connect("changed", cls.layout_selection) + sw.add(cls.treeView) + sw.show() + hbox1.pack_start(sw, True, True, 5) + + # Keyboard model selection + sw = Gtk.ScrolledWindow() + sw.set_shadow_type(Gtk.ShadowType.ETCHED_IN) + sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) + cls.model_store = Gtk.TreeStore(str) + for line in sorted(kbm_dictionary): + cls.model_store.append(None, [line.rstrip()]) + treeview = Gtk.TreeView() + treeview.set_model(cls.model_store) + treeview.set_rules_hint(True) + cls.variant_columns(treeview) + tree_selection = treeview.get_selection() + tree_selection.set_mode(Gtk.SelectionMode.SINGLE) + tree_selection.connect("changed", cls.model_selection) + sw.add(treeview) + sw.show() + hbox1.pack_start(sw, True, True, 5) + + # Keyboard testing area + vbox3 = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, homogeneous=False, spacing=10) + vbox3.set_border_width(5) + cls.vbox1.pack_start(vbox3, False, False, 0) + vbox3.show() + vbox3.pack_start(PlaceHolderEntry(), True, True, 10) diff --git a/setup_station/language.py b/setup_station/language.py new file mode 100644 index 0000000..252faea --- /dev/null +++ b/setup_station/language.py @@ -0,0 +1,250 @@ +""" +Language selection module following the utility class pattern. +""" +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import Gtk, Gdk +from setup_station.system_calls import ( + language_dictionary, + localize_system +) +from setup_station.data import ( + SetupData, + gif_logo, + css_path, + get_text +) +from setup_station.window import Window + +lang_dictionary = language_dictionary() + +cssProvider = Gtk.CssProvider() +cssProvider.load_from_path(css_path) +screen = Gdk.Screen.get_default() +styleContext = Gtk.StyleContext() +styleContext.add_provider_for_screen( + screen, + cssProvider, + Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION +) + + +class Language: + """ + Utility class for the language selection screen following the utility class pattern. + + This class provides a GTK+ interface for language selection including: + - Language selection from available system languages + - Visual elements with welcome message and logo + - Integration with SetupData for persistent configuration + - Environment variable setting for immediate translation updates + + The class follows a utility pattern with class methods and variables for state management, + designed to integrate with the main application for navigation flow. + """ + # Class variables instead of instance variables + vbox1: Gtk.Box | None = None + language: str | None = None + treeview: Gtk.TreeView | None = None + welcome_text: Gtk.Label | None = None + language_column_header: Gtk.Label | None = None + + @classmethod + def language_selection(cls, tree_selection: Gtk.TreeSelection) -> None: + """ + Handle language selection from the treeview. + + Extracts the selected language from the tree view and updates both + class variables and SetupData with the language name and code. + Also sets environment variables globally so all modules pick up the language. + + Args: + tree_selection: TreeSelection widget containing the user's language choice + """ + model, treeiter = tree_selection.get_selected() + if treeiter is not None: + value = model[treeiter][0] + language_code = lang_dictionary[value] + cls.language = language_code + SetupData.language = value + SetupData.language_code = language_code + print(f"Language selected: {value} ({language_code})") + + # Set environment variables globally so all modules pick up the language + import os + os.environ['LANGUAGE'] = language_code + os.environ['LC_ALL'] = f'{language_code}.UTF-8' + os.environ['LANG'] = f'{language_code}.UTF-8' + + # Update the UI text with new translations + cls.update_ui_text() + + @classmethod + def update_ui_text(cls) -> None: + """ + Update all UI text elements with new translations after language change. + """ + from setup_station.interface_controller import Button + + # Update navigation buttons + Button.update_button_labels() + + # Update the welcome text + if hasattr(cls, 'welcome_text') and cls.welcome_text: + cls.welcome_text.set_text( + get_text( + "Please select your language:" + ) + ) + + # Update the language column header + if hasattr(cls, 'language_column_header') and cls.language_column_header: + cls.language_column_header.set_text(get_text('Language')) + + Window.set_title(get_text("GhostBSD Initial Setup")) + + @classmethod + def setup_language_columns(cls, treeview: Gtk.TreeView) -> None: + """ + Configure the language selection treeview with appropriate columns. + + Creates a single column with a "Language" header for displaying + available languages in the tree view. + + Args: + treeview: TreeView widget to configure with language column + """ + cell = Gtk.CellRendererText() + column = Gtk.TreeViewColumn(None, cell, text=0) + column_header = Gtk.Label(label=get_text('Language')) + column_header.set_use_markup(True) + column_header.show() + column.set_widget(column_header) + # Store reference for updating + cls.language_column_header = column_header + column.set_sort_column_id(0) + treeview.append_column(column) + + @classmethod + def initialize(cls) -> None: + """ + Initialize the language selection UI following the utility class pattern. + + Creates the main interface including: + - Logo on the left side + - Welcome message and language selection tree view on the right side + - Grid-based layout with proper spacing and margins + + This method is called automatically by get_model() when the interface is first accessed. + """ + cls.language = None + + # Main container + cls.vbox1 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, spacing=0) + cls.vbox1.show() + + main_grid = Gtk.Grid() + cls.vbox1.pack_start(main_grid, True, True, 0) + + # Left side - Logo + image = Gtk.Image() + image.set_from_file(gif_logo) + image.show() + + # Right side - Welcome content and language selection + right_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, spacing=10) + right_box.set_border_width(20) + right_box.show() + + # Welcome text + cls.welcome_text = Gtk.Label( + label=get_text( + "Please select your language:" + ) + ) + cls.welcome_text.set_use_markup(True) + cls.welcome_text.set_line_wrap(True) + cls.welcome_text.set_justify(Gtk.Justification.CENTER) + cls.welcome_text.show() + + # Language selection + sw = Gtk.ScrolledWindow() + sw.set_shadow_type(Gtk.ShadowType.ETCHED_IN) + sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) + + store = Gtk.TreeStore(str) + for line in lang_dictionary: + store.append(None, [line]) + + cls.treeview = Gtk.TreeView() + cls.treeview.set_model(store) + cls.treeview.set_rules_hint(True) + cls.treeview.set_headers_visible(False) + cls.setup_language_columns(cls.treeview) + tree_selection = cls.treeview.get_selection() + tree_selection.set_mode(Gtk.SelectionMode.SINGLE) + tree_selection.connect("changed", cls.language_selection) + sw.add(cls.treeview) + sw.show() + + right_box.pack_start(cls.welcome_text, False, False, 10) + right_box.pack_start(sw, True, True, 10) + + # Layout in grid + main_grid.set_row_spacing(10) + main_grid.set_column_spacing(20) + main_grid.set_column_homogeneous(True) + main_grid.set_row_homogeneous(True) + main_grid.set_margin_left(10) + main_grid.set_margin_right(10) + main_grid.set_margin_top(10) + main_grid.set_margin_bottom(10) + + main_grid.attach(image, 0, 0, 1, 1) + main_grid.attach(right_box, 1, 0, 1, 1) + main_grid.show() + + @classmethod + def get_model(cls) -> Gtk.Box: + """ + Return the GTK widget model for the language selection interface. + + Returns the main container widget that was created during initialization. + + Returns: + Gtk.Box: The main container widget for the language selection interface + """ + if cls.vbox1 is None: + cls.initialize() + return cls.vbox1 + + @classmethod + def get_language(cls) -> str | None: + """ + Get the selected language code. + + Returns: + str: The selected language code + """ + return SetupData.language_code or cls.language + + @classmethod + def save_language(cls) -> None: + """ + Apply the language configuration to the system. + + This method applies the selected language to the system for + permanent configuration during setup. + + Raises: + IOError: If file operations fail during localization + ValueError: If language code is invalid + """ + language_code = SetupData.language_code or cls.language + if not language_code: + raise ValueError("No language selected. Please select a language before proceeding.") + + try: + localize_system(language_code) + except (IOError, ValueError) as e: + raise IOError(f"Failed to apply language settings: {e}") from e \ No newline at end of file diff --git a/setup_station/network_setup.py b/setup_station/network_setup.py new file mode 100644 index 0000000..d3f3a36 --- /dev/null +++ b/setup_station/network_setup.py @@ -0,0 +1,439 @@ +""" +Network setup module following the utility class pattern. +""" +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import Gtk, Gdk, GLib, GdkPixbuf +import re +import threading +from time import sleep +from NetworkMgr.net_api import ( + networkdictionary, + connectToSsid, + delete_ssid_wpa_supplicant_config, + nic_status +) +from setup_station.data import css_path, get_text + +cssProvider = Gtk.CssProvider() +cssProvider.load_from_path(css_path) +screen = Gdk.Screen.get_default() +styleContext = Gtk.StyleContext() +styleContext.add_provider_for_screen( + screen, + cssProvider, + Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION +) + + +class NetworkSetup: + """ + Utility class for network setup screen following the utility class pattern. + + Provides interface for detecting and configuring wired and wireless network connections. + """ + # Class variables for UI state + vbox1: Gtk.Box | None = None + network_info: dict | None = None + wire_connection_label: Gtk.Label | None = None + wire_connection_image: Gtk.Image | None = None + wifi_connection_label: Gtk.Label | None = None + wifi_connection_image: Gtk.Image | None = None + connection_box: Gtk.Box | None = None + store: Gtk.ListStore | None = None + window: Gtk.Window | None = None + password: Gtk.Entry | None = None + + @classmethod + def get_model(cls) -> Gtk.Box: + """ + Return the GTK widget model for the network setup interface. + + Uses lazy initialization - creates UI on first call. + + Returns: + Gtk.Box: The main container widget for the network setup interface + """ + if cls.vbox1 is None: + cls.initialize() + return cls.vbox1 + + @staticmethod + def wifi_stat(bar: int) -> str: + """ + Convert WiFi signal strength to icon name. + + Args: + bar: Signal strength percentage + + Returns: + str: Icon name for the signal strength + """ + if bar > 75: + return 'nm-signal-100' + elif bar > 50: + return 'nm-signal-75' + elif bar > 25: + return 'nm-signal-50' + elif bar > 5: + return 'nm-signal-25' + else: + return 'nm-signal-00' + + @classmethod + def update_network_detection(cls) -> None: + """ + Update the network connection status display. + + Checks wired and wireless connections and updates the UI accordingly. + """ + cards = cls.network_info['cards'] + card_list = list(cards.keys()) + r = re.compile("wlan") + wlan_list = list(filter(r.match, card_list)) + wire_list = list(set(card_list).difference(wlan_list)) + cards = cls.network_info['cards'] + if wire_list: + for card in wire_list: + if cards[card]['state']['connection'] == 'Connected': + + wire_text = get_text('Network card connected to the internet') + cls.wire_connection_image.set_from_stock(Gtk.STOCK_YES, 5) + print('Connected True') + break + else: + wire_text = get_text('Network card not connected to the internet') + cls.wire_connection_image.set_from_stock(Gtk.STOCK_NO, 5) + else: + wire_text = get_text('No network card detected') + cls.wire_connection_image.set_from_stock(Gtk.STOCK_NO, 5) + + cls.wire_connection_label.set_label(wire_text) + + if wlan_list: + for wlan_card in wlan_list: + if cards[wlan_card]['state']['connection'] == 'Connected': + wifi_text = get_text('WiFi card detected and connected to an access point') + cls.wifi_connection_image.set_from_stock(Gtk.STOCK_YES, 5) + break + else: + wifi_text = get_text('WiFi card detected but not connected to an access point') + cls.wifi_connection_image.set_from_stock(Gtk.STOCK_NO, 5) + else: + wifi_text = get_text("WiFi card not detected or not supported") + cls.wifi_connection_image.set_from_stock(Gtk.STOCK_NO, 5) + + cls.wifi_connection_label.set_label(wifi_text) + + @classmethod + def initialize(cls) -> None: + """ + Initialize the network setup UI. + + Detects network interfaces and creates the interface for wired/wireless setup. + """ + cls.network_info = networkdictionary() + print(cls.network_info) + cls.vbox1 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, spacing=0) + cls.vbox1.show() + cards = cls.network_info['cards'] + card_list = list(cards.keys()) + r = re.compile("wlan") + wlan_list = list(filter(r.match, card_list)) + wire_list = list(set(card_list).difference(wlan_list)) + + cls.wire_connection_label = Gtk.Label() + cls.wire_connection_label.set_xalign(0.01) + cls.wire_connection_image = Gtk.Image() + cls.wifi_connection_label = Gtk.Label() + cls.wifi_connection_label.set_xalign(0.01) + cls.wifi_connection_image = Gtk.Image() + + if wire_list: + for card in wire_list: + if cards[card]['state']['connection'] == 'Connected': + wire_text = get_text('Network card connected to the internet') + cls.wire_connection_image.set_from_stock(Gtk.STOCK_YES, 5) + print('Connected True') + break + else: + wire_text = get_text('Network card not connected to the internet') + cls.wire_connection_image.set_from_stock(Gtk.STOCK_NO, 5) + else: + wire_text = get_text('No network card detected') + cls.wire_connection_image.set_from_stock(Gtk.STOCK_NO, 5) + + cls.wire_connection_label.set_label(wire_text) + wlan_card = "" + if wlan_list: + for wlan_card in wlan_list: + if cards[wlan_card]['state']['connection'] == 'Connected': + wifi_text = get_text('WiFi card detected and connected to an access point') + cls.wifi_connection_image.set_from_stock(Gtk.STOCK_YES, 5) + break + else: + wifi_text = get_text('WiFi card detected but not connected to an access point') + cls.wifi_connection_image.set_from_stock(Gtk.STOCK_NO, 5) + else: + wifi_text = get_text('WiFi card not detected or not supported') + cls.wifi_connection_image.set_from_stock(Gtk.STOCK_NO, 5) + + cls.wifi_connection_label.set_label(wifi_text) + + cls.connection_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, homogeneous=True, spacing=20) + if wlan_card: + # add a default card variable + sw = Gtk.ScrolledWindow() + sw.set_shadow_type(Gtk.ShadowType.ETCHED_IN) + sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) + cls.store = Gtk.ListStore(GdkPixbuf.Pixbuf, str, str) + for ssid in cls.network_info['cards'][wlan_card]['info']: + ssid_info = cls.network_info['cards'][wlan_card]['info'][ssid] + bar = ssid_info[4] + stat = NetworkSetup.wifi_stat(bar) + pixbuf = Gtk.IconTheme.get_default().load_icon(stat, 32, 0) + cls.store.append([pixbuf, ssid, f'{ssid_info}']) + treeview = Gtk.TreeView() + treeview.set_model(cls.store) + treeview.set_rules_hint(True) + pixbuf_cell = Gtk.CellRendererPixbuf() + pixbuf_column = Gtk.TreeViewColumn(get_text('Stat'), pixbuf_cell) + pixbuf_column.add_attribute(pixbuf_cell, "pixbuf", 0) + pixbuf_column.set_resizable(True) + treeview.append_column(pixbuf_column) + cell = Gtk.CellRendererText() + column = Gtk.TreeViewColumn(get_text('SSID'), cell, text=1) + column.set_sort_column_id(1) + treeview.append_column(column) + tree_selection = treeview.get_selection() + tree_selection.set_mode(Gtk.SelectionMode.SINGLE) + tree_selection.connect("changed", cls.wifi_setup, wlan_card) + sw.add(treeview) + cls.connection_box.pack_start(sw, True, True, 50) + + main_grid = Gtk.Grid() + main_grid.set_row_spacing(10) + main_grid.set_column_spacing(10) + main_grid.set_column_homogeneous(True) + main_grid.set_row_homogeneous(True) + cls.vbox1.pack_start(main_grid, True, True, 10) + main_grid.attach(cls.wire_connection_image, 2, 1, 1, 1) + main_grid.attach(cls.wire_connection_label, 3, 1, 8, 1) + main_grid.attach(cls.wifi_connection_image, 2, 2, 1, 1) + main_grid.attach(cls.wifi_connection_label, 3, 2, 8, 1) + main_grid.attach(cls.connection_box, 1, 4, 10, 5) + + @classmethod + def wifi_setup(cls, tree_selection: Gtk.TreeSelection, wifi_card: str) -> None: + """ + Handle WiFi network selection from the list. + + Args: + tree_selection: TreeSelection containing the selected SSID + wifi_card: Name of the wireless network interface + """ + model, treeiter = tree_selection.get_selected() + if treeiter is not None: + ssid = model[treeiter][1] + ssid_info = cls.network_info['cards'][wifi_card]['info'][ssid] + caps = ssid_info[6] + print(ssid) # added the code to authenticate. + print(ssid_info) + if caps == 'E' or caps == 'ES': + if f'"{ssid}"' in open("/etc/wpa_supplicant.conf").read(): + cls.try_to_connect_to_ssid(ssid, ssid_info, wifi_card) + else: + NetworkSetup.open_wpa_supplicant(ssid) + cls.try_to_connect_to_ssid(ssid, ssid_info, wifi_card) + else: + if f'"{ssid}"' in open('/etc/wpa_supplicant.conf').read(): + cls.try_to_connect_to_ssid(ssid, ssid_info, wifi_card) + else: + cls.authentication(ssid_info, wifi_card, False) + + @classmethod + def add_to_wpa_supplicant(cls, _widget: Gtk.Widget, ssid_info: tuple, card: str) -> None: + """ + Add WiFi credentials to wpa_supplicant config and attempt connection. + + Args: + _widget: Widget that triggered this callback + ssid_info: Tuple containing SSID information + card: Name of the wireless network interface + """ + pwd = cls.password.get_text() + NetworkSetup.setup_wpa_supplicant(ssid_info[0], ssid_info, pwd) + thr = threading.Thread( + target=cls.try_to_connect_to_ssid, + args=(ssid_info[0], ssid_info, card), + daemon=True + ) + thr.start() + cls.window.hide() + + @classmethod + def try_to_connect_to_ssid(cls, ssid: str, ssid_info: tuple, card: str) -> None: + """ + Attempt to connect to a WiFi network. + + Args: + ssid: SSID of the network + ssid_info: Tuple containing SSID information + card: Name of the wireless network interface + """ + if connectToSsid(ssid, card) is False: + delete_ssid_wpa_supplicant_config(ssid) + GLib.idle_add(cls.restart_authentication, ssid_info, card) + else: + for _ in list(range(30)): + if nic_status(card) == 'associated': + cls.network_info = networkdictionary() + print(cls.network_info) + GLib.idle_add(cls.update_network_detection) + break + sleep(1) + else: + delete_ssid_wpa_supplicant_config(ssid) + GLib.idle_add(cls.restart_authentication, ssid_info, card) + return + + @classmethod + def restart_authentication(cls, ssid_info: tuple, card: str) -> None: + """ + Restart authentication after failed connection attempt. + + Args: + ssid_info: Tuple containing SSID information + card: Name of the wireless network interface + """ + cls.authentication(ssid_info, card, True) + + @classmethod + def on_check(cls, widget: Gtk.CheckButton) -> None: + """ + Toggle password visibility in the authentication dialog. + + Args: + widget: CheckButton widget that controls password visibility + """ + if widget.get_active(): + cls.password.set_visibility(True) + else: + cls.password.set_visibility(False) + + @classmethod + def authentication(cls, ssid_info: tuple, card: str, failed: bool) -> str: + """ + Display WiFi authentication dialog. + + Args: + ssid_info: Tuple containing SSID information + card: Name of the wireless network interface + failed: Whether previous authentication attempt failed + + Returns: + str: Status message + """ + cls.window = Gtk.Window() + cls.window.set_title(get_text("WiFi Network Authentication Required")) + cls.window.set_border_width(0) + cls.window.set_size_request(500, 200) + box1 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, spacing=0) + cls.window.add(box1) + box1.show() + box2 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, spacing=10) + box2.set_border_width(10) + box1.pack_start(box2, True, True, 0) + box2.show() + # Creating MBR or GPT drive + if failed: + title = ssid_info[0] + " " + get_text("Wi-Fi Network Authentication failed") + else: + title = get_text("Authentication required by") + " " + ssid_info[0] + " " + get_text("Wi-Fi Network") + label = Gtk.Label(label=f"{title}") + label.set_use_markup(True) + pwd_label = Gtk.Label(label=get_text("Password:")) + cls.password = Gtk.Entry() + cls.password.set_visibility(False) + check = Gtk.CheckButton(label=get_text("Show password")) + check.connect("toggled", cls.on_check) + table = Gtk.Table(1, 2, True) + table.attach(label, 0, 5, 0, 1) + table.attach(pwd_label, 1, 2, 2, 3) + table.attach(cls.password, 2, 4, 2, 3) + table.attach(check, 2, 4, 3, 4) + box2.pack_start(table, False, False, 0) + box2 = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, homogeneous=False, spacing=10) + box2.set_border_width(5) + box1.pack_start(box2, False, True, 0) + box2.show() + # Add create_scheme button + cancel = Gtk.Button(stock=Gtk.STOCK_CANCEL) + cancel.connect("clicked", cls.close) + connect = Gtk.Button(stock=Gtk.STOCK_CONNECT) + connect.connect("clicked", cls.add_to_wpa_supplicant, ssid_info, card) + table = Gtk.Table(1, 2, True) + table.set_col_spacings(10) + table.attach(connect, 4, 5, 0, 1) + table.attach(cancel, 3, 4, 0, 1) + box2.pack_end(table, True, True, 5) + cls.window.show_all() + return 'Done' + + @classmethod + def close(cls, _widget: Gtk.Widget) -> None: + """ + Close the authentication dialog. + + Args: + _widget: Widget that triggered this callback + """ + cls.window.hide() + + @staticmethod + def setup_wpa_supplicant(ssid: str, ssid_info: tuple, pwd: str) -> None: + """ + Write WiFi credentials to wpa_supplicant configuration. + + Args: + ssid: SSID of the network + ssid_info: Tuple containing SSID security information + pwd: Password for the network + """ + if 'RSN' in ssid_info[-1]: + ws = '\nnetwork={' + ws += f'\n ssid="{ssid}"' + ws += '\n key_mgmt=WPA-PSK' + ws += '\n proto=RSN' + ws += f'\n psk="{pwd}"\n' + ws += '}\n' + elif 'WPA' in ssid_info[-1]: + ws = '\nnetwork={' + ws += f'\n ssid="{ssid}"' + ws += '\n key_mgmt=WPA-PSK' + ws += '\n proto=WPA' + ws += f'\n psk="{pwd}"\n' + ws += '}\n' + else: + ws = '\nnetwork={' + ws += f'\n ssid="{ssid}"' + ws += '\n key_mgmt=NONE' + ws += '\n wep_tx_keyidx=0' + ws += f'\n wep_key0={pwd}\n' + ws += '}\n' + with open("/etc/wpa_supplicant.conf", 'a') as wsf: + wsf.writelines(ws) + + @staticmethod + def open_wpa_supplicant(ssid: str) -> None: + """ + Add open (no password) WiFi network to wpa_supplicant configuration. + + Args: + ssid: SSID of the network + """ + ws = '\nnetwork={' + ws += f'\n ssid="{ssid}"' + ws += '\n key_mgmt=NONE\n}\n' + with open("/etc/wpa_supplicant.conf", 'a') as wsf: + wsf.writelines(ws) \ No newline at end of file diff --git a/setup_station/setup_system.py b/setup_station/setup_system.py new file mode 100644 index 0000000..475bdfc --- /dev/null +++ b/setup_station/setup_system.py @@ -0,0 +1,113 @@ +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import Gtk, GLib, Gdk +import threading +from time import sleep +from setup_station.language import Language +from setup_station.keyboard import Keyboard +from setup_station.timezone import TimeZone +from setup_station.add_admin import AddAdminUser +from setup_station.data import css_path, gif_logo, get_text + +cssProvider = Gtk.CssProvider() +cssProvider.load_from_path(css_path) +screen = Gdk.Screen.get_default() +styleContext = Gtk.StyleContext() +styleContext.add_provider_for_screen( + screen, + cssProvider, + Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION +) + + +def update_progress(progress_bar: Gtk.ProgressBar, text: str) -> None: + """ + This function is used to update the progress bar. + :param progress_bar: The progress bar to update. + :param text: The text to display. + """ + new_val = progress_bar.get_fraction() + 0.000003 + progress_bar.set_fraction(new_val) + progress_bar.set_text(text[0:80]) + + +def setup_system(progress_bar: Gtk.ProgressBar) -> None: + """ + This function is used to set up the system. + :param progress_bar: The progress bar to update. + """ + GLib.idle_add(update_progress, progress_bar, get_text("Setting system language")) + Language.save_language() + sleep(1) + + GLib.idle_add(update_progress, progress_bar, get_text("Setting keyboard layout")) + Keyboard.save_keyboard() + sleep(1) + + GLib.idle_add(update_progress, progress_bar, get_text("Setting timezone")) + TimeZone.apply_timezone() + sleep(1) + + GLib.idle_add(update_progress, progress_bar, get_text("Creating admin user")) + AddAdminUser.save_admin_user() + sleep(1) + + GLib.idle_add(update_progress, progress_bar, get_text("Setup complete!")) + sleep(1) + + +class SetupWindow: + + def __init__(self) -> None: + self.vBox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, spacing=0) + self.vBox.show() + label = Gtk.Label(label=get_text("Getting everything ready"), name="Header") + label.set_property("height-request", 50) + self.vBox.pack_start(label, False, False, 0) + + h_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, homogeneous=False, spacing=0, name="install") + h_box.show() + self.vBox.pack_end(h_box, True, True, 0) + v_box2 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, spacing=0) + v_box2.show() + label2 = Gtk.Label(name="sideText") + + label2.set_markup( + get_text("This should not take too long.") + + "\n\n" + + get_text("Don't turn your system off.") + ) + label2.set_justify(Gtk.Justification.LEFT) + label2.set_line_wrap(True) + # label2.set_max_width_chars(10) + label2.set_alignment(0.5, 0.4) + h_box2 = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, homogeneous=False, spacing=0, name="TransBox") + h_box2.show() + h_box.pack_start(h_box2, True, True, 0) + h_box2.pack_start(label2, True, True, 0) + + image = Gtk.Image() + image.set_from_file(gif_logo) + # image.set_size_request(width=256, height=256) + image.show() + h_box.pack_end(image, True, True, 20) + + def get_model(self) -> Gtk.Box: + return self.vBox + + +class SetupProgress: + + def __init__(self) -> None: + self.pbar = Gtk.ProgressBar() + self.pbar.set_show_text(True) + thr = threading.Thread( + target=setup_system, + args=(self.pbar,), + daemon=True + ) + thr.start() + self.pbar.show() + + def get_progressbar(self) -> Gtk.ProgressBar: + return self.pbar diff --git a/setup_station/system_calls.py b/setup_station/system_calls.py new file mode 100644 index 0000000..4087784 --- /dev/null +++ b/setup_station/system_calls.py @@ -0,0 +1,437 @@ +import re +import os +from subprocess import run + +from setup_station.data import pc_sysinstall + + +def replace_pattern(current: str, new: str, file: str) -> None: + """ + Replace pattern in file with proper error handling. + + Args: + current: Pattern to search for (regex) + new: Replacement string + file: Path to file to modify + + Raises: + FileNotFoundError: If file doesn't exist + IOError: If file operations fail + """ + if not os.path.exists(file): + raise FileNotFoundError(f"File not found: {file}") + + try: + # Read file content + with open(file, 'r') as f: + content = f.read() + + # Apply pattern replacement + modified_content = re.sub(current, new, content) + + # Write modified content back + with open(file, 'w') as f: + f.write(modified_content) + + except (IOError, OSError) as e: + raise IOError(f"Failed to modify file {file}: {e}") from e + + +def language_dictionary() -> dict: + """ + Query available system languages from pc-sysinstall. + + Returns: + dict: Dictionary mapping language names to language codes + + Raises: + RuntimeError: If pc-sysinstall command fails + """ + try: + result = run( + [pc_sysinstall, 'query-langs'], + capture_output=True, + text=True, + check=True + ) + except Exception as e: + raise RuntimeError(f"Failed to query languages from pc-sysinstall: {e}") from e + + dictionary = {} + for line in result.stdout.splitlines(): + lang_list = line.rstrip() + lang_name = lang_list.partition(' ')[2] + lang_code = lang_list.partition(' ')[0] + dictionary[lang_name] = lang_code + return dictionary + + +def localize_system(locale: str) -> None: + """ + Apply locale configuration to the system. + + Args: + locale: Locale code (e.g., 'en_US', 'fr_FR') + + Raises: + IOError: If file operations fail + ValueError: If locale is empty + """ + if not locale: + raise ValueError("Locale cannot be empty") + + slick_greeter = "/usr/local/share/xgreeters/slick-greeter.desktop" + gtk_greeter = "/usr/local/share/xgreeters/lightdm-gtk-greeter.desktop" + + try: + replace_pattern('lang=C', f'lang={locale}', '/etc/login.conf') + replace_pattern('en_US', locale, '/etc/profile') + replace_pattern('en_US', locale, '/usr/share/skel/dot.profile') + + if os.path.exists(slick_greeter): + replace_pattern( + 'Exec=slick-greeter', + f'Exec=env LANG={locale}.UTF-8 slick-greeter', + slick_greeter + ) + elif os.path.exists(gtk_greeter): + replace_pattern( + 'Exec=lightdm-gtk-greeter', + f'Exec=env LANG={locale}.UTF-8 lightdm-gtk-greeter', + gtk_greeter + ) + except (IOError, OSError, FileNotFoundError) as e: + raise IOError(f"Failed to localize system with locale '{locale}': {e}") from e + + +def keyboard_dictionary() -> dict: + """ + Query available keyboard layouts and variants from pc-sysinstall. + + Returns: + dict: Dictionary mapping keyboard names to layout/variant info + + Raises: + RuntimeError: If pc-sysinstall command fails + """ + try: + # Get keyboard layouts + result1 = run( + [pc_sysinstall, 'xkeyboard-layouts'], + capture_output=True, + text=True, + check=True + ) + + dictionary = {} + for line in result1.stdout.splitlines(): + keyboard_list = list(filter(None, line.rstrip().split(' '))) + kb_name = keyboard_list[1].strip() + kb_layouts = keyboard_list[0].strip() + kb_variant = None + dictionary[kb_name] = {'layout': kb_layouts, 'variant': kb_variant} + + # Get keyboard variants + result2 = run( + [pc_sysinstall, 'xkeyboard-variants'], + capture_output=True, + text=True, + check=True + ) + + for line in result2.stdout.splitlines(): + xkb_variant = line.rstrip() + kb_name = xkb_variant.partition(':')[2].strip() + keyboard_list = list(filter + (None, xkb_variant.partition(':')[0].split())) + kb_layouts = keyboard_list[1].strip() + kb_variant = keyboard_list[0].strip() + dictionary[kb_name] = {'layout': kb_layouts, 'variant': kb_variant} + return dictionary + except Exception as e: + raise RuntimeError(f"Failed to query keyboard layouts from pc-sysinstall: {e}") from e + + +def keyboard_models() -> dict: + """ + Query available keyboard models from pc-sysinstall. + + Returns: + dict: Dictionary mapping keyboard model names to model codes + + Raises: + RuntimeError: If pc-sysinstall command fails + """ + try: + result = run( + [pc_sysinstall, 'xkeyboard-models'], + capture_output=True, + text=True, + check=True + ) + + dictionary = {} + for line in result.stdout.splitlines(): + kbm_name = line.rstrip().partition(' ')[2] + kbm_code = line.rstrip().partition(' ')[0] + dictionary[kbm_name] = kbm_code + return dictionary + except Exception as e: + raise RuntimeError(f"Failed to query keyboard models from pc-sysinstall: {e}") from e + + +def change_keyboard(kb_layout: str, kb_variant: str = None, kb_model: str = None) -> None: + """ + Change the current X session keyboard layout immediately. + + Args: + kb_layout: Keyboard layout code (e.g., 'us', 'fr', 'de') + kb_variant: Optional keyboard variant + kb_model: Optional keyboard model + + Raises: + RuntimeError: If setxkbmap command fails + """ + try: + if kb_variant is None and kb_model is not None: + run(['setxkbmap', '-layout', kb_layout, '-model', kb_model], check=True) + elif kb_variant is not None and kb_model is None: + run(['setxkbmap', '-layout', kb_layout, '-variant', kb_variant], check=True) + elif kb_variant is not None and kb_model is not None: + run(['setxkbmap', '-layout', kb_layout, '-variant', kb_variant, '-model', kb_model], check=True) + else: + run(['setxkbmap', '-layout', kb_layout], check=True) + except Exception as e: + raise RuntimeError(f"Failed to change keyboard layout: {e}") from e + + +def set_keyboard(kb_layout: str = None, kb_variant: str = None, kb_model: str = None) -> None: + """ + Persistently configure keyboard layout system-wide. + Configures X11 via xorg.conf.d, console keymap, and desktop environment + specific settings (MATE/XFCE). + + Args: + kb_layout: Keyboard layout code (defaults to 'us') + kb_variant: Optional keyboard variant + kb_model: Optional keyboard model (defaults to 'pc104') + + Raises: + IOError: If file operations fail + RuntimeError: If subprocess commands fail + """ + kx_model = kb_model if kb_model else "pc104" + kx_layout = kb_layout if kb_layout else "us" + + try: + # Configure X11 keyboard layout via xorg.conf.d + # This affects X server, lightdm greeter, and all X sessions + xorg_kbd_conf = "/usr/local/etc/X11/xorg.conf.d/00-keyboard.conf" + os.makedirs(os.path.dirname(xorg_kbd_conf), exist_ok=True) + + with open(xorg_kbd_conf, 'w') as f: + f.write('Section "InputClass"\n') + f.write(' Identifier "system-keyboard"\n') + f.write(' MatchIsKeyboard "on"\n') + f.write(f' Option "XkbLayout" "{kx_layout}"\n') + if kb_variant: + f.write(f' Option "XkbVariant" "{kb_variant}"\n') + f.write(f' Option "XkbModel" "{kx_model}"\n') + f.write('EndSection\n') + + # Set console keyboard layout in rc.conf + if kb_layout: + # Map X11 layouts to console keymaps + console_keymap_map = { + 'ca': 'ca-fr.kbd', + 'et': 'ee.kbd', + 'es': 'es.acc.kbd', + 'gb': 'uk.kbd' + } + + console_keymap = console_keymap_map.get(kb_layout, f"{kb_layout}.kbd") + run(['sysrc', f'keymap={console_keymap}'], check=True) + + # Configure MATE keyboard settings + mate_schema = "/usr/local/share/glib-2.0/schemas/org.mate.peripherals-keyboard-xkb.gschema.xml" + if os.path.exists(mate_schema): + override_file = "/usr/local/share/glib-2.0/schemas/92_org.mate.peripherals-keyboard-xkb.kbd.gschema.override" + option = "grp:alt_shift_toggle" + + with open(override_file, 'w') as f: + f.write("[org.mate.peripherals-keyboard-xkb.kbd]\n") + if kb_variant: + f.write(f"layouts=['{kx_layout}\\t{kb_variant}']\n") + else: + f.write(f"layouts=['{kx_layout}']\n") + f.write(f"model='{kx_model}'\n") + f.write(f"options=['{option}']\n") + + # Compile schemas + run(['glib-compile-schemas', '/usr/local/share/glib-2.0/schemas/'], check=True) + + # Configure XFCE keyboard settings + xfce_kb_xml = "/usr/local/etc/xdg/xfce4/xfconf/xfce-perchannel-xml/keyboard-layout.xml" + if os.path.exists(xfce_kb_xml): + replace_pattern('value="us"', f'value="{kx_layout}"', xfce_kb_xml) + if kb_variant: + replace_pattern('value=""', f'value="{kb_variant}"', xfce_kb_xml) + + except (IOError, OSError) as e: + raise IOError(f"Failed to configure keyboard layout: {e}") from e + except Exception as e: + raise RuntimeError(f"Failed to set keyboard configuration: {e}") from e + + +def timezone_dictionary() -> dict: + """ + Query available timezones from pc-sysinstall. + + Returns: + dict: Dictionary mapping continents to lists of cities + + Raises: + RuntimeError: If pc-sysinstall command fails + """ + try: + result = run( + [pc_sysinstall, 'list-tzones'], + capture_output=True, + text=True, + check=True + ) + + dictionary = {} + for zone in result.stdout.splitlines(): + zone_list = zone.partition(':')[0].rstrip().split('/') + if len(zone_list) < 2: + continue + + continent = zone_list[0] + city = '/'.join(zone_list[1:]) + dictionary.setdefault(continent, []).append(city) + return dictionary + except Exception as e: + raise RuntimeError(f"Failed to query timezones from pc-sysinstall: {e}") from e + + +def set_timezone(timezone: str) -> None: + """ + Set the system timezone by copying the appropriate zoneinfo file. + + Args: + timezone: Timezone string (e.g., 'America/New_York', 'Europe/London') + + Raises: + ValueError: If timezone is invalid, contains path traversal, or not found + RuntimeError: If timezone copy command fails + """ + if not timezone: + raise ValueError("Timezone cannot be empty") + + # Validate timezone doesn't contain path traversal or absolute paths + if '..' in timezone or timezone.startswith('/'): + raise ValueError(f"Invalid timezone: '{timezone}'. Path traversal not allowed.") + + # Validate timezone format (continent/city or continent/region/city) + import re + if not re.match(r'^[A-Za-z_]+(/[A-Za-z_+-]+)+$', timezone): + raise ValueError(f"Invalid timezone format: '{timezone}'. Expected format: Continent/City") + + zoneinfo_path = f"/usr/share/zoneinfo/{timezone}" + localtime_path = "/etc/localtime" + + if not os.path.exists(zoneinfo_path): + raise ValueError(f"Timezone '{timezone}' not found in /usr/share/zoneinfo/") + + try: + run(['cp', zoneinfo_path, localtime_path], check=True) + except Exception as e: + raise RuntimeError(f"Failed to set timezone '{timezone}': {e}") from e + + +def set_admin_user(username: str, name: str, password: str, shell: str, homedir: str, hostname: str) -> None: + """ + Create admin user and set passwords securely. + + Args: + username: Username for the admin account (alphanumeric, underscore, dash) + name: Full name of the user + password: Password for both root and admin user + shell: Path to the user's shell (must exist in /etc/shells) + homedir: Home directory path (no path traversal) + hostname: System hostname (valid hostname format) + + Raises: + ValueError: If input validation fails + subprocess.CalledProcessError: If any command fails + + Note: Password is passed via stdin to avoid exposure in process list. + """ + import re + + # Validate username format (alphanumeric, underscore, dash, starts with letter or underscore) + if not username or not re.match(r'^[a-z_][a-z0-9_-]*$', username, re.IGNORECASE): + raise ValueError(f"Invalid username format: '{username}'. Must start with letter/underscore and contain only alphanumeric, underscore, or dash.") + + # Validate username length + if len(username) > 32: + raise ValueError(f"Username too long: '{username}'. Maximum 32 characters.") + + # Validate name is not empty + if not name or not name.strip(): + raise ValueError("Full name cannot be empty") + + # Validate password is not empty + if not password: + raise ValueError("Password cannot be empty") + + # Validate shell exists in /etc/shells + if shell: + try: + with open('/etc/shells', 'r') as f: + valid_shells = [line.strip() for line in f if line.strip() and not line.startswith('#')] + if shell not in valid_shells: + raise ValueError(f"Invalid shell: '{shell}'. Must be listed in /etc/shells") + except FileNotFoundError: + pass # /etc/shells might not exist, let pw command handle it + + # Validate homedir path (no path traversal) + if homedir and ('..' in homedir or not homedir.startswith('/')): + raise ValueError(f"Invalid home directory path: '{homedir}'. Must be absolute path without '..'") + + # Validate hostname is not empty + if not hostname or not hostname.strip(): + raise ValueError("Hostname cannot be empty") + + # Validate hostname format (RFC 1123) + if not re.match(r'^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?(\.[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$', hostname, re.IGNORECASE): + raise ValueError(f"Invalid hostname format: '{hostname}'. Must follow RFC 1123 hostname rules.") + + # Set Root user password (password read from stdin with -h 0) + run( + ['pw', 'usermod', '-n', 'root', '-h', '0'], + input=password, + text=True, + check=True + ) + + # Create admin user with password from stdin + run( + [ + 'pw', 'useradd', username, + '-c', name, + '-h', '0', + '-s', shell, + '-m', + '-d', homedir, + '-G', 'wheel,operator' + ], + input=password, + text=True, + check=True + ) + + # Set hostname + run(['sysrc', f'hostname={hostname}'], check=True) + run(['hostname', hostname], check=True) diff --git a/setup_station/timezone.py b/setup_station/timezone.py new file mode 100755 index 0000000..5f24e6c --- /dev/null +++ b/setup_station/timezone.py @@ -0,0 +1,175 @@ +""" +Timezone configuration module following the utility class pattern. +""" +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import Gtk, Gdk +import os +from setup_station.system_calls import timezone_dictionary +from setup_station.data import ( + SetupData, + tmp, + css_path, + get_text +) +from setup_station.window import Window + +tzdictionary = timezone_dictionary() + +cssProvider = Gtk.CssProvider() +cssProvider.load_from_path(css_path) +screen = Gdk.Screen.get_default() +styleContext = Gtk.StyleContext() +styleContext.add_provider_for_screen( + screen, + cssProvider, + Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION +) + + +class TimeZone: + """ + Utility class for the timezone selection screen following the utility class pattern. + + This class provides a GTK+ interface for timezone selection including: + - Continent selection from available continents + - City selection based on selected continent + - Integration with SetupData for persistent configuration + - Two-panel selection interface for easy navigation + + The class follows a utility pattern with class methods and variables for state management, + designed to integrate with the main application for navigation flow. + """ + # Class variables instead of instance variables + vbox1: Gtk.Box | None = None + continent: str | None = None + city: str | None = None + continenttreeView: Gtk.TreeView | None = None + citytreeView: Gtk.TreeView | None = None + city_store: Gtk.TreeStore | None = None + continenttree_selection: Gtk.TreeSelection | None = None + + @classmethod + def continent_columns(cls, treeView: Gtk.TreeView) -> None: + """Setup the continent column in the tree view.""" + cell = Gtk.CellRendererText() + column = Gtk.TreeViewColumn(None, cell, text=0) + column_header = Gtk.Label(label='' + get_text('Continent') + '') + column_header.set_use_markup(True) + column_header.show() + column.set_widget(column_header) + column.set_sort_column_id(0) + treeView.append_column(column) + + @classmethod + def city_columns(cls, treeView: Gtk.TreeView) -> None: + """Setup the city column in the tree view.""" + cell = Gtk.CellRendererText() + column = Gtk.TreeViewColumn(None, cell, text=0) + column_header = Gtk.Label(label='' + get_text('City') + '') + column_header.set_use_markup(True) + column_header.show() + column.set_widget(column_header) + column.set_sort_column_id(0) + treeView.append_column(column) + + @classmethod + def continent_selection(cls, tree_selection: Gtk.TreeSelection) -> None: + """Handle continent selection from the tree view.""" + model, treeiter = tree_selection.get_selected() + if cls.city_store: + cls.city_store.clear() + if treeiter is not None: + value = model[treeiter][0] + cls.continent = value + if cls.city_store: + for line in tzdictionary[cls.continent]: + cls.city_store.append(None, [line]) + if cls.citytreeView: + cls.citytreeView.set_cursor(0) + + @classmethod + def city_selection(cls, tree_selection: Gtk.TreeSelection) -> None: + """Handle city selection from the tree view.""" + model, treeiter = tree_selection.get_selected() + if treeiter is not None: + value = model[treeiter][0] + cls.city = value + # Save to SetupData + if cls.continent and cls.city: + SetupData.timezone = f'{cls.continent}/{cls.city}' + + @classmethod + def apply_timezone(cls) -> None: + """ + Apply timezone configuration to the system. + + Raises: + ValueError: If no timezone selected or timezone is invalid + RuntimeError: If timezone configuration fails + """ + from setup_station.system_calls import set_timezone + if not SetupData.timezone: + raise ValueError("No timezone selected. Please select a continent and city.") + set_timezone(SetupData.timezone) + + @classmethod + def _initialize_ui(cls) -> None: + """Initialize the user interface components.""" + cls.vbox1 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, spacing=0) + cls.vbox1.show() + + box2 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, homogeneous=False, spacing=10) + box2.set_border_width(10) + cls.vbox1.pack_start(box2, True, True, 0) + box2.show() + + table = Gtk.Table(1, 2, True) + box2.pack_start(table, False, False, 0) + hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, homogeneous=False, spacing=10) + hbox.set_border_width(5) + box2.pack_start(hbox, True, True, 5) + hbox.show() + + # Continent selection + sw = Gtk.ScrolledWindow() + sw.set_shadow_type(Gtk.ShadowType.ETCHED_IN) + sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) + store = Gtk.TreeStore(str) + for line in tzdictionary: + store.append(None, [line]) + cls.continenttreeView = Gtk.TreeView(store) + cls.continenttreeView.set_model(store) + cls.continenttreeView.set_rules_hint(True) + cls.continent_columns(cls.continenttreeView) + cls.continenttree_selection = cls.continenttreeView.get_selection() + cls.continenttree_selection.set_mode(Gtk.SelectionMode.SINGLE) + cls.continenttree_selection.connect("changed", cls.continent_selection) + sw.add(cls.continenttreeView) + sw.show() + hbox.pack_start(sw, True, True, 5) + + # City selection + sw = Gtk.ScrolledWindow() + sw.set_shadow_type(Gtk.ShadowType.ETCHED_IN) + sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) + cls.city_store = Gtk.TreeStore(str) + cls.citytreeView = Gtk.TreeView(cls.city_store) + cls.citytreeView.set_model(cls.city_store) + cls.citytreeView.set_rules_hint(True) + cls.city_columns(cls.citytreeView) + tree_selection = cls.citytreeView.get_selection() + tree_selection.set_mode(Gtk.SelectionMode.SINGLE) + tree_selection.connect("changed", cls.city_selection) + sw.add(cls.citytreeView) + sw.show() + hbox.pack_start(sw, True, True, 5) + + @classmethod + def get_model(cls) -> Gtk.Box: + """Get the main widget for this screen.""" + if cls.vbox1 is None: + cls._initialize_ui() + if cls.continenttreeView: + cls.continenttreeView.set_cursor(1) + return cls.vbox1 diff --git a/setup_station/window.py b/setup_station/window.py new file mode 100644 index 0000000..63934b5 --- /dev/null +++ b/setup_station/window.py @@ -0,0 +1,102 @@ +""" +Window Module. + +This module provides a singleton wrapper around GTK Window to provide +a consistent interface for the main application window. +""" +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import Gtk + + +class Window: + """ + Singleton wrapper for GTK Window. + + Provides a class-based interface to a single GTK Window instance + that can be accessed throughout the application. + """ + window: Gtk.Window = Gtk.Window() + + @classmethod + def connect(cls, signal: str, callback) -> int: + """Connect a signal handler to the window. + + Args: + signal: Signal name to connect to + callback: Callback function to invoke + + Returns: + Connection ID + """ + return cls.window.connect(signal, callback) + + @classmethod + def set_border_width(cls, width: int) -> None: + """Set the border width of the window. + + Args: + width: Border width in pixels + """ + return cls.window.set_border_width(width) + + @classmethod + def set_default_size(cls, width: int, height: int) -> None: + """Set the default size of the window. + + Args: + width: Default width in pixels + height: Default height in pixels + """ + return cls.window.set_default_size(width, height) + + @classmethod + def set_size_request(cls, width: int, height: int) -> None: + """Set the size request of the window. + + Args: + width: Requested width in pixels + height: Requested height in pixels + """ + return cls.window.set_size_request(width, height) + + @classmethod + def set_title(cls, title: str) -> None: + """Set the window title. + + Args: + title: Window title string + """ + return cls.window.set_title(title) + + @classmethod + def set_icon_from_file(cls, filename: str) -> None: + """Set the window icon from a file. + + Args: + filename: Path to icon file + """ + return cls.window.set_icon_from_file(filename) + + @classmethod + def add(cls, widget: Gtk.Widget) -> None: + """Add a widget to the window. + + Args: + widget: Widget to add + """ + return cls.window.add(widget) + + @classmethod + def show_all(cls) -> None: + """Show the window and all its children.""" + return cls.window.show_all() + + @classmethod + def get_window(cls) -> Gtk.Window: + """Get the underlying GTK Window instance. + + Returns: + The GTK Window instance + """ + return cls.window \ No newline at end of file diff --git a/src/disk.png b/src/disk.png new file mode 100644 index 0000000..a588c91 Binary files /dev/null and b/src/disk.png differ diff --git a/src/ghostbsd-style.css b/src/ghostbsd-style.css new file mode 100644 index 0000000..e77ad30 --- /dev/null +++ b/src/ghostbsd-style.css @@ -0,0 +1,20 @@ +#install { + background-image: url("/usr/local/lib/setup-station/image/installation.jpg"); + background-size: cover; +} + +#sideText { + color: #F9F9F9; + font-weight:bold; + font-size: 14px; +} + +#TransBox { + background-color: rgba(0, 0, 0, 0.6) +} + +#Header { + color: #F9F9F9; + background-color: #282828; + font-size: 22px; +} diff --git a/src/image/G_logo.gif b/src/image/G_logo.gif new file mode 100644 index 0000000..89f3967 Binary files /dev/null and b/src/image/G_logo.gif differ diff --git a/src/image/disk.png b/src/image/disk.png new file mode 100644 index 0000000..a588c91 Binary files /dev/null and b/src/image/disk.png differ diff --git a/src/image/install-gbsd.png b/src/image/install-gbsd.png new file mode 100644 index 0000000..5748e1c Binary files /dev/null and b/src/image/install-gbsd.png differ diff --git a/src/image/install-gbsd.svg b/src/image/install-gbsd.svg new file mode 100644 index 0000000..5112bda --- /dev/null +++ b/src/image/install-gbsd.svg @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/image/install.png b/src/image/install.png new file mode 100644 index 0000000..bad5cd0 Binary files /dev/null and b/src/image/install.png differ diff --git a/src/image/installation.jpg b/src/image/installation.jpg new file mode 100644 index 0000000..26a5feb Binary files /dev/null and b/src/image/installation.jpg differ diff --git a/src/image/laptop.png b/src/image/laptop.png new file mode 100644 index 0000000..0723434 Binary files /dev/null and b/src/image/laptop.png differ diff --git a/src/image/logo.png b/src/image/logo.png new file mode 100644 index 0000000..c8f4353 Binary files /dev/null and b/src/image/logo.png differ diff --git a/src/laptop.png b/src/laptop.png new file mode 100644 index 0000000..0723434 Binary files /dev/null and b/src/laptop.png differ diff --git a/src/setup-station.desktop b/src/setup-station.desktop new file mode 100755 index 0000000..7ede3b1 --- /dev/null +++ b/src/setup-station.desktop @@ -0,0 +1,12 @@ +#!/usr/bin/env xdg-open + +[Desktop Entry] +Version=1.0 +Terminal=false +Type=Application +Categories=GTK;System; +NoDisplay=true +Exec=setup-station +Name=Setup GhostBSD +Comment=GhostBSD post-installation setup utility +Icon=/usr/local/lib/setup-station/image/install-gbsd.png