From fab830c994f7b91c45232206d451373373977520 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Wed, 25 Feb 2026 09:25:51 -0700 Subject: [PATCH] Translate desktop and metainfo with xdgen --- Cargo.lock | 60 +++++++++++++++++----- Cargo.toml | 1 + build.rs | 22 ++++++++ i18n/ar/cosmic_player.ftl | 6 +++ i18n/cs/cosmic_player.ftl | 6 +++ i18n/en/cosmic_player.ftl | 6 +++ i18n/es/cosmic_player.ftl | 6 +++ i18n/hu/cosmic_player.ftl | 6 +++ i18n/it/cosmic_player.ftl | 6 +++ i18n/pl/cosmic_player.ftl | 6 +++ i18n/pt-BR/cosmic_player.ftl | 6 +++ i18n/pt/cosmic_player.ftl | 6 +++ i18n/ru/cosmic_player.ftl | 5 ++ i18n/sk/cosmic_player.ftl | 6 +++ i18n/sv/cosmic_player.ftl | 6 +++ i18n/zh-CN/cosmic_player.ftl | 4 ++ justfile | 4 +- res/com.system76.CosmicPlayer.desktop | 25 +-------- res/com.system76.CosmicPlayer.metainfo.xml | 40 ++++++--------- 19 files changed, 164 insertions(+), 63 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2fb9cc5..61addb3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1139,6 +1139,7 @@ dependencies = [ "tokio", "url", "vergen", + "xdgen", ] [[package]] @@ -1887,6 +1888,16 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "freedesktop_entry_parser" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b368437186ec63ceb50d0832ee1ebcb5878037fe16ead1c68081d4aee0d140a" +dependencies = [ + "indexmap", + "nom", +] + [[package]] name = "fsevent-sys" version = "4.1.0" @@ -2480,12 +2491,6 @@ dependencies = [ "foldhash 0.2.0", ] -[[package]] -name = "hashbrown" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51" - [[package]] name = "heck" version = "0.4.1" @@ -3058,12 +3063,12 @@ checksum = "40fac9d56ed6437b198fddba683305e8e2d651aa42647f00f5ae542e7f5c94a2" [[package]] name = "indexmap" -version = "2.14.0" +version = "2.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" dependencies = [ "equivalent", - "hashbrown 0.17.0", + "hashbrown 0.16.1", "serde", "serde_core", ] @@ -5457,7 +5462,7 @@ dependencies = [ "cfg-expr", "heck 0.5.0", "pkg-config", - "toml 1.1.2+spec-1.1.0", + "toml 1.1.0+spec-1.1.0", "version-compare", ] @@ -5703,9 +5708,9 @@ dependencies = [ [[package]] name = "toml" -version = "1.1.2+spec-1.1.0" +version = "1.1.0+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee" +checksum = "f8195ca05e4eb728f4ba94f3e3291661320af739c4e43779cbdfae82ab239fcc" dependencies = [ "indexmap", "serde_core", @@ -5727,9 +5732,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.25.11+spec-1.1.0" +version = "0.25.6+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b59c4d22ed448339746c59b905d24568fcbb3ab65a500494f7b8c3e97739f2b" +checksum = "0db3bae107c9522f86d361697dee1d7386a2ddcf659d5aea5159819a21a3c4a7" dependencies = [ "indexmap", "toml_datetime", @@ -7360,6 +7365,18 @@ version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2fb433233f2df9344722454bc7e96465c9d03bff9d77c248f9e7523fe79585b5" +[[package]] +name = "xdgen" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25af88f104f06d5aeb80c77e5eb85e6f6f355f86f6e34307a14befd716efe4bf" +dependencies = [ + "fluent", + "freedesktop_entry_parser", + "unic-langid", + "xmltree", +] + [[package]] name = "xkbcommon" version = "0.7.0" @@ -7404,12 +7421,27 @@ dependencies = [ "bytemuck", ] +[[package]] +name = "xml" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "636f85e5ca6488e96401b61eb7de54f4e44755c988af0f52cf90230c312a1a89" + [[package]] name = "xml-rs" version = "0.8.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f" +[[package]] +name = "xmltree" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbc04313cab124e498ab1724e739720807b6dc405b9ed0edc5860164d2e4ff70" +dependencies = [ + "xml", +] + [[package]] name = "xmlwriter" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index 641031d..e3f5135 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,6 +6,7 @@ rust-version = "1.93" [build-dependencies] vergen = { version = "8", features = ["git", "gitcl"] } +xdgen = "0.1" [dependencies] ashpd = { version = "0.12", optional = true } diff --git a/build.rs b/build.rs index bc2427f..c354dda 100644 --- a/build.rs +++ b/build.rs @@ -1,5 +1,27 @@ use vergen::EmitBuilder; +use std::{env, fs, path::PathBuf}; +use xdgen::{App, Context, FluentString}; fn main() { EmitBuilder::builder().git_sha(true).emit().unwrap(); + + let id = "com.system76.CosmicPlayer"; + let ctx = Context::new("i18n", env::var("CARGO_PKG_NAME").unwrap()).unwrap(); + let app = App::new(FluentString("xdg-name")) + .comment(FluentString("xdg-comment")) + .keywords(FluentString("xdg-keywords")); + let output = PathBuf::from("target/xdgen"); + fs::create_dir_all(&output).unwrap(); + fs::write( + output.join(format!("{}.desktop", id)), + app.expand_desktop(format!("res/{}.desktop", id), &ctx) + .unwrap(), + ) + .unwrap(); + fs::write( + output.join(format!("{}.metainfo.xml", id)), + app.expand_metainfo(format!("res/{}.metainfo.xml", id), &ctx) + .unwrap(), + ) + .unwrap(); } diff --git a/i18n/ar/cosmic_player.ftl b/i18n/ar/cosmic_player.ftl index 77b8b43..39055e0 100644 --- a/i18n/ar/cosmic_player.ftl +++ b/i18n/ar/cosmic_player.ftl @@ -46,3 +46,9 @@ ab-repeat = تكرار A-B ab-repeat-set-a = تكرار A-B (A) ab-repeat-set-b = تكرار A-B (B) ab-repeat-clear = امحُ تكرار A-B + +# XDG Metadata + +xdg-name = مشغّل وسائط COSMIC +xdg-comment = مشغّل وسائط لسطح مكتب COSMIC +xdg-keywords = فيلم;مقطع;فيديو;صوت diff --git a/i18n/cs/cosmic_player.ftl b/i18n/cs/cosmic_player.ftl index c580b82..3830923 100644 --- a/i18n/cs/cosmic_player.ftl +++ b/i18n/cs/cosmic_player.ftl @@ -31,3 +31,9 @@ ab-repeat = Opakování A-B ab-repeat-set-a = Opakování A-B (A) ab-repeat-set-b = Opakování A-B (B) ab-repeat-clear = Vymazat opakování A-B + +# XDG Metadata + +xdg-name = Přehrávač médií COSMIC +xdg-comment = Přehrávač médií pro pracovní prostředí COSMIC +xdg-keywords = audio;film;hudba;video;média;zvuk; diff --git a/i18n/en/cosmic_player.ftl b/i18n/en/cosmic_player.ftl index 505e312..36cb2b2 100644 --- a/i18n/en/cosmic_player.ftl +++ b/i18n/en/cosmic_player.ftl @@ -45,3 +45,9 @@ ab-repeat = A-B Repeat ab-repeat-set-a = A-B Repeat (A) ab-repeat-set-b = A-B Repeat (B) ab-repeat-clear = Clear A-B Repeat + +# XDG Metadata + +xdg-name = COSMIC Media Player +xdg-comment = Media player for the COSMIC desktop +xdg-keywords = Audio;Film;Movie;Music;Sound;Video; diff --git a/i18n/es/cosmic_player.ftl b/i18n/es/cosmic_player.ftl index 8171fb7..3c96c7a 100644 --- a/i18n/es/cosmic_player.ftl +++ b/i18n/es/cosmic_player.ftl @@ -36,3 +36,9 @@ open-recent-media-folder = Abrir carpetas multimedia recientes close-media-folder = Cerrar carpeta multimedia quit = Salir off = Apagado + +# XDG Metadata + +xdg-name = Reproductor de medios COSMIC +xdg-comment = Reproductor de medios para el escritorio COSMIC +xdg-keywords = Audio;Película;Música;Vídeo;Sonido;Reproductor; diff --git a/i18n/hu/cosmic_player.ftl b/i18n/hu/cosmic_player.ftl index 9fe8a1c..46d70ad 100644 --- a/i18n/hu/cosmic_player.ftl +++ b/i18n/hu/cosmic_player.ftl @@ -46,3 +46,9 @@ ab-repeat = A–B ismétlés ab-repeat-set-a = A–B ismétlés (A) ab-repeat-set-b = A–B ismétlés (B) ab-repeat-clear = A–B ismétlés törlése + +# XDG Metadata + +xdg-name = COSMIC Médialejátszó +xdg-comment = Médialejátszó a COSMIC asztali környezethez +xdg-keywords = hang;film;zene;videó;média;lejátszó; diff --git a/i18n/it/cosmic_player.ftl b/i18n/it/cosmic_player.ftl index 25575b2..075134d 100644 --- a/i18n/it/cosmic_player.ftl +++ b/i18n/it/cosmic_player.ftl @@ -36,3 +36,9 @@ open-recent-media-folder = Apri cartella multimediale recente close-media-folder = Chiudi cartella multimediale quit = Esci off = Off + +# XDG Metadata + +xdg-name = COSMIC Media Player +xdg-comment = Lettore multimediale di COSMIC +xdg-keywords = Audio;Video;Musica;Film;Suoni;Riproduzione; diff --git a/i18n/pl/cosmic_player.ftl b/i18n/pl/cosmic_player.ftl index 1a2cc16..451a2f4 100644 --- a/i18n/pl/cosmic_player.ftl +++ b/i18n/pl/cosmic_player.ftl @@ -46,3 +46,9 @@ ab-repeat-set-a = A-B Powtarzanie (A) ab-repeat-set-b = A-B Powtarzanie (B) ab-repeat-clear = Wyczyść Powtarzanie A-B previous-frame = Poprzednia Klatka + +# XDG Metadata + +xdg-name = Odtwarzacz Multimediów COSMIC +xdg-comment = Odtwarzacz Multimediów dla środowiska graficznego COSMIC +xdg-keywords = Audio;Dźwięki;Filmy;Muzyka;Vídeo;Media;Odtwarzacz;Multimedia; diff --git a/i18n/pt-BR/cosmic_player.ftl b/i18n/pt-BR/cosmic_player.ftl index 46cb09f..0736a26 100644 --- a/i18n/pt-BR/cosmic_player.ftl +++ b/i18n/pt-BR/cosmic_player.ftl @@ -46,3 +46,9 @@ ab-repeat = Repetir A-B ab-repeat-set-a = Repetir A-B (A) ab-repeat-set-b = Repetir A-B (B) ab-repeat-clear = Limpar repetição A-B + +# XDG Metadata + +xdg-name = Reprodutor de Mídia +xdg-comment = Reprodutor de mídia do desktop COSMIC +xdg-keywords = Audio;Filme;Música;Som;Vídeo;Media;Player; diff --git a/i18n/pt/cosmic_player.ftl b/i18n/pt/cosmic_player.ftl index 4459fc8..0b02aa3 100644 --- a/i18n/pt/cosmic_player.ftl +++ b/i18n/pt/cosmic_player.ftl @@ -35,3 +35,9 @@ open-media-folder = Abrir pasta de multimédias... open-recent-media-folder = Abrir pasta recente de multimédias close-media-folder = Fechar pasta de multimédia quit = Sair + +# XDG Metadata + +xdg-name = Reprodutor de Mídia +xdg-comment = Reprodutor de mídia do desktop COSMIC +xdg-keywords = Audio;Filme;Música;Som;Vídeo;Media;Player; diff --git a/i18n/ru/cosmic_player.ftl b/i18n/ru/cosmic_player.ftl index 512d61e..1e69f0c 100644 --- a/i18n/ru/cosmic_player.ftl +++ b/i18n/ru/cosmic_player.ftl @@ -39,3 +39,8 @@ ab-repeat = Повтор A–B ab-repeat-set-a = Повтор A–B (уст. A) ab-repeat-set-b = Повтор A–B (уст. B) ab-repeat-clear = Повтор A–B (очистить) + +# XDG Metadata + +xdg-name = Медиаплеер +xdg-keywords = Аудио;Фильм;Музыка;Видео;Медиа;Звук;Мультимедиа;Медиаплеер; diff --git a/i18n/sk/cosmic_player.ftl b/i18n/sk/cosmic_player.ftl index 268c6b4..1a7faac 100644 --- a/i18n/sk/cosmic_player.ftl +++ b/i18n/sk/cosmic_player.ftl @@ -30,3 +30,9 @@ open-media-folder = Otvoriť priečinok s médiami... open-recent-media-folder = Otvoriť posledný priečinok s médiami close-media-folder = Zatvoriť priečinok s médiami quit = Ukončiť + +# XDG Metadata + +xdg-name = Prehrávač Médií COSMIC +xdg-comment = Prehrávač médií pre pracovné prostredie COSMIC +xdg-keywords = audio;film;hudba;video;prehrávač;média;zvuk; diff --git a/i18n/sv/cosmic_player.ftl b/i18n/sv/cosmic_player.ftl index 40f6273..c6c5ab2 100644 --- a/i18n/sv/cosmic_player.ftl +++ b/i18n/sv/cosmic_player.ftl @@ -46,3 +46,9 @@ ab-repeat = A-B-upprepning ab-repeat-set-a = A-B-upprepning (A) ab-repeat-set-b = A-B-upprepning (B) ab-repeat-clear = Rensa A-B-upprepning + +# XDG Metadata + +xdg-name = COSMIC Mediaspelare +xdg-comment = Mediaspelare för skrivbordsmiljön COSMIC +xdg-keywords = Ljud;Film;Musik;Video;Media; diff --git a/i18n/zh-CN/cosmic_player.ftl b/i18n/zh-CN/cosmic_player.ftl index f8091e1..c1a8e93 100644 --- a/i18n/zh-CN/cosmic_player.ftl +++ b/i18n/zh-CN/cosmic_player.ftl @@ -46,3 +46,7 @@ ab-repeat = A-B 重复 ab-repeat-set-a = A-B 重复(A) ab-repeat-set-b = A-B 重复(B) ab-repeat-clear = 清除 A-B 重复 + +# XDG Metadata + +xdg-name = COSMIC 媒体播放器 diff --git a/justfile b/justfile index 04c410a..003fa0f 100644 --- a/justfile +++ b/justfile @@ -13,11 +13,11 @@ bin-src := cargo-target-dir / 'release' / name bin-dst := base-dir / 'bin' / name desktop := APPID + '.desktop' -desktop-src := 'res' / desktop +desktop-src := 'target/xdgen' / desktop desktop-dst := clean(rootdir / prefix) / 'share' / 'applications' / desktop metainfo := APPID + '.metainfo.xml' -metainfo-src := 'res' / metainfo +metainfo-src := 'target/xdgen' / metainfo metainfo-dst := clean(rootdir / prefix) / 'share' / 'metainfo' / metainfo thumbnailer := APPID + '.thumbnailer' diff --git a/res/com.system76.CosmicPlayer.desktop b/res/com.system76.CosmicPlayer.desktop index d33bbd1..d12fdc4 100644 --- a/res/com.system76.CosmicPlayer.desktop +++ b/res/com.system76.CosmicPlayer.desktop @@ -1,18 +1,6 @@ -#TODO: more build-out, desktop actions, translations? [Desktop Entry] Name=COSMIC Media Player -Name[ar]=مشغّل وسائط COSMIC -Name[cs]=Přehrávač médií COSMIC -Name[zh_CN]=COSMIC 媒体播放器 -Name[hu]=COSMIC Médialejátszó -Name[pl]=Odtwarzacz Multimediów COSMIC -Name[pt_BR]=Reprodutor de Mídia -Name[pt]=Reprodutor de Mídia -Name[ru]=Медиаплеер -Name[sk]=Prehrávač Médií COSMIC -Name[sv]=COSMIC Mediaspelare -Name[es]=Reproductor de medios COSMIC -Name[it]=COSMIC Media Player +Comment=Media player for the COSMIC desktop Exec=cosmic-player %U Terminal=false Type=Application @@ -21,14 +9,3 @@ MimeType=application/mxf;application/ram;application/sdp;application/vnd.apple.m Icon=com.system76.CosmicPlayer Categories=COSMIC;AudioVideo;Player;Video; Keywords=Audio;Film;Movie;Music;Sound;Video; -Keywords[ar]=فيلم;مقطع;فيديو;صوت -Keywords[cs]=audio;film;hudba;video;média;zvuk; -Keywords[hu]=hang;film;zene;videó;média;lejátszó; -Keywords[pl]=Audio;Dźwięki;Filmy;Muzyka;Vídeo;Media;Odtwarzacz;Multimedia; -Keywords[pt_BR]=Audio;Filme;Música;Som;Vídeo;Media;Player; -Keywords[ru]=Аудио;Фильм;Музыка;Видео;Медиа;Звук;Мультимедиа;Медиаплеер; -Keywords[pt]=Audio;Filme;Música;Som;Vídeo;Media;Player; -Keywords[sk]=audio;film;hudba;video;prehrávač;média;zvuk; -Keywords[sv]=Ljud;Film;Musik;Video;Media; -Keywords[es]=Audio;Película;Música;Vídeo;Sonido;Reproductor; -Keywords[it]=Audio;Video;Musica;Film;Suoni;Riproduzione; diff --git a/res/com.system76.CosmicPlayer.metainfo.xml b/res/com.system76.CosmicPlayer.metainfo.xml index 5dc3403..fdae66e 100644 --- a/res/com.system76.CosmicPlayer.metainfo.xml +++ b/res/com.system76.CosmicPlayer.metainfo.xml @@ -1,4 +1,4 @@ - + com.system76.CosmicPlayer CC0-1.0 @@ -9,33 +9,15 @@ https://github.com/pop-os/cosmic-player https://github.com/pop-os/cosmic-player COSMIC Media Player - مشغّل وسائط COSMIC - Přehrávač médií COSMIC - COSMIC Médialejátszó - Odtwarzacz Multimediów COSMIC - Reprodutor de Mídia - Reprodutor de Mídia - Prehrávač Médií COSMIC - Reproductor de medios COSMIC - COSMIC Media Player - COSMIC Mediaspelare Media player for the COSMIC desktop - مشغّل وسائط لسطح مكتب COSMIC - Přehrávač médií pro pracovní prostředí COSMIC - Médialejátszó a COSMIC asztali környezethez - Odtwarzacz Multimediów dla środowiska graficznego COSMIC - Reprodutor de mídia do desktop COSMIC - Reprodutor de mídia do desktop COSMIC - Prehrávač médií pre pracovné prostredie COSMIC - Reproductor de medios para el escritorio COSMIC - Lettore multimediale di COSMIC - Mediaspelare för skrivbordsmiljön COSMIC

Media player for the COSMIC desktop

مشغّل وسائط لسطح مكتب COSMIC

Přehrávač médií pro pracovní prostředí COSMIC

Médialejátszó a COSMIC asztali környezethez

-

Odtwarzacz Multimediów dla środowiska graficznego COSMIC

+

Odtwarzacz Multimediów dla środowiska graficznego COSMIC

Reprodutor de mídia do desktop COSMIC

Reprodutor de mídia do desktop COSMIC

Prehrávač médií pre pracovné prostredie COSMIC

@@ -43,8 +25,20 @@

Reproductor de medios para el escritorio COSMIC

Mediaspelare för skrivbordsmiljön COSMIC

+ + Audio + Film + Movie + Music + Sound + Video + com.system76.CosmicPlayer.desktop - https://raw.githubusercontent.com/pop-os/cosmic-player/master/res/icons/hicolor/256x256/apps/com.system76.CosmicPlayer.svg + https://raw.githubusercontent.com/pop-os/cosmic-player/master/res/icons/hicolor/256x256/apps/com.system76.CosmicPlayer.svg com.system76.CosmicApplication