mirror of
https://github.com/an-anime-team/sleepy-launcher.git
synced 2024-11-22 04:40:06 +03:00
feat(i18n): added localization to first run window
This commit is contained in:
parent
cbd91c42aa
commit
681ad01835
16 changed files with 225 additions and 120 deletions
15
assets/locales/common.ftl
Normal file
15
assets/locales/common.ftl
Normal file
|
@ -0,0 +1,15 @@
|
|||
-company-name-1 = mi
|
||||
-company-name-2 = Ho
|
||||
-company-name-3 = Yo
|
||||
company-name = {-company-name-1}{-company-name-2}{-company-name-3}
|
||||
|
||||
-company-alter-name-1 = CO
|
||||
-company-alter-name-2 = GNOS
|
||||
-company-alter-name-3 = PHERE
|
||||
company-alter-name = {-company-alter-name-1}{-company-alter-name-2}{-company-alter-name-3}
|
||||
|
||||
-game-name-1 = Gens
|
||||
-game-name-2 = hin
|
||||
-game-name-3 = Imp
|
||||
-game-name-4 = act
|
||||
game-name = {-game-name-1}{-game-name-2} {-game-name-3}{-game-name-4}
|
|
@ -9,3 +9,11 @@ background-downloading-failed = Failed to download background picture
|
|||
config-update-error = Failed to save config
|
||||
wine-prefix-update-failed = Failed to update wine prefix
|
||||
dxvk-install-failed = Failed to install DXVK
|
||||
|
||||
package-not-available = Package is not available: {$package}
|
||||
wine-download-error = Failed to download wine
|
||||
wine-unpack-errror = Failed to unpack wine
|
||||
wine-install-failed = Failed to install wine
|
||||
dxvk-download-error = Failed to download dxvk
|
||||
dxvk-unpack-error = Failed to unpack dxvk
|
||||
dxvk-apply-error = Failed to apply DXVK
|
||||
|
|
55
assets/locales/en/first_run.ftl
Normal file
55
assets/locales/en/first_run.ftl
Normal file
|
@ -0,0 +1,55 @@
|
|||
welcome = Welcome
|
||||
|
||||
welcome-page-message =
|
||||
Hi there! Welcome to the An Anime Game Launcher
|
||||
|
||||
We need to prepare some stuff and download default components before you could run the game
|
||||
|
||||
|
||||
tos-violation-warning = ToS violation warning
|
||||
|
||||
tos-violation-warning-message =
|
||||
This launcher is an unofficial tool, in no way related to {company-name} nor {company-alter-name}.
|
||||
|
||||
This tool is designed to facilitate playing {game-name} on Linux, and was built with the sole purpose of installing and running the game with less hassle.
|
||||
|
||||
It does so by using existing components and making the experience simple for the user.
|
||||
|
||||
However, some components used here likely break the {company-name} Terms of Service for {game-name}.
|
||||
|
||||
If you are using this launcher, your player account could become identified as TOS-non-compliant by {company-name}/{company-alter-name}.
|
||||
|
||||
If this happens, as your account would be disobeying TOS, {company-name}/{company-alter-name} are free to do what they want. Including banning.
|
||||
|
||||
If you understand the risk of trying to play the game in an unofficial capacity, press OK and let's go researching the world of Teyvat!
|
||||
|
||||
|
||||
dependencies = Dependencies
|
||||
missing-dependencies-title = You're missing some dependencies!
|
||||
missing-dependencies-message = You must install some packages to your system before continue installation process
|
||||
|
||||
|
||||
default-paths = Default paths
|
||||
choose-default-paths = Choose default paths
|
||||
launcher-folder = Launcher folder
|
||||
show-all-folders = I know what I'm doing
|
||||
show-all-folders-subtitle = Show additional path selection settings. Do as I say...
|
||||
runners-folder = Runners folder
|
||||
dxvks-folder = DXVKs folder
|
||||
wine-prefix-folder = Wine prefix folder
|
||||
game-installation-folder = Game installation folder
|
||||
patch-folder = Patch folder
|
||||
temp-folder = Temp folder
|
||||
|
||||
|
||||
select-voice-packages = Select voice packages
|
||||
|
||||
|
||||
download-components = Download components
|
||||
download-dxvk = Download DXVK
|
||||
apply-dxvk = Apply DXVK
|
||||
|
||||
|
||||
finish = Finish
|
||||
finish-title = Everything's done!
|
||||
finish-message = All the basic components were downloaded. Now you can restart the launcher and download the game. Welcome to our club!
|
|
@ -2,8 +2,13 @@ custom = Custom
|
|||
none = None
|
||||
default = Default
|
||||
details = Details
|
||||
|
||||
close = Close
|
||||
save = Save
|
||||
continue = Continue
|
||||
exit = Exit
|
||||
check = Check
|
||||
restart = Restart
|
||||
|
||||
|
||||
downloading-background-picture = Downloading background picture
|
||||
|
|
|
@ -9,3 +9,11 @@ background-downloading-failed = Не удалось загрузить фоно
|
|||
config-update-error = Ошибка сохранения настроек
|
||||
wine-prefix-update-failed = Ошибка обновления префикса Wine
|
||||
dxvk-install-failed = Ошибка установки DXVK
|
||||
|
||||
package-not-available = Пакет недоступен: {$package}
|
||||
wine-download-error = Ошибка скачивания Wine
|
||||
wine-unpack-errror = Ошибка распаковки Wine
|
||||
wine-install-failed = Ошибка установки Wine
|
||||
dxvk-download-error = Ошибка скачивания DXVK
|
||||
dxvk-unpack-error = Ошибка распаковки DXVK
|
||||
dxvk-apply-error = Не удалось применить DXVK
|
||||
|
|
57
assets/locales/ru/first_run.ftl
Normal file
57
assets/locales/ru/first_run.ftl
Normal file
|
@ -0,0 +1,57 @@
|
|||
welcome = Добро пожаловать
|
||||
|
||||
welcome-page-message =
|
||||
Приветствую! Добро пожаловать в An Anime Game Launcher
|
||||
|
||||
Нам необходимо подготовить пару вещей и установить стандартные компоненты перед тем, как ты сможешь запустить игру
|
||||
|
||||
|
||||
tos-violation-warning = Нарушение пользовательского соглашения
|
||||
|
||||
tos-violation-warning-message =
|
||||
Этот лаунчер является неофициальным и ни в коем случае не относится к {company-name} или {company-alter-name}.
|
||||
|
||||
Он был разработан с целью предоставления возможности игры в {game-name} на Linux.
|
||||
|
||||
Его главная цель - помочь установить и запустить игру с меньшими хлопотами.
|
||||
|
||||
Это достигается за счет использования существующих компонентов и упрощения работы пользователя.
|
||||
|
||||
Однако, некоторые компоненты, используемые здесь, вероятно нарушают пользовательское соглашение {game-name}, принадлежащей {company-name}.
|
||||
|
||||
Если вы используете данный лаунчер - ваш игровой аккаунт может быть признан как нарушающий пользовательское соглашение {company-name}/{company-alter-name}.
|
||||
|
||||
Если это произойдёт - поскольку ваша учетная запись будет нарушать правила, {company-name}/{company-alter-name} будут свободы делать то, что захотят, включая блокировку вашего аккаунта.
|
||||
|
||||
Если вы осознаёте риск использования неофициальных средств игры - нажмите "Продолжить" и отправляйтесь исследовать мир Тейвата!
|
||||
|
||||
|
||||
dependencies = Зависимости
|
||||
missing-dependencies-title = У вас не установлены некоторые компоненты!
|
||||
missing-dependencies-message = Вы должны установить некоторые системные пакеты чтобы продолжить процесс установки
|
||||
|
||||
|
||||
default-paths = Пути по умолчанию
|
||||
choose-default-paths = Выбрать пути по умолчанию
|
||||
launcher-folder = Папка лаунчера
|
||||
show-all-folders = Я знаю что я делаю
|
||||
show-all-folders-subtitle = Отобразить дополнительные опции выбора путей
|
||||
runners-folder = Папка версий Wine
|
||||
dxvks-folder = Папка версий DXVK
|
||||
wine-prefix-folder = Папка префикса Wine
|
||||
game-installation-folder = Путь установки игры
|
||||
patch-folder = Папка скачивания патча
|
||||
temp-folder = Временная папка
|
||||
|
||||
|
||||
select-voice-packages = Выбрать языковые пакеты
|
||||
|
||||
|
||||
download-components = Скачать компоненты
|
||||
download-dxvk = Скачать DXVK
|
||||
apply-dxvk = Применить DXVK
|
||||
|
||||
|
||||
finish = Завершение
|
||||
finish-title = Работа завершена!
|
||||
finish-message = Все базовые компоненты были установлены. Теперь вы можете перезапустить лаунчер и установить игру. Добро пожаловать в клуб!
|
|
@ -2,8 +2,13 @@ custom = Свое значение
|
|||
none = Нет
|
||||
default = По умолчанию
|
||||
details = Подробнее
|
||||
|
||||
close = Закрыть
|
||||
save = Сохранить
|
||||
continue = Продолжить
|
||||
exit = Выйти
|
||||
check = Проверить
|
||||
restart = Перезапустить
|
||||
|
||||
|
||||
downloading-background-picture = Загрузка фонового изображения
|
||||
|
|
|
@ -4,6 +4,7 @@ use unic_langid::{langid, LanguageIdentifier};
|
|||
fluent_templates::static_loader! {
|
||||
static LOCALES = {
|
||||
locales: "./assets/locales",
|
||||
core_locales: "./assets/locales/common.ftl",
|
||||
fallback_language: "en"
|
||||
};
|
||||
}
|
||||
|
|
|
@ -57,7 +57,7 @@ impl SimpleAsyncComponent for DefaultPathsApp {
|
|||
set_vexpand: true,
|
||||
|
||||
gtk::Label {
|
||||
set_label: "Choose default paths",
|
||||
set_label: &tr("choose-default-paths"),
|
||||
add_css_class: "title-1"
|
||||
}
|
||||
},
|
||||
|
@ -67,7 +67,7 @@ impl SimpleAsyncComponent for DefaultPathsApp {
|
|||
set_vexpand: true,
|
||||
|
||||
adw::ActionRow {
|
||||
set_title: "Launcher folder",
|
||||
set_title: &tr("launcher-folder"),
|
||||
set_icon_name: Some("folder-symbolic"),
|
||||
set_activatable: true,
|
||||
|
||||
|
@ -83,8 +83,8 @@ impl SimpleAsyncComponent for DefaultPathsApp {
|
|||
set_vexpand: true,
|
||||
|
||||
adw::ActionRow {
|
||||
set_title: "I know what I'm doing",
|
||||
set_subtitle: "Show additional path selection settings. Do as I say...",
|
||||
set_title: &tr("show-all-folders"),
|
||||
set_subtitle: &tr("show-all-folders-subtitle"),
|
||||
|
||||
add_suffix = >k::Switch {
|
||||
set_valign: gtk::Align::Center,
|
||||
|
@ -102,7 +102,7 @@ impl SimpleAsyncComponent for DefaultPathsApp {
|
|||
set_visible: model.show_additional,
|
||||
|
||||
adw::ActionRow {
|
||||
set_title: "Runners folder",
|
||||
set_title: &tr("runners-folder"),
|
||||
set_icon_name: Some("folder-symbolic"),
|
||||
set_activatable: true,
|
||||
|
||||
|
@ -113,7 +113,7 @@ impl SimpleAsyncComponent for DefaultPathsApp {
|
|||
},
|
||||
|
||||
adw::ActionRow {
|
||||
set_title: "DXVKs folder",
|
||||
set_title: &tr("dxvks-folder"),
|
||||
set_icon_name: Some("folder-symbolic"),
|
||||
set_activatable: true,
|
||||
|
||||
|
@ -124,7 +124,7 @@ impl SimpleAsyncComponent for DefaultPathsApp {
|
|||
},
|
||||
|
||||
adw::ActionRow {
|
||||
set_title: "Wine prefix folder",
|
||||
set_title: &tr("wine-prefix-folder"),
|
||||
set_icon_name: Some("folder-symbolic"),
|
||||
set_activatable: true,
|
||||
|
||||
|
@ -135,7 +135,7 @@ impl SimpleAsyncComponent for DefaultPathsApp {
|
|||
},
|
||||
|
||||
adw::ActionRow {
|
||||
set_title: "Game installation folder",
|
||||
set_title: &tr("game-installation-folder"),
|
||||
set_icon_name: Some("folder-symbolic"),
|
||||
set_activatable: true,
|
||||
|
||||
|
@ -146,7 +146,7 @@ impl SimpleAsyncComponent for DefaultPathsApp {
|
|||
},
|
||||
|
||||
adw::ActionRow {
|
||||
set_title: "Patch folder",
|
||||
set_title: &tr("patch-folder"),
|
||||
set_icon_name: Some("folder-symbolic"),
|
||||
set_activatable: true,
|
||||
|
||||
|
@ -157,7 +157,7 @@ impl SimpleAsyncComponent for DefaultPathsApp {
|
|||
},
|
||||
|
||||
adw::ActionRow {
|
||||
set_title: "Temp folder",
|
||||
set_title: &tr("temp-folder"),
|
||||
set_icon_name: Some("folder-symbolic"),
|
||||
set_activatable: true,
|
||||
|
||||
|
@ -178,14 +178,14 @@ impl SimpleAsyncComponent for DefaultPathsApp {
|
|||
set_spacing: 8,
|
||||
|
||||
gtk::Button {
|
||||
set_label: "Continue",
|
||||
set_label: &tr("continue"),
|
||||
set_css_classes: &["suggested-action", "pill"],
|
||||
|
||||
connect_clicked => DefaultPathsAppMsg::Continue
|
||||
},
|
||||
|
||||
gtk::Button {
|
||||
set_label: "Exit",
|
||||
set_label: &tr("exit"),
|
||||
add_css_class: "pill",
|
||||
|
||||
connect_clicked => DefaultPathsAppMsg::Exit
|
||||
|
|
|
@ -7,6 +7,7 @@ use anime_launcher_sdk::is_available;
|
|||
|
||||
use std::process::{Command, Stdio};
|
||||
|
||||
use crate::i18n::*;
|
||||
use super::main::FirstRunAppMsg;
|
||||
|
||||
pub struct DependenciesApp {
|
||||
|
@ -36,12 +37,12 @@ impl SimpleAsyncComponent for DependenciesApp {
|
|||
set_vexpand: true,
|
||||
|
||||
gtk::Label {
|
||||
set_label: "You're missing some dependencies!",
|
||||
set_label: &tr("missing-dependencies-title"),
|
||||
add_css_class: "title-1"
|
||||
},
|
||||
|
||||
gtk::Label {
|
||||
set_label: "You must install some packages to your system before continue installation process",
|
||||
set_label: &tr("missing-dependencies-message"),
|
||||
|
||||
set_justify: gtk::Justification::Center,
|
||||
set_wrap: true,
|
||||
|
@ -120,14 +121,14 @@ impl SimpleAsyncComponent for DependenciesApp {
|
|||
set_spacing: 8,
|
||||
|
||||
gtk::Button {
|
||||
set_label: "Check",
|
||||
set_label: &tr("check"),
|
||||
set_css_classes: &["suggested-action", "pill"],
|
||||
|
||||
connect_clicked => DependenciesAppMsg::Continue
|
||||
},
|
||||
|
||||
gtk::Button {
|
||||
set_label: "Exit",
|
||||
set_label: &tr("exit"),
|
||||
add_css_class: "pill",
|
||||
|
||||
connect_clicked => DependenciesAppMsg::Exit
|
||||
|
@ -149,13 +150,13 @@ impl SimpleAsyncComponent for DependenciesApp {
|
|||
};
|
||||
|
||||
// Decide which packaging format used in system
|
||||
match Command::new("pacman").stdout(Stdio::null()).spawn() {
|
||||
match Command::new("pacman").stdout(Stdio::null()).stderr(Stdio::null()).spawn() {
|
||||
Ok(_) => model.show_arch = true,
|
||||
|
||||
Err(_) => match Command::new("apt").stdout(Stdio::null()).spawn() {
|
||||
Err(_) => match Command::new("apt").stdout(Stdio::null()).stderr(Stdio::null()).spawn() {
|
||||
Ok(_) => model.show_debian = true,
|
||||
|
||||
Err(_) => match Command::new("dnf").stdout(Stdio::null()).spawn() {
|
||||
Err(_) => match Command::new("dnf").stdout(Stdio::null()).stderr(Stdio::null()).spawn() {
|
||||
Ok(_) => model.show_fedora = true,
|
||||
|
||||
Err(_) => {
|
||||
|
@ -181,7 +182,7 @@ impl SimpleAsyncComponent for DependenciesApp {
|
|||
for package in packages {
|
||||
if !is_available(package) {
|
||||
sender.output(Self::Output::Toast {
|
||||
title: format!("Package is not available: {package}"),
|
||||
title: tr_args("package-not-available", [("package", package.into())]),
|
||||
description: None
|
||||
});
|
||||
|
||||
|
|
|
@ -84,7 +84,7 @@ impl SimpleAsyncComponent for DownloadComponentsApp {
|
|||
set_vexpand: true,
|
||||
|
||||
gtk::Label {
|
||||
set_label: "Download components",
|
||||
set_label: &tr("download-components"),
|
||||
add_css_class: "title-1"
|
||||
}
|
||||
},
|
||||
|
@ -98,7 +98,7 @@ impl SimpleAsyncComponent for DownloadComponentsApp {
|
|||
|
||||
#[local_ref]
|
||||
wine_combo -> adw::ComboRow {
|
||||
set_title: "Wine version",
|
||||
set_title: &tr("wine-version"),
|
||||
|
||||
#[watch]
|
||||
set_model: Some(>k::StringList::new(model.wine_versions.iter()
|
||||
|
@ -109,7 +109,7 @@ impl SimpleAsyncComponent for DownloadComponentsApp {
|
|||
|
||||
#[local_ref]
|
||||
dxvk_combo -> adw::ComboRow {
|
||||
set_title: "DXVK version",
|
||||
set_title: &tr("dxvk-version"),
|
||||
|
||||
#[watch]
|
||||
set_model: Some(>k::StringList::new(model.dxvk_versions.iter()
|
||||
|
@ -132,14 +132,14 @@ impl SimpleAsyncComponent for DownloadComponentsApp {
|
|||
set_spacing: 8,
|
||||
|
||||
gtk::Button {
|
||||
set_label: "Download",
|
||||
set_label: &tr("download"),
|
||||
set_css_classes: &["suggested-action", "pill"],
|
||||
|
||||
connect_clicked => DownloadComponentsAppMsg::DownloadWine
|
||||
},
|
||||
|
||||
gtk::Button {
|
||||
set_label: "Exit",
|
||||
set_label: &tr("exit"),
|
||||
add_css_class: "pill",
|
||||
|
||||
connect_clicked => DownloadComponentsAppMsg::Exit
|
||||
|
@ -155,7 +155,7 @@ impl SimpleAsyncComponent for DownloadComponentsApp {
|
|||
set_visible: model.downloading,
|
||||
|
||||
adw::ActionRow {
|
||||
set_title: "Download wine",
|
||||
set_title: &tr("download-wine"),
|
||||
|
||||
#[watch]
|
||||
set_icon_name: match model.downloading_wine {
|
||||
|
@ -173,7 +173,7 @@ impl SimpleAsyncComponent for DownloadComponentsApp {
|
|||
},
|
||||
|
||||
adw::ActionRow {
|
||||
set_title: "Create prefix",
|
||||
set_title: &tr("create-prefix"),
|
||||
|
||||
#[watch]
|
||||
set_icon_name: match model.creating_prefix {
|
||||
|
@ -191,7 +191,7 @@ impl SimpleAsyncComponent for DownloadComponentsApp {
|
|||
},
|
||||
|
||||
adw::ActionRow {
|
||||
set_title: "Download DXVK",
|
||||
set_title: &tr("download-dxvk"),
|
||||
|
||||
#[watch]
|
||||
set_icon_name: match model.downloading_dxvk {
|
||||
|
@ -209,7 +209,7 @@ impl SimpleAsyncComponent for DownloadComponentsApp {
|
|||
},
|
||||
|
||||
adw::ActionRow {
|
||||
set_title: "Apply DXVK",
|
||||
set_title: &tr("apply-dxvk"),
|
||||
|
||||
#[watch]
|
||||
set_icon_name: match model.applying_dxvk {
|
||||
|
@ -317,7 +317,7 @@ impl SimpleAsyncComponent for DownloadComponentsApp {
|
|||
tracing::error!("Failed to download wine: {err}");
|
||||
|
||||
sender.output(Self::Output::Toast {
|
||||
title: String::from("Failed to download wine"),
|
||||
title: tr("wine-download-error"),
|
||||
description: Some(err.to_string())
|
||||
});
|
||||
}
|
||||
|
@ -326,7 +326,7 @@ impl SimpleAsyncComponent for DownloadComponentsApp {
|
|||
tracing::error!("Failed to unpack wine: {err}");
|
||||
|
||||
sender.output(Self::Output::Toast {
|
||||
title: String::from("Failed to unpack wine"),
|
||||
title: tr("wine-unpack-errror"),
|
||||
description: Some(err.clone())
|
||||
});
|
||||
}
|
||||
|
@ -358,7 +358,7 @@ impl SimpleAsyncComponent for DownloadComponentsApp {
|
|||
tracing::error!("Failed to initialize wine installer: {err}");
|
||||
|
||||
sender.output(Self::Output::Toast {
|
||||
title: String::from("Failed to initialize wine installer"),
|
||||
title: tr("wine-install-failed"),
|
||||
description: Some(err.to_string())
|
||||
});
|
||||
}
|
||||
|
@ -391,7 +391,7 @@ impl SimpleAsyncComponent for DownloadComponentsApp {
|
|||
tracing::error!("Failed to create prefix: {err}");
|
||||
|
||||
sender.output(Self::Output::Toast {
|
||||
title: String::from("Failed to create prefix"),
|
||||
title: tr("wine-prefix-update-failed"),
|
||||
description: Some(err.to_string())
|
||||
});
|
||||
}
|
||||
|
@ -410,8 +410,6 @@ impl SimpleAsyncComponent for DownloadComponentsApp {
|
|||
let progress_bar_input = self.progress_bar.sender().clone();
|
||||
|
||||
std::thread::spawn(move || {
|
||||
tracing::info!("Installing wine");
|
||||
|
||||
// Install DXVK
|
||||
tracing::info!("Installing DXVK");
|
||||
|
||||
|
@ -434,7 +432,7 @@ impl SimpleAsyncComponent for DownloadComponentsApp {
|
|||
tracing::error!("Failed to download dxvk: {err}");
|
||||
|
||||
sender.output(Self::Output::Toast {
|
||||
title: String::from("Failed to download dxvk"),
|
||||
title: tr("dxvk-download-error"),
|
||||
description: Some(err.to_string())
|
||||
});
|
||||
}
|
||||
|
@ -443,7 +441,7 @@ impl SimpleAsyncComponent for DownloadComponentsApp {
|
|||
tracing::error!("Failed to unpack dxvk: {err}");
|
||||
|
||||
sender.output(Self::Output::Toast {
|
||||
title: String::from("Failed to unpack dxvk"),
|
||||
title: tr("dxvk-unpack-error"),
|
||||
description: Some(err.clone())
|
||||
});
|
||||
}
|
||||
|
@ -464,7 +462,7 @@ impl SimpleAsyncComponent for DownloadComponentsApp {
|
|||
tracing::error!("Failed to initialize dxvk installer: {err}");
|
||||
|
||||
sender.output(Self::Output::Toast {
|
||||
title: String::from("Failed to initialize dxvk installer"),
|
||||
title: tr("dxvk-install-failed"),
|
||||
description: Some(err.to_string())
|
||||
});
|
||||
}
|
||||
|
@ -499,7 +497,7 @@ impl SimpleAsyncComponent for DownloadComponentsApp {
|
|||
tracing::error!("Failed to apply DXVK: {err}");
|
||||
|
||||
sender.output(Self::Output::Toast {
|
||||
title: String::from("Failed to apply DXVK"),
|
||||
title: tr("dxvk-apply-error"),
|
||||
description: Some(err.to_string())
|
||||
});
|
||||
}
|
||||
|
|
|
@ -29,12 +29,12 @@ impl SimpleAsyncComponent for FinishApp {
|
|||
set_vexpand: true,
|
||||
|
||||
gtk::Label {
|
||||
set_label: "Everything's done!",
|
||||
set_label: &tr("finish-title"),
|
||||
add_css_class: "title-1"
|
||||
},
|
||||
|
||||
gtk::Label {
|
||||
set_label: "All the basic components were downloaded. Now you can restart the launcher and download the game. Welcome to our club!",
|
||||
set_label: &tr("finish-message"),
|
||||
|
||||
set_justify: gtk::Justification::Center,
|
||||
set_wrap: true,
|
||||
|
@ -52,14 +52,14 @@ impl SimpleAsyncComponent for FinishApp {
|
|||
set_spacing: 8,
|
||||
|
||||
gtk::Button {
|
||||
set_label: "Restart",
|
||||
set_label: &tr("restart"),
|
||||
set_css_classes: &["suggested-action", "pill"],
|
||||
|
||||
connect_clicked => FinishAppMsg::Restart
|
||||
},
|
||||
|
||||
gtk::Button {
|
||||
set_label: "Exit",
|
||||
set_label: &tr("exit"),
|
||||
add_css_class: "pill",
|
||||
|
||||
connect_clicked => FinishAppMsg::Exit
|
||||
|
|
|
@ -134,7 +134,7 @@ impl SimpleComponent for FirstRunApp {
|
|||
toast_overlay,
|
||||
carousel,
|
||||
|
||||
title: String::from("Welcome")
|
||||
title: tr("welcome")
|
||||
};
|
||||
|
||||
let toast_overlay = &model.toast_overlay;
|
||||
|
@ -156,37 +156,37 @@ impl SimpleComponent for FirstRunApp {
|
|||
|
||||
match msg {
|
||||
FirstRunAppMsg::ScrollToTosWarning => {
|
||||
self.title = String::from("ToS Warning");
|
||||
self.title = tr("tos-violation-warning");
|
||||
|
||||
self.carousel.scroll_to(self.tos_warning.widget(), true);
|
||||
}
|
||||
|
||||
FirstRunAppMsg::ScrollToDependencies => {
|
||||
self.title = String::from("Dependencies");
|
||||
self.title = tr("dependencies");
|
||||
|
||||
self.carousel.scroll_to(self.dependencies.widget(), true);
|
||||
}
|
||||
|
||||
FirstRunAppMsg::ScrollToDefaultPaths => {
|
||||
self.title = String::from("Default paths");
|
||||
self.title = tr("default-paths");
|
||||
|
||||
self.carousel.scroll_to(self.default_paths.widget(), true);
|
||||
}
|
||||
|
||||
FirstRunAppMsg::ScrollToSelectVoiceovers => {
|
||||
self.title = String::from("Select voiceovers");
|
||||
self.title = tr("select-voice-packages");
|
||||
|
||||
self.carousel.scroll_to(self.select_voiceovers.widget(), true);
|
||||
}
|
||||
|
||||
FirstRunAppMsg::ScrollToDownloadComponents => {
|
||||
self.title = String::from("Download components");
|
||||
self.title = tr("download-components");
|
||||
|
||||
self.carousel.scroll_to(self.download_components.widget(), true);
|
||||
}
|
||||
|
||||
FirstRunAppMsg::ScrollToFinish => {
|
||||
self.title = String::from("Finish");
|
||||
self.title = tr("finish");
|
||||
|
||||
self.carousel.scroll_to(self.finish.widget(), true);
|
||||
}
|
||||
|
|
|
@ -36,7 +36,7 @@ impl SimpleAsyncComponent for SelectVoiceoversApp {
|
|||
set_vexpand: true,
|
||||
|
||||
gtk::Label {
|
||||
set_label: "Select voice packages",
|
||||
set_label: &tr("select-voice-packages"),
|
||||
add_css_class: "title-1"
|
||||
}
|
||||
},
|
||||
|
@ -46,7 +46,7 @@ impl SimpleAsyncComponent for SelectVoiceoversApp {
|
|||
set_vexpand: true,
|
||||
|
||||
adw::ActionRow {
|
||||
set_title: "English",
|
||||
set_title: &tr("english"),
|
||||
|
||||
#[local_ref]
|
||||
add_suffix = english -> gtk::Switch {
|
||||
|
@ -56,7 +56,7 @@ impl SimpleAsyncComponent for SelectVoiceoversApp {
|
|||
},
|
||||
|
||||
adw::ActionRow {
|
||||
set_title: "Japanese",
|
||||
set_title: &tr("japanese"),
|
||||
|
||||
#[local_ref]
|
||||
add_suffix = japanese -> gtk::Switch {
|
||||
|
@ -65,7 +65,7 @@ impl SimpleAsyncComponent for SelectVoiceoversApp {
|
|||
},
|
||||
|
||||
adw::ActionRow {
|
||||
set_title: "Korean",
|
||||
set_title: &tr("korean"),
|
||||
|
||||
#[local_ref]
|
||||
add_suffix = korean -> gtk::Switch {
|
||||
|
@ -74,7 +74,7 @@ impl SimpleAsyncComponent for SelectVoiceoversApp {
|
|||
},
|
||||
|
||||
adw::ActionRow {
|
||||
set_title: "Chinese",
|
||||
set_title: &tr("chinese"),
|
||||
|
||||
#[local_ref]
|
||||
add_suffix = chinese -> gtk::Switch {
|
||||
|
@ -93,14 +93,14 @@ impl SimpleAsyncComponent for SelectVoiceoversApp {
|
|||
set_spacing: 8,
|
||||
|
||||
gtk::Button {
|
||||
set_label: "Continue",
|
||||
set_label: &tr("continue"),
|
||||
set_css_classes: &["suggested-action", "pill"],
|
||||
|
||||
connect_clicked => SelectVoiceoversAppMsg::Continue
|
||||
},
|
||||
|
||||
gtk::Button {
|
||||
set_label: "Exit",
|
||||
set_label: &tr("exit"),
|
||||
add_css_class: "pill",
|
||||
|
||||
connect_clicked => SelectVoiceoversAppMsg::Exit
|
||||
|
|
|
@ -5,6 +5,7 @@ use adw::prelude::*;
|
|||
|
||||
use anime_launcher_sdk::is_available;
|
||||
|
||||
use crate::i18n::*;
|
||||
use super::main::FirstRunAppMsg;
|
||||
|
||||
pub struct TosWarningApp;
|
||||
|
@ -30,66 +31,16 @@ impl SimpleAsyncComponent for TosWarningApp {
|
|||
set_vexpand: true,
|
||||
|
||||
gtk::Label {
|
||||
set_label: "ToS violation warning",
|
||||
set_label: &tr("tos-violation-warning"),
|
||||
add_css_class: "title-1"
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
gtk::Box {
|
||||
set_orientation: gtk::Orientation::Vertical,
|
||||
set_margin_top: 32,
|
||||
set_spacing: 12,
|
||||
set_hexpand: true,
|
||||
|
||||
// TODO: use some kind of multiline text field
|
||||
|
||||
gtk::Label {
|
||||
set_label: "This launcher is an unofficial tool, in no way related to miHoYo nor COGNOSPHERE.",
|
||||
|
||||
set_wrap: true,
|
||||
set_halign: gtk::Align::Center
|
||||
},
|
||||
|
||||
gtk::Label {
|
||||
set_label: "This tool is designed to facilitate playing Genshin Impact on Linux, and was built with the sole purpose of installing and running the game with less hassle.",
|
||||
|
||||
set_wrap: true,
|
||||
set_halign: gtk::Align::Center
|
||||
},
|
||||
|
||||
gtk::Label {
|
||||
set_label: "It does so by using existing components and making the experience simple for the user.",
|
||||
|
||||
set_wrap: true,
|
||||
set_halign: gtk::Align::Center
|
||||
},
|
||||
|
||||
gtk::Label {
|
||||
set_label: "However, some components used here likely break the miHoYo Terms of Service for Genshin Impact.",
|
||||
|
||||
set_wrap: true,
|
||||
set_halign: gtk::Align::Center
|
||||
},
|
||||
|
||||
gtk::Label {
|
||||
set_label: "If you are using this launcher, your player account could become identified as TOS-non-compliant by miHoYo/COGNOSPHERE.",
|
||||
|
||||
set_wrap: true,
|
||||
set_halign: gtk::Align::Center
|
||||
},
|
||||
|
||||
gtk::Label {
|
||||
set_label: "If this happens, as your account would be disobeying TOS, miHoYo/COGNOSPHERE are free to do what they want. Including banning.",
|
||||
|
||||
set_wrap: true,
|
||||
set_halign: gtk::Align::Center
|
||||
},
|
||||
|
||||
gtk::Label {
|
||||
set_label: "If you understand the risk of trying to play the game in an unofficial capacity, press OK and let's go researching the world of Teyvat!",
|
||||
|
||||
set_wrap: true,
|
||||
set_halign: gtk::Align::Center
|
||||
}
|
||||
add = &adw::PreferencesGroup {
|
||||
gtk::Label {
|
||||
set_label: &tr("tos-violation-warning-message"),
|
||||
set_wrap: true,
|
||||
set_selectable: true
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -103,14 +54,14 @@ impl SimpleAsyncComponent for TosWarningApp {
|
|||
set_spacing: 8,
|
||||
|
||||
gtk::Button {
|
||||
set_label: "Continue",
|
||||
set_label: &tr("continue"),
|
||||
set_css_classes: &["suggested-action", "pill"],
|
||||
|
||||
connect_clicked => TosWarningAppMsg::Continue
|
||||
},
|
||||
|
||||
gtk::Button {
|
||||
set_label: "Exit",
|
||||
set_label: &tr("exit"),
|
||||
add_css_class: "pill",
|
||||
|
||||
connect_clicked => TosWarningAppMsg::Exit
|
||||
|
|
|
@ -3,6 +3,7 @@ use relm4::component::*;
|
|||
|
||||
use adw::prelude::*;
|
||||
|
||||
use crate::i18n::*;
|
||||
use super::main::FirstRunAppMsg;
|
||||
|
||||
pub struct WelcomeApp;
|
||||
|
@ -36,9 +37,9 @@ impl SimpleAsyncComponent for WelcomeApp {
|
|||
set_margin_top: 32,
|
||||
add_css_class: "title-1"
|
||||
},
|
||||
|
||||
|
||||
gtk::Label {
|
||||
set_label: "Hi there! Welcome to the An Anime Game Launcher. We need to prepare some stuff and download default components before you could run the game",
|
||||
set_label: &tr("welcome-page-message"),
|
||||
|
||||
set_justify: gtk::Justification::Center,
|
||||
set_wrap: true,
|
||||
|
@ -56,7 +57,7 @@ impl SimpleAsyncComponent for WelcomeApp {
|
|||
set_spacing: 8,
|
||||
|
||||
gtk::Button {
|
||||
set_label: "Continue",
|
||||
set_label: &tr("continue"),
|
||||
set_css_classes: &["suggested-action", "pill"],
|
||||
|
||||
connect_clicked => WelcomeAppMsg::Continue
|
||||
|
|
Loading…
Reference in a new issue