commit 5a0bd1e16c4e75a916ccaaa494d0259da4522b82
parent 5f8eb389540f03902543101e3be5ae2a2f1d802b
Author: triesap <tyson@radroots.org>
Date: Fri, 17 Apr 2026 18:29:20 +0000
i18n: rewrite the radroots_app shell copy contract
- replace the bootstrap home and settings key registry with the current radroots_app shell vocabulary
- localize the native menu labels, placeholder account copy, settings strings, and about placeholders
- trim the desktop launcher and shared text helpers to consume the new typed localization surface
- verify cargo test -p radroots_app_i18n and cargo check -p radroots_app
Diffstat:
8 files changed, 134 insertions(+), 260 deletions(-)
diff --git a/crates/launchers/desktop/src/menus.rs b/crates/launchers/desktop/src/menus.rs
@@ -1,19 +1,19 @@
use gpui::{
- App, AppContext, Bounds, KeyBinding, Menu, MenuItem, WindowBounds, WindowOptions, actions, px,
- size,
+ App, AppContext, Bounds, KeyBinding, Menu, MenuItem, SystemMenuType, WindowBounds,
+ WindowOptions, actions, px, size,
};
use radroots_app_i18n::{AppTextKey, app_text};
use radroots_app_ui::APP_UI_THEME;
use crate::window::{SettingsPanelViewKey, SettingsWindowView, settings_titlebar_options};
-actions!(radroots_app, [OpenSettingsWindow, QuitApp]);
+actions!(radroots_app, [OpenAboutWindow, QuitApp]);
pub fn install_native_app_menu(cx: &mut App) {
- cx.on_action(|_: &OpenSettingsWindow, cx| open_settings_window(cx));
+ cx.on_action(|_: &OpenAboutWindow, cx| open_settings_window(cx));
cx.on_action(|_: &QuitApp, cx| cx.quit());
cx.bind_keys([
- KeyBinding::new("cmd-,", OpenSettingsWindow, None),
+ KeyBinding::new("cmd-,", OpenAboutWindow, None),
KeyBinding::new("cmd-q", QuitApp, None),
]);
@@ -21,7 +21,9 @@ pub fn install_native_app_menu(cx: &mut App) {
cx.set_menus(vec![Menu {
name: app_name.into(),
items: vec![
- MenuItem::action(app_text(AppTextKey::MenuSettings), OpenSettingsWindow),
+ MenuItem::action(app_text(AppTextKey::MenuAbout), OpenAboutWindow),
+ MenuItem::separator(),
+ MenuItem::os_submenu(app_text(AppTextKey::MenuServices), SystemMenuType::Services),
MenuItem::separator(),
MenuItem::action(app_text(AppTextKey::MenuQuit), QuitApp),
],
diff --git a/crates/launchers/desktop/src/window.rs b/crates/launchers/desktop/src/window.rs
@@ -6,13 +6,10 @@ use radroots_app_core::AppRuntimeSnapshot;
use radroots_app_i18n::AppTextKey;
use radroots_app_ui::{
APP_UI_THEME, LabelValueRow, app_card, app_shared_text, app_window_shell, label_value_list,
- runtime_metadata_rows, section_divider, settings_about_build_rows, settings_about_status_rows,
- settings_account_profile_rows, settings_account_runtime_rows, settings_preferences_device_rows,
- settings_preferences_general_rows, utility_title_row,
+ runtime_metadata_rows, section_divider, settings_about_status_rows,
+ settings_account_profile_rows, settings_preferences_general_rows, utility_title_row,
};
-use crate::menus::OpenSettingsWindow;
-
pub fn home_titlebar_options() -> gpui::TitlebarOptions {
gpui::TitlebarOptions {
title: None,
@@ -32,7 +29,7 @@ pub fn settings_titlebar_options() -> gpui::TitlebarOptions {
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub enum SettingsPanelViewKey {
#[default]
- Accounts,
+ Account,
Settings,
About,
}
@@ -40,23 +37,14 @@ pub enum SettingsPanelViewKey {
impl SettingsPanelViewKey {
fn label_key(self) -> AppTextKey {
match self {
- Self::Accounts => AppTextKey::SettingsNavAccounts,
+ Self::Account => AppTextKey::SettingsNavAccounts,
Self::Settings => AppTextKey::SettingsNavSettings,
Self::About => AppTextKey::SettingsNavAbout,
}
}
-
- fn summary_key(self) -> AppTextKey {
- match self {
- Self::Accounts => AppTextKey::SettingsAccountsSummary,
- Self::Settings => AppTextKey::SettingsPreferencesSummary,
- Self::About => AppTextKey::SettingsAboutSummary,
- }
- }
}
pub struct HomeView {
- snapshot: AppRuntimeSnapshot,
metadata_rows: Vec<LabelValueRow>,
}
@@ -64,10 +52,7 @@ impl HomeView {
pub fn new(snapshot: AppRuntimeSnapshot) -> Self {
let metadata_rows = runtime_metadata_rows(&snapshot);
- Self {
- snapshot,
- metadata_rows,
- }
+ Self { metadata_rows }
}
}
@@ -87,60 +72,14 @@ impl Render for HomeView {
.p(px(APP_UI_THEME.layout.home_window_padding_px))
.flex()
.flex_col()
- .justify_between()
.child(
- div()
- .flex()
- .flex_col()
- .gap(px(APP_UI_THEME.layout.home_stack_gap_px))
- .child(
- div()
- .text_size(px(APP_UI_THEME.typography.brand_text_px))
- .font_weight(gpui::FontWeight::SEMIBOLD)
- .text_color(rgb(APP_UI_THEME.text.primary))
- .child(app_shared_text(AppTextKey::HomeBrand)),
- )
- .child(
- div()
- .text_size(px(APP_UI_THEME.typography.body_text_px))
- .text_color(rgb(APP_UI_THEME.text.secondary))
- .child(app_shared_text(AppTextKey::HomeTitle)),
- ),
- )
- .child(
- div()
- .flex()
- .flex_col()
- .gap(px(APP_UI_THEME.layout.home_stack_gap_px))
- .child(
- div()
- .text_size(px(APP_UI_THEME
- .typography
- .utility_title_text_px))
- .text_color(rgb(APP_UI_THEME.text.secondary))
- .child(format!("v{}", self.snapshot.host.app_version)),
- )
- .child(
- div()
- .id("home-open-settings")
- .w_full()
- .px(px(APP_UI_THEME
- .layout
- .settings_navigation_row_padding_px))
- .py(px(APP_UI_THEME
- .layout
- .settings_navigation_row_padding_px))
- .bg(rgb(APP_UI_THEME.surfaces.card_background))
- .rounded(px(8.0))
- .cursor_pointer()
- .text_size(px(APP_UI_THEME.typography.body_text_px))
- .text_color(rgb(APP_UI_THEME.text.primary))
- .child(app_shared_text(AppTextKey::SettingsTitle))
- .on_click(|_, window, cx| {
- window
- .dispatch_action(Box::new(OpenSettingsWindow), cx);
- }),
- ),
+ div().flex().child(
+ div()
+ .text_size(px(APP_UI_THEME.typography.brand_text_px))
+ .font_weight(gpui::FontWeight::SEMIBOLD)
+ .text_color(rgb(APP_UI_THEME.text.primary))
+ .child(app_shared_text(AppTextKey::HomeBrand)),
+ ),
),
)
.child(
@@ -166,11 +105,6 @@ impl Render for HomeView {
.w_full()
.flex()
.flex_col()
- .gap(px(APP_UI_THEME.layout.home_stack_gap_px))
- .child(utility_title_row(app_shared_text(
- AppTextKey::HomeMetadataTitle,
- )))
- .child(section_divider())
.child(label_value_list(self.metadata_rows.clone())),
)),
),
@@ -225,7 +159,7 @@ impl SettingsWindowView {
.text_color(rgb(foreground))
.child(app_shared_text(view.label_key()))
.id(match view {
- SettingsPanelViewKey::Accounts => "settings-nav-accounts",
+ SettingsPanelViewKey::Account => "settings-nav-accounts",
SettingsPanelViewKey::Settings => "settings-nav-settings",
SettingsPanelViewKey::About => "settings-nav-about",
})
@@ -234,25 +168,6 @@ impl SettingsWindowView {
}))
}
- fn summary_card(&self, view: SettingsPanelViewKey) -> impl IntoElement {
- app_card(
- div()
- .w_full()
- .flex()
- .flex_col()
- .gap(px(APP_UI_THEME.layout.home_stack_gap_px))
- .child(utility_title_row(app_shared_text(view.label_key())))
- .child(section_divider())
- .child(
- div()
- .w_full()
- .text_size(px(APP_UI_THEME.typography.body_text_px))
- .text_color(rgb(APP_UI_THEME.text.secondary))
- .child(app_shared_text(view.summary_key())),
- ),
- )
- }
-
fn detail_card(&self, title: AppTextKey, rows: Vec<LabelValueRow>) -> impl IntoElement {
app_card(
div()
@@ -278,14 +193,9 @@ impl SettingsWindowView {
.flex()
.flex_col()
.gap(px(APP_UI_THEME.layout.home_stack_gap_px))
- .child(self.summary_card(SettingsPanelViewKey::Accounts))
.child(self.detail_card(
- AppTextKey::SettingsAccountsProfileTitle,
+ AppTextKey::SettingsNavAccounts,
settings_account_profile_rows(),
- ))
- .child(self.detail_card(
- AppTextKey::SettingsAccountsRuntimeTitle,
- settings_account_runtime_rows(),
)),
)
}
@@ -302,14 +212,9 @@ impl SettingsWindowView {
.flex()
.flex_col()
.gap(px(APP_UI_THEME.layout.home_stack_gap_px))
- .child(self.summary_card(SettingsPanelViewKey::Settings))
.child(self.detail_card(
- AppTextKey::SettingsPreferencesGeneralTitle,
+ AppTextKey::SettingsGeneralSectionLabel,
settings_preferences_general_rows(),
- ))
- .child(self.detail_card(
- AppTextKey::SettingsPreferencesDeviceTitle,
- settings_preferences_device_rows(),
)),
)
}
@@ -326,21 +231,18 @@ impl SettingsWindowView {
.flex()
.flex_col()
.gap(px(APP_UI_THEME.layout.home_stack_gap_px))
- .child(self.summary_card(SettingsPanelViewKey::About))
- .child(self.detail_card(
- AppTextKey::SettingsAboutBuildTitle,
- settings_about_build_rows(),
- ))
- .child(self.detail_card(
- AppTextKey::SettingsAboutStatusTitle,
- settings_about_status_rows(),
- )),
+ .child(
+ self.detail_card(
+ AppTextKey::SettingsNavAbout,
+ settings_about_status_rows(),
+ ),
+ ),
)
}
fn settings_panel_content(&self) -> AnyElement {
match self.selected_view {
- SettingsPanelViewKey::Accounts => self.accounts_panel().into_any_element(),
+ SettingsPanelViewKey::Account => self.accounts_panel().into_any_element(),
SettingsPanelViewKey::Settings => self.settings_panel().into_any_element(),
SettingsPanelViewKey::About => self.about_panel().into_any_element(),
}
@@ -408,7 +310,7 @@ impl Render for SettingsWindowView {
.flex_col()
.gap(px(APP_UI_THEME.layout.settings_navigation_row_gap_px))
.bg(rgb(APP_UI_THEME.surfaces.panel_background))
- .child(self.navigation_button(SettingsPanelViewKey::Accounts, cx))
+ .child(self.navigation_button(SettingsPanelViewKey::Account, cx))
.child(self.navigation_button(SettingsPanelViewKey::Settings, cx))
.child(self.navigation_button(SettingsPanelViewKey::About, cx)),
)
diff --git a/crates/shared/i18n/src/keys.rs b/crates/shared/i18n/src/keys.rs
@@ -22,47 +22,37 @@ macro_rules! define_app_text_keys {
define_app_text_keys! {
AppName => "app.name",
HomeBrand => "home.brand",
- HomeTitle => "home.title",
- HomeMetadataTitle => "home.metadata_title",
- MenuSettings => "menu.settings",
MenuQuit => "menu.quit",
+ MenuAbout => "menu.about",
+ MenuServices => "menu.services",
SettingsTitle => "settings.title",
SettingsNavAccounts => "settings.nav.accounts",
SettingsNavSettings => "settings.nav.settings",
SettingsNavAbout => "settings.nav.about",
- SettingsAccountsSummary => "settings.accounts.summary",
- SettingsAccountsProfileTitle => "settings.accounts.profile.title",
- SettingsAccountsIdentityLabel => "settings.accounts.identity.label",
- SettingsAccountsIdentityValue => "settings.accounts.identity.value",
- SettingsAccountsStatusLabel => "settings.accounts.status.label",
- SettingsAccountsStatusValue => "settings.accounts.status.value",
- SettingsAccountsRuntimeTitle => "settings.accounts.runtime.title",
- SettingsAccountsSyncLabel => "settings.accounts.sync.label",
- SettingsAccountsSyncValue => "settings.accounts.sync.value",
- SettingsAccountsRecoveryLabel => "settings.accounts.recovery.label",
- SettingsAccountsRecoveryValue => "settings.accounts.recovery.value",
- SettingsPreferencesSummary => "settings.preferences.summary",
- SettingsPreferencesGeneralTitle => "settings.preferences.general.title",
- SettingsPreferencesLaunchLabel => "settings.preferences.launch.label",
- SettingsPreferencesLaunchValue => "settings.preferences.launch.value",
- SettingsPreferencesNetworkLabel => "settings.preferences.network.label",
- SettingsPreferencesNetworkValue => "settings.preferences.network.value",
- SettingsPreferencesDeviceTitle => "settings.preferences.device.title",
- SettingsPreferencesNotificationsLabel => "settings.preferences.notifications.label",
- SettingsPreferencesNotificationsValue => "settings.preferences.notifications.value",
- SettingsPreferencesDiagnosticsLabel => "settings.preferences.diagnostics.label",
- SettingsPreferencesDiagnosticsValue => "settings.preferences.diagnostics.value",
- SettingsAboutSummary => "settings.about.summary",
- SettingsAboutBuildTitle => "settings.about.build.title",
- SettingsAboutShellLabel => "settings.about.shell.label",
- SettingsAboutShellValue => "settings.about.shell.value",
- SettingsAboutLicenseLabel => "settings.about.license.label",
- SettingsAboutLicenseValue => "settings.about.license.value",
- SettingsAboutStatusTitle => "settings.about.status.title",
- SettingsAboutPostureLabel => "settings.about.posture.label",
- SettingsAboutPostureValue => "settings.about.posture.value",
- SettingsAboutMilestoneLabel => "settings.about.milestone.label",
- SettingsAboutMilestoneValue => "settings.about.milestone.value",
+ SettingsAccountProfileLabel => "settings.account.profile.label",
+ SettingsAccountStatusLabel => "settings.account.status.label",
+ SettingsAccountStatusLoggedIn => "settings.account.status.logged_in",
+ SettingsAccountStatusLoggedOut => "settings.account.status.logged_out",
+ SettingsAccountPlaceholderName => "settings.account.placeholder_name",
+ SettingsAccountPlaceholderHandle => "settings.account.placeholder_handle",
+ SettingsAccountAddAction => "settings.account.action.add_account",
+ SettingsAccountLogOutAction => "settings.account.action.log_out",
+ SettingsAccountAdminConsoleAction => "settings.account.action.admin_console",
+ SettingsViewAccount => "settings.view.account",
+ SettingsViewSettings => "settings.view.settings",
+ SettingsViewAbout => "settings.view.about",
+ SettingsGeneralSectionLabel => "settings.general.section.label",
+ SettingsGeneralAllowRelayConnections => "settings.general.allow_relay_connections",
+ SettingsGeneralUseMediaServers => "settings.general.use_media_servers",
+ SettingsGeneralUseNip05 => "settings.general.use_nip05",
+ SettingsGeneralLaunchAtLogin => "settings.general.launch_at_login",
+ SettingsGeneralManageAction => "settings.general.action.manage",
+ SettingsGeneralUseNip05Note => "settings.general.use_nip05.note",
+ SettingsAboutPlaceholderTopPrimary => "settings.about.placeholder.top_primary",
+ SettingsAboutPlaceholderTopSecondary => "settings.about.placeholder.top_secondary",
+ SettingsAboutPlaceholderTopTertiary => "settings.about.placeholder.top_tertiary",
+ SettingsAboutPlaceholderMiddle => "settings.about.placeholder.middle",
+ SettingsAboutPlaceholderBottom => "settings.about.placeholder.bottom",
MetadataCorePackage => "metadata.core_package",
MetadataCoreVersion => "metadata.core_version",
MetadataCoreAuthors => "metadata.core_authors",
@@ -83,6 +73,8 @@ define_app_text_keys! {
MetadataRuntimeMode => "metadata.runtime_mode",
MetadataRunId => "metadata.run_id",
ValueNone => "value.none",
+ ValueEnabled => "value.enabled",
+ ValueDisabled => "value.disabled",
ValueRuntimeModeDevelopment => "value.runtime_mode.development",
ValueRuntimeModeProduction => "value.runtime_mode.production",
}
diff --git a/crates/shared/ui/src/lib.rs b/crates/shared/ui/src/lib.rs
@@ -11,9 +11,8 @@ pub use primitives::{
status_indicator, utility_title_row,
};
pub use text::{
- app_shared_text, runtime_metadata_rows, settings_about_build_rows, settings_about_status_rows,
- settings_account_profile_rows, settings_account_runtime_rows, settings_preferences_device_rows,
- settings_preferences_general_rows,
+ app_shared_label_text, app_shared_text, runtime_metadata_rows, settings_about_status_rows,
+ settings_account_profile_rows, settings_preferences_general_rows,
};
pub use theme::{
APP_UI_THEME, ActionButtonColors, ActionButtonSizing, ActionButtonTokens, AppControlTokens,
diff --git a/crates/shared/ui/src/primitives.rs b/crates/shared/ui/src/primitives.rs
@@ -431,6 +431,9 @@ mod tests {
assert_eq!(spec.id, "launch");
assert_eq!(spec.label.as_ref(), "Launch at login");
- assert_eq!(spec.note.as_ref().map(|note| note.as_ref()), Some("Optional note"));
+ assert_eq!(
+ spec.note.as_ref().map(|note| note.as_ref()),
+ Some("Optional note")
+ );
}
}
diff --git a/crates/shared/ui/src/text.rs b/crates/shared/ui/src/text.rs
@@ -8,6 +8,10 @@ pub fn app_shared_text(key: AppTextKey) -> SharedString {
app_text(key).into()
}
+pub fn app_shared_label_text(key: AppTextKey) -> SharedString {
+ format!("{}:", app_text(key)).into()
+}
+
pub fn runtime_metadata_rows(snapshot: &AppRuntimeSnapshot) -> Vec<LabelValueRow> {
vec![
metadata_row(
@@ -90,25 +94,12 @@ pub fn runtime_metadata_rows(snapshot: &AppRuntimeSnapshot) -> Vec<LabelValueRow
pub fn settings_account_profile_rows() -> Vec<LabelValueRow> {
vec![
text_row(
- AppTextKey::SettingsAccountsIdentityLabel,
- AppTextKey::SettingsAccountsIdentityValue,
+ AppTextKey::SettingsAccountProfileLabel,
+ AppTextKey::SettingsAccountPlaceholderHandle,
),
text_row(
- AppTextKey::SettingsAccountsStatusLabel,
- AppTextKey::SettingsAccountsStatusValue,
- ),
- ]
-}
-
-pub fn settings_account_runtime_rows() -> Vec<LabelValueRow> {
- vec![
- text_row(
- AppTextKey::SettingsAccountsSyncLabel,
- AppTextKey::SettingsAccountsSyncValue,
- ),
- text_row(
- AppTextKey::SettingsAccountsRecoveryLabel,
- AppTextKey::SettingsAccountsRecoveryValue,
+ AppTextKey::SettingsAccountStatusLabel,
+ AppTextKey::SettingsAccountStatusLoggedIn,
),
]
}
@@ -116,51 +107,37 @@ pub fn settings_account_runtime_rows() -> Vec<LabelValueRow> {
pub fn settings_preferences_general_rows() -> Vec<LabelValueRow> {
vec![
text_row(
- AppTextKey::SettingsPreferencesLaunchLabel,
- AppTextKey::SettingsPreferencesLaunchValue,
+ AppTextKey::SettingsGeneralAllowRelayConnections,
+ AppTextKey::ValueEnabled,
),
text_row(
- AppTextKey::SettingsPreferencesNetworkLabel,
- AppTextKey::SettingsPreferencesNetworkValue,
+ AppTextKey::SettingsGeneralUseMediaServers,
+ AppTextKey::ValueEnabled,
),
- ]
-}
-
-pub fn settings_preferences_device_rows() -> Vec<LabelValueRow> {
- vec![
text_row(
- AppTextKey::SettingsPreferencesNotificationsLabel,
- AppTextKey::SettingsPreferencesNotificationsValue,
+ AppTextKey::SettingsGeneralUseNip05,
+ AppTextKey::ValueEnabled,
),
text_row(
- AppTextKey::SettingsPreferencesDiagnosticsLabel,
- AppTextKey::SettingsPreferencesDiagnosticsValue,
+ AppTextKey::SettingsGeneralLaunchAtLogin,
+ AppTextKey::ValueDisabled,
),
]
}
-pub fn settings_about_build_rows() -> Vec<LabelValueRow> {
+pub fn settings_about_status_rows() -> Vec<LabelValueRow> {
vec![
text_row(
- AppTextKey::SettingsAboutShellLabel,
- AppTextKey::SettingsAboutShellValue,
- ),
- text_row(
- AppTextKey::SettingsAboutLicenseLabel,
- AppTextKey::SettingsAboutLicenseValue,
+ AppTextKey::SettingsViewAbout,
+ AppTextKey::SettingsAboutPlaceholderTopPrimary,
),
- ]
-}
-
-pub fn settings_about_status_rows() -> Vec<LabelValueRow> {
- vec![
text_row(
- AppTextKey::SettingsAboutPostureLabel,
- AppTextKey::SettingsAboutPostureValue,
+ AppTextKey::SettingsGeneralSectionLabel,
+ AppTextKey::SettingsAboutPlaceholderMiddle,
),
text_row(
- AppTextKey::SettingsAboutMilestoneLabel,
- AppTextKey::SettingsAboutMilestoneValue,
+ AppTextKey::SettingsAccountProfileLabel,
+ AppTextKey::SettingsAboutPlaceholderBottom,
),
]
}
@@ -231,10 +208,12 @@ mod tests {
assert!(
general_rows
.iter()
- .any(|row| row.label == "launch behavior" && row.value == "manual launch only")
+ .any(|row| row.label == "allow relay connections" && row.value == "enabled")
+ );
+ assert!(
+ about_rows
+ .iter()
+ .any(|row| { row.label == "about" && row.value == "About placeholder primary" })
);
- assert!(about_rows.iter().any(|row| {
- row.label == "next milestone" && row.value == "interactive account flows"
- }));
}
}
diff --git a/crates/shared/ui/src/theme.rs b/crates/shared/ui/src/theme.rs
@@ -302,7 +302,12 @@ mod tests {
assert_eq!(APP_UI_THEME.layout.settings_chrome_height_px, 88.0);
assert_eq!(APP_UI_THEME.layout.settings_content_padding_px, 24.0);
assert_eq!(APP_UI_THEME.layout.settings_account_sidebar_width_px, 200.0);
- assert_eq!(APP_UI_THEME.layout.settings_account_sidebar_button_height_px, 42.0);
+ assert_eq!(
+ APP_UI_THEME
+ .layout
+ .settings_account_sidebar_button_height_px,
+ 42.0
+ );
}
#[test]
diff --git a/i18n/locales/en/messages.json b/i18n/locales/en/messages.json
@@ -1,47 +1,37 @@
{
- "app.name": "radroots",
+ "app.name": "Radroots",
"home.brand": "radroots",
- "home.title": "home",
- "home.metadata_title": "runtime metadata",
- "menu.settings": "settings",
- "menu.quit": "quit radroots",
- "settings.title": "settings",
- "settings.nav.accounts": "accounts",
- "settings.nav.settings": "settings",
- "settings.nav.about": "about",
- "settings.accounts.summary": "prepare local identity, sign-in, and recovery flows for future radroots releases.",
- "settings.accounts.profile.title": "profile",
- "settings.accounts.identity.label": "local identity",
- "settings.accounts.identity.value": "radroots local profile",
- "settings.accounts.status.label": "sign-in state",
- "settings.accounts.status.value": "not signed in",
- "settings.accounts.runtime.title": "runtime",
- "settings.accounts.sync.label": "sync posture",
- "settings.accounts.sync.value": "single-device placeholder",
- "settings.accounts.recovery.label": "recovery",
- "settings.accounts.recovery.value": "not configured",
- "settings.preferences.summary": "configure app behavior, device defaults, and diagnostics posture as these controls land.",
- "settings.preferences.general.title": "general",
- "settings.preferences.launch.label": "launch behavior",
- "settings.preferences.launch.value": "manual launch only",
- "settings.preferences.network.label": "network posture",
- "settings.preferences.network.value": "default runtime transport",
- "settings.preferences.device.title": "device state",
- "settings.preferences.notifications.label": "notifications",
- "settings.preferences.notifications.value": "not requested",
- "settings.preferences.diagnostics.label": "diagnostics",
- "settings.preferences.diagnostics.value": "runtime metadata only",
- "settings.about.summary": "this app is a native radroots runtime under active development.",
- "settings.about.build.title": "build",
- "settings.about.shell.label": "shell",
- "settings.about.shell.value": "gpui native macos window",
- "settings.about.license.label": "license",
- "settings.about.license.value": "gpl-3.0",
- "settings.about.status.title": "status",
- "settings.about.posture.label": "current posture",
- "settings.about.posture.value": "bootstrap placeholder shell",
- "settings.about.milestone.label": "next milestone",
- "settings.about.milestone.value": "interactive account flows",
+ "menu.about": "About Radroots",
+ "menu.services": "Services",
+ "menu.quit": "Quit Radroots",
+ "settings.title": "Radroots Settings",
+ "settings.nav.accounts": "Accounts",
+ "settings.nav.settings": "Settings",
+ "settings.nav.about": "About",
+ "settings.account.profile.label": "Profile",
+ "settings.account.status.label": "Status",
+ "settings.account.status.logged_in": "Logged In",
+ "settings.account.status.logged_out": "Logged Out",
+ "settings.account.placeholder_name": "Test User",
+ "settings.account.placeholder_handle": "test.user",
+ "settings.account.action.add_account": "Add Account...",
+ "settings.account.action.log_out": "Log Out",
+ "settings.account.action.admin_console": "Admin Console...",
+ "settings.view.account": "account",
+ "settings.view.settings": "settings",
+ "settings.view.about": "about",
+ "settings.general.section.label": "General",
+ "settings.general.allow_relay_connections": "Allow relay connections",
+ "settings.general.use_media_servers": "Use Radroots media servers",
+ "settings.general.use_nip05": "Use Radroots NIP-05",
+ "settings.general.launch_at_login": "Launch Radroots at login",
+ "settings.general.action.manage": "Manage...",
+ "settings.general.use_nip05.note": "A kind-0 metadata event will be posted including your NIP-05 profile name and a request will be sent to radroots over NIP-96 to reserve your configured username",
+ "settings.about.placeholder.top_primary": "About placeholder primary",
+ "settings.about.placeholder.top_secondary": "About placeholder secondary",
+ "settings.about.placeholder.top_tertiary": "About placeholder tertiary",
+ "settings.about.placeholder.middle": "About placeholder middle section",
+ "settings.about.placeholder.bottom": "About placeholder bottom section",
"metadata.core_package": "core package",
"metadata.core_version": "core version",
"metadata.core_authors": "core authors",
@@ -62,6 +52,8 @@
"metadata.runtime_mode": "runtime mode",
"metadata.run_id": "run id",
"value.none": "none",
+ "value.enabled": "enabled",
+ "value.disabled": "disabled",
"value.runtime_mode.development": "development",
"value.runtime_mode.production": "production"
}