///|
priv enum FrameworkLanguage {
  English
  SimplifiedChinese
}

///|
priv struct FrameworkCatalog {
  startup_failure_title : String
  startup_failure_summary : String
  application_error_title : String
  application_error_summary : String
  file_menu : String
  edit_menu : String
  view_menu : String
  window_menu : String
  help_menu : String
  quit_prefix : String
  hide_prefix : String
  hide_others : String
  show_all : String
  close : String
  minimize : String
  zoom : String
  undo : String
  redo : String
  cut : String
  copy : String
  paste : String
  select_all : String
  dialog_ok : String
  dialog_cancel : String
  titlebar_minimize : String
  titlebar_maximize : String
  titlebar_restore : String
  titlebar_close : String
}

///|
fn framework_language(locale : @locale.Locale) -> FrameworkLanguage {
  if locale.language() == "zh" && locale.region() == Some("CN") {
    SimplifiedChinese
  } else {
    English
  }
}

///|
fn framework_catalog(
  preferences : @locale.LocalePreferences,
) -> FrameworkCatalog {
  match framework_language(preferences.locale()) {
    English =>
      FrameworkCatalog::{
        startup_failure_title: "Application Startup Failed",
        startup_failure_summary: "The application could not start.",
        application_error_title: "Application Error",
        application_error_summary: "The application encountered an error.",
        file_menu: "File",
        edit_menu: "Edit",
        view_menu: "View",
        window_menu: "Window",
        help_menu: "Help",
        quit_prefix: "Quit ",
        hide_prefix: "Hide ",
        hide_others: "Hide Others",
        show_all: "Show All",
        close: "Close",
        minimize: "Minimize",
        zoom: "Zoom",
        undo: "Undo",
        redo: "Redo",
        cut: "Cut",
        copy: "Copy",
        paste: "Paste",
        select_all: "Select All",
        dialog_ok: "OK",
        dialog_cancel: "Cancel",
        titlebar_minimize: "Minimize",
        titlebar_maximize: "Maximize",
        titlebar_restore: "Restore",
        titlebar_close: "Close",
      }
    SimplifiedChinese =>
      FrameworkCatalog::{
        startup_failure_title: "应用启动失败",
        startup_failure_summary: "应用无法启动。",
        application_error_title: "应用错误",
        application_error_summary: "应用遇到错误。",
        file_menu: "文件",
        edit_menu: "编辑",
        view_menu: "显示",
        window_menu: "窗口",
        help_menu: "帮助",
        quit_prefix: "退出 ",
        hide_prefix: "隐藏 ",
        hide_others: "隐藏其他应用",
        show_all: "全部显示",
        close: "关闭窗口",
        minimize: "最小化",
        zoom: "缩放",
        undo: "撤销",
        redo: "重做",
        cut: "剪切",
        copy: "拷贝",
        paste: "粘贴",
        select_all: "全选",
        dialog_ok: "确定",
        dialog_cancel: "取消",
        titlebar_minimize: "最小化",
        titlebar_maximize: "最大化",
        titlebar_restore: "还原",
        titlebar_close: "关闭",
      }
  }
}

///|
fn startup_failure_title(preferences : @locale.LocalePreferences) -> String {
  framework_catalog(preferences).startup_failure_title
}

///|
fn startup_failure_summary(preferences : @locale.LocalePreferences) -> String {
  framework_catalog(preferences).startup_failure_summary
}

///|
fn application_error_title(preferences : @locale.LocalePreferences) -> String {
  framework_catalog(preferences).application_error_title
}

///|
fn application_error_summary(preferences : @locale.LocalePreferences) -> String {
  framework_catalog(preferences).application_error_summary
}

///|
fn framework_failure_message(summary : String, detail : String) -> String {
  if detail.is_empty() {
    summary
  } else {
    summary + "\n\n" + detail
  }
}