diff --git a/.github/ISSUE_TEMPLATE/bug.yaml b/.github/ISSUE_TEMPLATE/bug.yaml
index 0977f965..9d245b5f 100644
--- a/.github/ISSUE_TEMPLATE/bug.yaml
+++ b/.github/ISSUE_TEMPLATE/bug.yaml
@@ -7,6 +7,7 @@ body:
label: Ludusavi version
description: If you're not using the latest version, please update and make sure the problem still occurs.
options:
+ - v0.15.0
- v0.14.0
- v0.13.1
- v0.13.0
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 59bf90cf..bde07baa 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,16 +1,19 @@
-## Unreleased
+## v0.15.0 (2022-11-07)
* Added:
* Steam shortcuts for non-Steam games are now detected.
On all platforms, the shortcut's "start in" folder is used as the `` path.
On Linux, the shortcut's app ID is used to check `steamapps/compatdata` for Proton saves.
* In Heroic roots, Ludusavi can now recognize games by their GOG ID.
+ This helps resolve cases where Heroic and Ludusavi use different titles for the same game.
The CLI `find` command now also has a `--gog-id` option.
* GUI: On the Steam Deck, an "exit" button has been added to the other screen,
to make it easier to exit the program while using game mode.
Ludusavi checks if `/home/deck` exists in order to determine whether it is running on the Steam Deck.
* CLI: `--config` option to set a custom config directory.
([Contributed by sluedecke](https://github.com/mtkennerly/ludusavi/pull/153))
+ * Updated translations.
+ (Thanks to contributors on the [Crowdin project](https://crowdin.com/project/ludusavi))
* Changed:
* Manifest updates now use gzip compression, cutting the download size to about 10% (e.g., 11.4 MiB -> 1.5 MiB).
* Fixed:
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 25e1dc68..2c31e2a3 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -57,18 +57,12 @@ pip install aiohttp toml
Also install the Crowdin CLI manually.
-#### Automated
-Run:
-
-```bash
-invoke prerelease
-```
-
-#### Manual
+#### Process
* Update version in CHANGELOG.md
* Update version in Cargo.toml
* Update version in assets/com.github.mtkennerly.ludusavi.metainfo.xml
including the `releases` section and the screenshot URL.
+* Run `invoke prerelease`
* Update the translation percentages in src/lang.rs
* Run `cargo build` to update the version in Cargo.lock
* Add the new version to `.github/ISSUE_TEMPLATE/*.yaml`.
diff --git a/Cargo.lock b/Cargo.lock
index d2be6d67..17b93500 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1958,7 +1958,7 @@ dependencies = [
[[package]]
name = "ludusavi"
-version = "0.14.0"
+version = "0.15.0"
dependencies = [
"base64",
"byte-unit",
diff --git a/Cargo.toml b/Cargo.toml
index 81f2d2f6..6c0fb780 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "ludusavi"
-version = "0.14.0"
+version = "0.15.0"
authors = ["mtkennerly "]
edition = "2021"
description = "Game save backup tool"
diff --git a/assets/com.github.mtkennerly.ludusavi.metainfo.xml b/assets/com.github.mtkennerly.ludusavi.metainfo.xml
index 290627f8..303f8890 100644
--- a/assets/com.github.mtkennerly.ludusavi.metainfo.xml
+++ b/assets/com.github.mtkennerly.ludusavi.metainfo.xml
@@ -23,13 +23,14 @@
- https://raw.githubusercontent.com/mtkennerly/ludusavi/v0.14.0/docs/sample-gui-linux.png
+ https://raw.githubusercontent.com/mtkennerly/ludusavi/v0.15.0/docs/sample-gui-linux.png
Graphical user interface
com.github.mtkennerly.ludusavi.desktop
+
diff --git a/lang/ar-SA.ftl b/lang/ar-SA.ftl
index 260e5624..243ba40d 100644
--- a/lang/ar-SA.ftl
+++ b/lang/ar-SA.ftl
@@ -40,6 +40,7 @@ button-deselect-all = إلغاء تحديد الكل
button-enable-all = تفعيل الكل
button-disable-all = تعطيل الكل
button-customize = Customize
+button-exit = Exit
no-roots-are-configured = إضافة بعض الجذور لنسخ المزيد من البيانات احتياطياً.
config-is-invalid = خطأ: ملف التكوين غير صالح.
manifest-is-invalid = خطأ: ملف البيان غير صالح.
diff --git a/lang/de-DE.ftl b/lang/de-DE.ftl
index d1693844..57f25aa4 100644
--- a/lang/de-DE.ftl
+++ b/lang/de-DE.ftl
@@ -40,6 +40,7 @@ button-deselect-all = Alle abwählen
button-enable-all = Alle aktivieren
button-disable-all = Alle deaktivieren
button-customize = Anpassen
+button-exit = Exit
no-roots-are-configured = Fügen Sie einige Wurzeln hinzu, um noch mehr Daten zu sichern.
config-is-invalid = Fehler: Die Konfigurationsdatei ist ungültig.
manifest-is-invalid = Fehler: Die Manifest-Datei ist ungültig.
diff --git a/lang/eo-UY.ftl b/lang/eo-UY.ftl
index 5e5ad6a9..d1606a4c 100644
--- a/lang/eo-UY.ftl
+++ b/lang/eo-UY.ftl
@@ -40,6 +40,7 @@ button-deselect-all = Deselect all
button-enable-all = Enable all
button-disable-all = Disable all
button-customize = Customize
+button-exit = Exit
no-roots-are-configured = Add some roots to back up even more data.
config-is-invalid = Error: The config file is invalid.
manifest-is-invalid = Error: The manifest file is invalid.
diff --git a/lang/es-ES.ftl b/lang/es-ES.ftl
index bb851de1..5d4af8a5 100644
--- a/lang/es-ES.ftl
+++ b/lang/es-ES.ftl
@@ -40,6 +40,7 @@ button-deselect-all = Deseleccionar todos
button-enable-all = Habilitar todos
button-disable-all = Deshabilitar todos
button-customize = Customize
+button-exit = Exit
no-roots-are-configured = Añade algunas raíces para respaldar aún más datos.
config-is-invalid = Error: El archivo de configuración no es válido.
manifest-is-invalid = Error: El archivo de manifiesto no es válido.
diff --git a/lang/fil-PH.ftl b/lang/fil-PH.ftl
index 80b29979..0250af9a 100644
--- a/lang/fil-PH.ftl
+++ b/lang/fil-PH.ftl
@@ -40,6 +40,7 @@ button-deselect-all = Alisin ang lahat
button-enable-all = Enable ang lahat
button-disable-all = Disable ang lahat
button-customize = Customize
+button-exit = Exit
no-roots-are-configured = Paki-lagay mga roots upang mag-back up ng higit pang data.
config-is-invalid = Error: Invalid ang config file.
manifest-is-invalid = Error: Invalid ang manifest file.
diff --git a/lang/it-IT.ftl b/lang/it-IT.ftl
index 75d8aa90..c4a83ff1 100644
--- a/lang/it-IT.ftl
+++ b/lang/it-IT.ftl
@@ -40,6 +40,7 @@ button-deselect-all = Deseleziona tutto
button-enable-all = Attiva tutto
button-disable-all = Disattiva tutto
button-customize = Personalizza
+button-exit = Exit
no-roots-are-configured = Aggiungi alcune radici per eseguire il backup di ulteriori dati.
config-is-invalid = Errore: File di configurazione non valido.
manifest-is-invalid = Errore: File manifest non valido.
diff --git a/lang/ko-KR.ftl b/lang/ko-KR.ftl
index 95d2857c..f6fd522a 100644
--- a/lang/ko-KR.ftl
+++ b/lang/ko-KR.ftl
@@ -40,6 +40,7 @@ button-deselect-all = 모두 선택 해제
button-enable-all = 모두 활성화
button-disable-all = 모두 비활성화
button-customize = Customize
+button-exit = Exit
no-roots-are-configured = 최상위 디렉토리를 추가해서 더 많은 데이터를 백업하세요.
config-is-invalid = 오류: 설정 파일이 올바르지 않습니다.
manifest-is-invalid = 오류: 매니페스트 파일이 올바르지 않습니다.
diff --git a/lang/pl-PL.ftl b/lang/pl-PL.ftl
index 2959566f..e60bd541 100644
--- a/lang/pl-PL.ftl
+++ b/lang/pl-PL.ftl
@@ -40,6 +40,7 @@ button-deselect-all = Odznacz wszystkie
button-enable-all = Włącz wszystkie
button-disable-all = Wyłącz wszystkie
button-customize = Customize
+button-exit = Exit
no-roots-are-configured = Dodaj kilka katalogów głównych, aby utworzyć kopię większej ilości danych.
config-is-invalid = Błąd: Plik konfiguracji jest nieprawidłowy.
manifest-is-invalid = Błąd: Plik manifest jest nieprawidłowy.
diff --git a/lang/pt-BR.ftl b/lang/pt-BR.ftl
index 9c3efb17..b41e060b 100644
--- a/lang/pt-BR.ftl
+++ b/lang/pt-BR.ftl
@@ -16,10 +16,10 @@ badge-duplicates = DUPLICADOS
badge-duplicated = DUPLICADO
badge-ignored = IGNORADO
badge-redirected-from = DE: { $path }
-badge-redirecting-to = TO: { $path }
+badge-redirecting-to = PARA: { $path }
some-entries-failed = Algumas entradas não conseguiram processar; procure por { badge-failed } na saída para mais detalhes. Verifique se você pode acessar esses arquivos ou se os caminhos deles são muito longos.
cli-game-line-item-redirected = Redirecionado de: { $path }
-cli-game-line-item-redirecting = Redirecting to: { $path }
+cli-game-line-item-redirecting = Redirecionando para: { $path }
button-backup = Fazer backup
button-preview = Visualizar
button-restore = Restaurar
@@ -40,6 +40,7 @@ button-deselect-all = Desmarcar tudo
button-enable-all = Ativar tudo
button-disable-all = Desativar tudo
button-customize = Personalizar
+button-exit = Exit
no-roots-are-configured = Adicione algumas raízes para armazenar ainda mais dados.
config-is-invalid = Erro: O arquivo de configuração é inválido.
manifest-is-invalid = Erro: O arquivo de manifesto é inválido.
@@ -73,7 +74,7 @@ field-redirect-source =
field-redirect-target =
.placeholder = Alvo (novo local)
field-backup-excluded-items = Exclusões do backup:
-field-redirects = Redirects:
+field-redirects = Redirecionar:
# This appears next to the number of full backups that you'd like to keep.
# A full backup includes all save files for a game.
field-retention-full = Todos:
@@ -83,13 +84,13 @@ field-retention-differential = Diferencial:
field-backup-format = Formato:
field-backup-compression = Compressão:
# The compression level determines how much compresison we perform.
-field-backup-compression-level = Level:
-label-manifest = Manifest
+field-backup-compression-level = Nível:
+label-manifest = Manifesto
# This shows the time when we checked for an update to the manifest.
-label-checked = Checked
+label-checked = Verificado
# This shows the time when we found an update to the manifest.
-label-updated = Updated
-label-new = New
+label-updated = Atualizado
+label-new = Novo
store-epic = Epic
store-gog = GOG
store-gog-galaxy = GOG Galaxy
@@ -113,7 +114,7 @@ compression-zstd = Zstd
theme = Tema
theme-light = Claro
theme-dark = Escuro
-redirect-bidirectional = Bidirectional
+redirect-bidirectional = Bidirecional
explanation-for-exclude-store-screenshots =
Nos backups, exclui capturas de tela específicas de armazenamento. No momento, isso só se aplica
às capturas de tela de { store-steam } que você tirou. Se um jogo tem sua própria função de captura de tela
@@ -135,8 +136,8 @@ confirm-add-missing-roots = Adicionar estas origens?
no-missing-roots = Nenhuma origem adicional encontrada.
preparing-backup-target = Preparando o diretório de backup...
updating-manifest = Atualizando manifesto...
-saves-found = Save data found.
-no-saves-found = No save data found.
+saves-found = Dados salvos encontrados.
+no-saves-found = Não foram encontrados dados salvos.
# This is tacked on to form something like "Back up (no confirmation)",
# meaning we would perform an action without asking the user if they're sure.
-suffix-no-confirmation = no confirmation
+suffix-no-confirmation = sem confirmação
diff --git a/lang/zh-CN.ftl b/lang/zh-CN.ftl
index 1656bb2b..a2d5c942 100644
--- a/lang/zh-CN.ftl
+++ b/lang/zh-CN.ftl
@@ -40,6 +40,7 @@ button-deselect-all = 全不选
button-enable-all = 全部启用
button-disable-all = 全部禁用
button-customize = Customize
+button-exit = Exit
no-roots-are-configured = 添加一些根,以备份甚至更多的数据。
config-is-invalid = 错误:配置文件无效。
manifest-is-invalid = 错误:manifest 文件无效。
diff --git a/src/lang.rs b/src/lang.rs
index 20853ee2..d903c843 100644
--- a/src/lang.rs
+++ b/src/lang.rs
@@ -92,10 +92,10 @@ impl ToString for Language {
Self::Esperanto => "Esperanto (20%)",
Self::Filipino => "Filipino (57%)",
Self::German => "Deutsch (94%)",
- Self::Italian => "Italiano (100%)",
+ Self::Italian => "Italiano (99%)",
Self::Korean => "한국어 (47%)",
Self::Polish => "Polski (94%)",
- Self::PortugueseBrazilian => "Português brasileiro (94%)",
+ Self::PortugueseBrazilian => "Português brasileiro (99%)",
Self::Spanish => "Español (84%)",
}
.to_string()