From e28e2c7c2f66ba192f3cf40b7042fd03fa223ffe Mon Sep 17 00:00:00 2001 From: retrozinndev Date: Wed, 23 Apr 2025 19:30:37 -0300 Subject: [PATCH] :globe_with_meridians: ags(i18n): translate control-center pages --- ags/i18n/intl.ts | 7 +-- ags/i18n/lang/en_US.ts | 37 ++++++++++++++-- ags/i18n/lang/pt_BR.ts | 37 ++++++++++++++-- ags/i18n/struct.ts | 43 ++++++++++++++++--- ags/widget/control-center/pages/Bluetooth.ts | 17 +++++--- ags/widget/control-center/pages/Mixer.ts | 5 ++- ags/widget/control-center/pages/Network.ts | 12 +++--- ags/widget/control-center/pages/NightLight.ts | 9 ++-- ags/widget/control-center/tiles/Network.ts | 18 ++++---- 9 files changed, 139 insertions(+), 46 deletions(-) diff --git a/ags/i18n/intl.ts b/ags/i18n/intl.ts index efd04a3..c1bcaea 100644 --- a/ags/i18n/intl.ts +++ b/ags/i18n/intl.ts @@ -1,12 +1,9 @@ import { GLib } from "astal"; -import en_US from "./lang/en_US"; -import pt_BR from "./lang/pt_BR"; - const i18nKeys = { - "en_US": en_US, - "pt_BR": pt_BR + "en_US": (await import("./lang/en_US")).default, + "pt_BR": (await import("./lang/pt_BR")).default }; const languages: Array = Object.keys(i18nKeys); diff --git a/ags/i18n/lang/en_US.ts b/ags/i18n/lang/en_US.ts index 7b2a674..1f948e5 100644 --- a/ags/i18n/lang/en_US.ts +++ b/ags/i18n/lang/en_US.ts @@ -5,6 +5,13 @@ export default { cancel: "Cancel", accept: "Ok", + devices: "Devices", + others: "Others", + + connected: "Connected", + disconnected: "Disconnected", + unknown: "Unknown", + connecting: "Connecting", bar: { apps: { @@ -19,10 +26,6 @@ export default { network: { network: "Network", - connected: "Connected", - disconnected: "Disconnected", - unknown: "Unknown", - connecting: "Connecting", wireless: "Wireless", wired: "Wired" }, @@ -38,6 +41,32 @@ export default { title: "Night Light", default_desc: "Fidelity" } + }, + pages: { + more_settings: "More settings", + mixer: { + title: "Mixer", + description: "Control per-application volume" + }, + night_light: { + title: "Night Light", + description: "Control Night Light and Gamma filters", + gamma: "Gamma", + temperature: "Temperature" + }, + bluetooth: { + title: "Bluetooth", + description: "Manage Bluetooth devices", + new_devices: "New devices", + adapters: "Adapters", + paired_devices: "Paired Devices", + start_discovering: "Start discovering", + stop_discovering: "Stop discovering" + }, + network: { + title: "Network", + interface: "Interface" + } } }, ask_popup: { diff --git a/ags/i18n/lang/pt_BR.ts b/ags/i18n/lang/pt_BR.ts index 359a463..423359c 100644 --- a/ags/i18n/lang/pt_BR.ts +++ b/ags/i18n/lang/pt_BR.ts @@ -5,6 +5,13 @@ export default { cancel: "Cancelar", accept: "Ok", + devices: "Dispositivos", + others: "Outros", + + connected: "Conectado", + disconnected: "Desconectado", + unknown: "Desconhecido", + connecting: "Conectando", bar: { apps: { @@ -19,10 +26,6 @@ export default { network: { network: "Rede", - connected: "Conectado", - disconnected: "Desconectado", - unknown: "Desconhecido", - connecting: "Conectando", wireless: "Wi-Fi", wired: "Cabeada" }, @@ -38,6 +41,32 @@ export default { title: "Luz Noturna", default_desc: "Fidelidade" } + }, + pages: { + more_settings: "Mais configurações", + mixer: { + title: "Mixer de Volume", + description: "Controle o volume dos aplicativos" + }, + night_light: { + title: "Luz Noturna", + description: "Controle os filtros de Luz Noturna e Gama", + temperature: "Temperatura", + gamma: "Gama" + }, + bluetooth: { + title: "Bluetooth", + description: "Gerencie dispositivos Bluetooth", + new_devices: "Novos Dispositivos", + adapters: "Adaptadores", + paired_devices: "Dispositivos Pareados", + start_discovering: "Começar a procurar dispositivos", + stop_discovering: "Parar de procurar dispositivos" + }, + network: { + title: "Rede", + interface: "Interface" + } } }, ask_popup: { diff --git a/ags/i18n/struct.ts b/ags/i18n/struct.ts index 20903de..4668723 100644 --- a/ags/i18n/struct.ts +++ b/ags/i18n/struct.ts @@ -2,7 +2,15 @@ export type i18nStruct = { language: string, cancel: string, - accept: string + accept: string, + + connected: string, + disconnected: string, + connecting: string, + unknown: string, + + devices: string, + others: string, bar: { apps: { @@ -17,17 +25,13 @@ export type i18nStruct = { network: { network: string, - connected: string, - disconnected: string, - unknown: string, - connecting: string, wireless: string, wired: string }, recording: { title: string, disabled_desc: string, - enabled_desc: string, + enabled_desc: string }, dnd: { title: string @@ -36,6 +40,33 @@ export type i18nStruct = { title: string, default_desc: string } + }, + pages: { + more_settings: string, + + mixer: { + title: string, + description: string + }, + network: { + title: string, + interface: string + }, + bluetooth: { + title: string, + description: string, + adapters: string, + new_devices: string, + paired_devices: string, + start_discovering: string, + stop_discovering: string + }, + night_light: { + title: string, + description: string, + temperature: string, + gamma: string + } } }, ask_popup: { diff --git a/ags/widget/control-center/pages/Bluetooth.ts b/ags/widget/control-center/pages/Bluetooth.ts index cb56574..d981c53 100644 --- a/ags/widget/control-center/pages/Bluetooth.ts +++ b/ags/widget/control-center/pages/Bluetooth.ts @@ -3,12 +3,13 @@ import { Gtk, Widget } from "astal/gtk3"; import AstalBluetooth from "gi://AstalBluetooth"; import { Page, PageButton } from "./Page"; import { Separator, SeparatorProps } from "../../Separator"; +import { tr } from "../../../i18n/intl"; export const BluetoothPage: (() => Page) = () => new Page({ id: "bluetooth", - title: "Bluetooth", - description: "Manage your Bluetooth devices and add new ones.", + title: tr("control_center.pages.bluetooth.title"), + description: tr("control_center.pages.bluetooth.description"), className: "bluetooth", headerButtons: [ new Widget.Button({ @@ -16,7 +17,9 @@ export const BluetoothPage: (() => Page) = () => new Page({ label: bind(AstalBluetooth.get_default().adapter, "discovering").as((discovering) => !discovering ? '󰑓' : '󰙦'), tooltipText: bind(AstalBluetooth.get_default().adapter, "discovering").as((discovering) => - !discovering ? "Start discovering" : "Stop discovery"), + !discovering ? + tr("control_center.pages.bluetooth.start_discovering") + : tr("control_center.pages.bluetooth.stop_discovering")), onClick: () => { if(AstalBluetooth.get_default().adapter.discovering) { stopBluetoothDevicesWatch(); @@ -36,7 +39,7 @@ export const BluetoothPage: (() => Page) = () => new Page({ children: bind(AstalBluetooth.get_default(), "adapters").as((adapters) => [ new Widget.Label({ className: "sub-header", - label: "Adapters" + label: tr("control_center.pages.bluetooth.adapters") } as Widget.LabelProps), ...adapters.map(adapter => PageButton({ @@ -64,7 +67,7 @@ export const BluetoothPage: (() => Page) = () => new Page({ return [ new Widget.Label({ className: "sub-header", - label: "Paired Devices", + label: tr("control_center.pages.bluetooth.paired_devices"), xalign: 0, } as Widget.LabelProps), ...connectedDevices.map((dev: AstalBluetooth.Device) => DeviceWidget(dev)) @@ -82,7 +85,7 @@ export const BluetoothPage: (() => Page) = () => new Page({ return [ new Widget.Label({ className: "sub-header", - label: "Others", + label: tr("control_center.pages.bluetooth.new_devices"), xalign: 0 } as Widget.LabelProps), ...discoveredDevices.map((dev: AstalBluetooth.Device) => DeviceWidget(dev)) @@ -96,7 +99,7 @@ export const BluetoothPage: (() => Page) = () => new Page({ } as SeparatorProps), new Widget.Button({ className: "more", - label: "More settings", + label: tr("control_center.pages.more_settings"), setup: (self) => self.set_alignment(0, 0.5) } as Widget.ButtonProps) ] diff --git a/ags/widget/control-center/pages/Mixer.ts b/ags/widget/control-center/pages/Mixer.ts index 8662d36..4f82640 100644 --- a/ags/widget/control-center/pages/Mixer.ts +++ b/ags/widget/control-center/pages/Mixer.ts @@ -4,12 +4,13 @@ import { Gtk, Widget } from "astal/gtk3"; import AstalWp from "gi://AstalWp"; import { getAppIcon } from "../../../scripts/apps"; import { Wireplumber } from "../../../scripts/volume"; +import { tr } from "../../../i18n/intl"; export function PageMixer(): Page { return new Page({ id: "mixer", - title: "Mixer", - description: "Control per-application volume!", + title: tr("control_center.pages.mixer.title"), + description: tr("control_center.pages.mixer.description"), children: bind(Wireplumber.getWireplumber(), "endpoints").as((endpoints) => [ ...endpoints.filter((ep) => ep.mediaClass === AstalWp.MediaClass.AUDIO_STREAM || ep.mediaClass === AstalWp.MediaClass.VIDEO_STREAM).map((ep) => diff --git a/ags/widget/control-center/pages/Network.ts b/ags/widget/control-center/pages/Network.ts index ffb9090..e7432f4 100644 --- a/ags/widget/control-center/pages/Network.ts +++ b/ags/widget/control-center/pages/Network.ts @@ -6,10 +6,11 @@ import NM from "gi://NM"; import { Separator, SeparatorProps } from "../../Separator"; import { Windows } from "../../../windows"; import AstalHyprland from "gi://AstalHyprland?version=0.1"; +import { tr } from "../../../i18n/intl"; export const PageNetwork: (() => Page) = () => new Page({ id: "network", - title: "Network", + title: tr("control_center.pages.network.title"), className: "network", headerButtons: [ new Widget.Button({ @@ -33,7 +34,7 @@ export const PageNetwork: (() => Page) = () => new Page({ return [ new Widget.Label({ - label: "Devices", + label: tr("devices"), xalign: 0, className: "sub-header", } as Widget.LabelProps), @@ -43,7 +44,8 @@ export const PageNetwork: (() => Page) = () => new Page({ deviceType === NM.DeviceType.WIFI ? "network-wireless-symbolic" : "network-wired-symbolic"), - title: bind(dev, "interface").as(iface => iface ?? "Interface"), + title: bind(dev, "interface").as(iface => iface ?? + tr("control_center.pages.network.interface")), extraButtons: [ new Widget.Button({ image: new Widget.Icon({ @@ -83,7 +85,7 @@ export const PageNetwork: (() => Page) = () => new Page({ new Widget.Label({ className: "ssid", halign: Gtk.Align.START, - label: ap.ssid.toArray().toString() + label: ap.ssid.get_data()?.toString() ?? "Wi-Fi" } as Widget.LabelProps), new Widget.Label({ className: "status", @@ -98,7 +100,7 @@ export const PageNetwork: (() => Page) = () => new Page({ size: .2 } as SeparatorProps), new Widget.Button({ - label: "More settings", + label: tr("control_center.pages.more_settings"), setup: (self) => self.set_alignment(0, 0.5), onClick: () => { Windows.close("control-center"); diff --git a/ags/widget/control-center/pages/NightLight.ts b/ags/widget/control-center/pages/NightLight.ts index 5946db1..8c54223 100644 --- a/ags/widget/control-center/pages/NightLight.ts +++ b/ags/widget/control-center/pages/NightLight.ts @@ -3,16 +3,17 @@ import { Page, PageProps } from "./Page"; import { bind } from "astal"; import { NightLight } from "../../../scripts/nightlight"; import { addSliderMarksFromMinMax } from "../../../scripts/widget-utils"; +import { tr } from "../../../i18n/intl"; export const PageNightLight: (() => Page) = () => new Page({ id: "night-light", - title: "Night Light", - description: "Control night light and gamma filters", + title: tr("control_center.pages.night_light.title"), + description: tr("control_center.pages.night_light.description"), className: "night-light", children: [ new Widget.Label({ className: "sub-header", - label: "Temperature (blue-light filter)", + label: tr("control_center.pages.night_light.temperature"), xalign: 0 } as Widget.LabelProps), new Widget.Slider({ @@ -30,7 +31,7 @@ export const PageNightLight: (() => Page) = () => new Page({ } as Widget.SliderProps), new Widget.Label({ className: "sub-header", - label: "Gamma (light filter)", + label: tr("control_center.pages.night_light.gamma"), css: "margin-top: 6px;", xalign: 0 } as Widget.LabelProps), diff --git a/ags/widget/control-center/tiles/Network.ts b/ags/widget/control-center/tiles/Network.ts index 2f129c2..62a2ef0 100644 --- a/ags/widget/control-center/tiles/Network.ts +++ b/ags/widget/control-center/tiles/Network.ts @@ -15,18 +15,18 @@ export const TileNetwork = () => new Widget.Box({ (primary: AstalNetwork.Primary, wired: AstalNetwork.Wired, wifi: AstalNetwork.Wifi) => { if(primary === AstalNetwork.Primary.WIFI) { return Tile({ - title: tr("control_center.tiles.network.wireless") || "Wireless", + title: tr("control_center.tiles.network.wireless"), description: Variable.derive( [ bind(wifi, "ssid"), bind(wifi, "internet") ], (ssid: string, internet: AstalNetwork.Internet) => ssid ? ssid : (() => { switch(internet) { case AstalNetwork.Internet.CONNECTED: - return tr("control_center.tiles.network.connected") || "Connected"; + return tr("connected"); case AstalNetwork.Internet.DISCONNECTED: - return tr("control_center.tiles.network.disconnected") || "Disconnected"; + return tr("disconnected"); case AstalNetwork.Internet.CONNECTING: - return tr("control_center.tiles.network.connecting") + "..." || "Connecting..."; + return tr("connecting") + "..."; } })() )(), @@ -44,11 +44,11 @@ export const TileNetwork = () => new Widget.Box({ description: bind(wired, "internet").as((internet: AstalNetwork.Internet) => { switch(internet) { case AstalNetwork.Internet.CONNECTED: - return tr("control_center.tiles.network.connected") || "Connected"; + return tr("connected"); case AstalNetwork.Internet.DISCONNECTED: - return tr("control_center.tiles.network.disconnected") || "Disconnected"; + return tr("disconnected"); case AstalNetwork.Internet.CONNECTING: - return tr("control_center.tiles.network.connecting") + "..." || "Connecting..."; + return tr("connecting") + "..."; } }), onToggledOn: () => execAsync("nmcli n on"), @@ -73,8 +73,8 @@ export const TileNetwork = () => new Widget.Box({ } return Tile({ - title: tr("control_center.tiles.network.network") || "Network", - description: tr("control_center.tiles.network.disconnected") || "Disconnected", + title: tr("control_center.tiles.network.network"), + description: tr("disconnected"), onToggledOn: () => execAsync("nmcli n on"), onToggledOff: () => execAsync("nmcli n off"), onClickMore: () => TilesPages?.toggle(PageNetwork()),