Translate desktop and metainfo with xdgen

This commit is contained in:
Jeremy Soller 2026-02-25 09:25:51 -07:00 committed by Jacob Kauffmann
parent f3d6469bed
commit fab830c994
19 changed files with 164 additions and 63 deletions

60
Cargo.lock generated
View file

@ -1139,6 +1139,7 @@ dependencies = [
"tokio", "tokio",
"url", "url",
"vergen", "vergen",
"xdgen",
] ]
[[package]] [[package]]
@ -1887,6 +1888,16 @@ dependencies = [
"percent-encoding", "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]] [[package]]
name = "fsevent-sys" name = "fsevent-sys"
version = "4.1.0" version = "4.1.0"
@ -2480,12 +2491,6 @@ dependencies = [
"foldhash 0.2.0", "foldhash 0.2.0",
] ]
[[package]]
name = "hashbrown"
version = "0.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51"
[[package]] [[package]]
name = "heck" name = "heck"
version = "0.4.1" version = "0.4.1"
@ -3058,12 +3063,12 @@ checksum = "40fac9d56ed6437b198fddba683305e8e2d651aa42647f00f5ae542e7f5c94a2"
[[package]] [[package]]
name = "indexmap" name = "indexmap"
version = "2.14.0" version = "2.11.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5"
dependencies = [ dependencies = [
"equivalent", "equivalent",
"hashbrown 0.17.0", "hashbrown 0.16.1",
"serde", "serde",
"serde_core", "serde_core",
] ]
@ -5457,7 +5462,7 @@ dependencies = [
"cfg-expr", "cfg-expr",
"heck 0.5.0", "heck 0.5.0",
"pkg-config", "pkg-config",
"toml 1.1.2+spec-1.1.0", "toml 1.1.0+spec-1.1.0",
"version-compare", "version-compare",
] ]
@ -5703,9 +5708,9 @@ dependencies = [
[[package]] [[package]]
name = "toml" 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" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee" checksum = "f8195ca05e4eb728f4ba94f3e3291661320af739c4e43779cbdfae82ab239fcc"
dependencies = [ dependencies = [
"indexmap", "indexmap",
"serde_core", "serde_core",
@ -5727,9 +5732,9 @@ dependencies = [
[[package]] [[package]]
name = "toml_edit" 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" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b59c4d22ed448339746c59b905d24568fcbb3ab65a500494f7b8c3e97739f2b" checksum = "0db3bae107c9522f86d361697dee1d7386a2ddcf659d5aea5159819a21a3c4a7"
dependencies = [ dependencies = [
"indexmap", "indexmap",
"toml_datetime", "toml_datetime",
@ -7360,6 +7365,18 @@ version = "3.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2fb433233f2df9344722454bc7e96465c9d03bff9d77c248f9e7523fe79585b5" 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]] [[package]]
name = "xkbcommon" name = "xkbcommon"
version = "0.7.0" version = "0.7.0"
@ -7404,12 +7421,27 @@ dependencies = [
"bytemuck", "bytemuck",
] ]
[[package]]
name = "xml"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "636f85e5ca6488e96401b61eb7de54f4e44755c988af0f52cf90230c312a1a89"
[[package]] [[package]]
name = "xml-rs" name = "xml-rs"
version = "0.8.28" version = "0.8.28"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f" checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f"
[[package]]
name = "xmltree"
version = "0.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cbc04313cab124e498ab1724e739720807b6dc405b9ed0edc5860164d2e4ff70"
dependencies = [
"xml",
]
[[package]] [[package]]
name = "xmlwriter" name = "xmlwriter"
version = "0.1.0" version = "0.1.0"

View file

@ -6,6 +6,7 @@ rust-version = "1.93"
[build-dependencies] [build-dependencies]
vergen = { version = "8", features = ["git", "gitcl"] } vergen = { version = "8", features = ["git", "gitcl"] }
xdgen = "0.1"
[dependencies] [dependencies]
ashpd = { version = "0.12", optional = true } ashpd = { version = "0.12", optional = true }

View file

@ -1,5 +1,27 @@
use vergen::EmitBuilder; use vergen::EmitBuilder;
use std::{env, fs, path::PathBuf};
use xdgen::{App, Context, FluentString};
fn main() { fn main() {
EmitBuilder::builder().git_sha(true).emit().unwrap(); 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();
} }

View file

@ -46,3 +46,9 @@ ab-repeat = تكرار A-B
ab-repeat-set-a = تكرار A-B (A) ab-repeat-set-a = تكرار A-B (A)
ab-repeat-set-b = تكرار A-B (B) ab-repeat-set-b = تكرار A-B (B)
ab-repeat-clear = امحُ تكرار A-B ab-repeat-clear = امحُ تكرار A-B
# XDG Metadata
xdg-name = مشغّل وسائط COSMIC
xdg-comment = مشغّل وسائط لسطح مكتب COSMIC
xdg-keywords = فيلم;مقطع;فيديو;صوت

View file

@ -31,3 +31,9 @@ ab-repeat = Opakování A-B
ab-repeat-set-a = Opakování A-B (A) ab-repeat-set-a = Opakování A-B (A)
ab-repeat-set-b = Opakování A-B (B) ab-repeat-set-b = Opakování A-B (B)
ab-repeat-clear = Vymazat opakování A-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;

View file

@ -45,3 +45,9 @@ ab-repeat = A-B Repeat
ab-repeat-set-a = A-B Repeat (A) ab-repeat-set-a = A-B Repeat (A)
ab-repeat-set-b = A-B Repeat (B) ab-repeat-set-b = A-B Repeat (B)
ab-repeat-clear = Clear A-B Repeat 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;

View file

@ -36,3 +36,9 @@ open-recent-media-folder = Abrir carpetas multimedia recientes
close-media-folder = Cerrar carpeta multimedia close-media-folder = Cerrar carpeta multimedia
quit = Salir quit = Salir
off = Apagado 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;

View file

@ -46,3 +46,9 @@ ab-repeat = AB ismétlés
ab-repeat-set-a = AB ismétlés (A) ab-repeat-set-a = AB ismétlés (A)
ab-repeat-set-b = AB ismétlés (B) ab-repeat-set-b = AB ismétlés (B)
ab-repeat-clear = AB ismétlés törlése ab-repeat-clear = AB 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ó;

View file

@ -36,3 +36,9 @@ open-recent-media-folder = Apri cartella multimediale recente
close-media-folder = Chiudi cartella multimediale close-media-folder = Chiudi cartella multimediale
quit = Esci quit = Esci
off = Off off = Off
# XDG Metadata
xdg-name = COSMIC Media Player
xdg-comment = Lettore multimediale di COSMIC
xdg-keywords = Audio;Video;Musica;Film;Suoni;Riproduzione;

View file

@ -46,3 +46,9 @@ ab-repeat-set-a = A-B Powtarzanie (A)
ab-repeat-set-b = A-B Powtarzanie (B) ab-repeat-set-b = A-B Powtarzanie (B)
ab-repeat-clear = Wyczyść Powtarzanie A-B ab-repeat-clear = Wyczyść Powtarzanie A-B
previous-frame = Poprzednia Klatka 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;

View file

@ -46,3 +46,9 @@ ab-repeat = Repetir A-B
ab-repeat-set-a = Repetir A-B (A) ab-repeat-set-a = Repetir A-B (A)
ab-repeat-set-b = Repetir A-B (B) ab-repeat-set-b = Repetir A-B (B)
ab-repeat-clear = Limpar repetição A-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;

View file

@ -35,3 +35,9 @@ open-media-folder = Abrir pasta de multimédias...
open-recent-media-folder = Abrir pasta recente de multimédias open-recent-media-folder = Abrir pasta recente de multimédias
close-media-folder = Fechar pasta de multimédia close-media-folder = Fechar pasta de multimédia
quit = Sair 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;

View file

@ -39,3 +39,8 @@ ab-repeat = Повтор AB
ab-repeat-set-a = Повтор AB (уст. A) ab-repeat-set-a = Повтор AB (уст. A)
ab-repeat-set-b = Повтор AB (уст. B) ab-repeat-set-b = Повтор AB (уст. B)
ab-repeat-clear = Повтор AB (очистить) ab-repeat-clear = Повтор AB (очистить)
# XDG Metadata
xdg-name = Медиаплеер
xdg-keywords = Аудио;Фильм;Музыка;Видео;Медиа;Звук;Мультимедиа;Медиаплеер;

View file

@ -30,3 +30,9 @@ open-media-folder = Otvoriť priečinok s médiami...
open-recent-media-folder = Otvoriť posledný 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 close-media-folder = Zatvoriť priečinok s médiami
quit = Ukončiť 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;

View file

@ -46,3 +46,9 @@ ab-repeat = A-B-upprepning
ab-repeat-set-a = A-B-upprepning (A) ab-repeat-set-a = A-B-upprepning (A)
ab-repeat-set-b = A-B-upprepning (B) ab-repeat-set-b = A-B-upprepning (B)
ab-repeat-clear = Rensa A-B-upprepning 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;

View file

@ -46,3 +46,7 @@ ab-repeat = A-B 重复
ab-repeat-set-a = A-B 重复A ab-repeat-set-a = A-B 重复A
ab-repeat-set-b = A-B 重复B ab-repeat-set-b = A-B 重复B
ab-repeat-clear = 清除 A-B 重复 ab-repeat-clear = 清除 A-B 重复
# XDG Metadata
xdg-name = COSMIC 媒体播放器

View file

@ -13,11 +13,11 @@ bin-src := cargo-target-dir / 'release' / name
bin-dst := base-dir / 'bin' / name bin-dst := base-dir / 'bin' / name
desktop := APPID + '.desktop' desktop := APPID + '.desktop'
desktop-src := 'res' / desktop desktop-src := 'target/xdgen' / desktop
desktop-dst := clean(rootdir / prefix) / 'share' / 'applications' / desktop desktop-dst := clean(rootdir / prefix) / 'share' / 'applications' / desktop
metainfo := APPID + '.metainfo.xml' metainfo := APPID + '.metainfo.xml'
metainfo-src := 'res' / metainfo metainfo-src := 'target/xdgen' / metainfo
metainfo-dst := clean(rootdir / prefix) / 'share' / 'metainfo' / metainfo metainfo-dst := clean(rootdir / prefix) / 'share' / 'metainfo' / metainfo
thumbnailer := APPID + '.thumbnailer' thumbnailer := APPID + '.thumbnailer'

View file

@ -1,18 +1,6 @@
#TODO: more build-out, desktop actions, translations?
[Desktop Entry] [Desktop Entry]
Name=COSMIC Media Player Name=COSMIC Media Player
Name[ar]=مشغّل وسائط COSMIC Comment=Media player for the COSMIC desktop
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
Exec=cosmic-player %U Exec=cosmic-player %U
Terminal=false Terminal=false
Type=Application Type=Application
@ -21,14 +9,3 @@ MimeType=application/mxf;application/ram;application/sdp;application/vnd.apple.m
Icon=com.system76.CosmicPlayer Icon=com.system76.CosmicPlayer
Categories=COSMIC;AudioVideo;Player;Video; Categories=COSMIC;AudioVideo;Player;Video;
Keywords=Audio;Film;Movie;Music;Sound;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;

View file

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8" ?>
<component type="desktop-application"> <component type="desktop-application">
<id>com.system76.CosmicPlayer</id> <id>com.system76.CosmicPlayer</id>
<metadata_license>CC0-1.0</metadata_license> <metadata_license>CC0-1.0</metadata_license>
@ -9,33 +9,15 @@
<url type="homepage">https://github.com/pop-os/cosmic-player</url> <url type="homepage">https://github.com/pop-os/cosmic-player</url>
<url type="bugtracker">https://github.com/pop-os/cosmic-player</url> <url type="bugtracker">https://github.com/pop-os/cosmic-player</url>
<name>COSMIC Media Player</name> <name>COSMIC Media Player</name>
<name xml:lang="ar">مشغّل وسائط COSMIC</name>
<name xml:lang="cs">Přehrávač médií COSMIC</name>
<name xml:lang="hu">COSMIC Médialejátszó</name>
<name xml:lang="pl">Odtwarzacz Multimediów COSMIC</name>
<name xml:lang="pt_BR">Reprodutor de Mídia</name>
<name xml:lang="pt">Reprodutor de Mídia</name>
<name xml:lang="sk">Prehrávač Médií COSMIC</name>
<name xml:lang="es">Reproductor de medios COSMIC</name>
<name xml:lang="it">COSMIC Media Player</name>
<name xml:lang="sv">COSMIC Mediaspelare</name>
<summary>Media player for the COSMIC desktop</summary> <summary>Media player for the COSMIC desktop</summary>
<summary xml:lang="ar">مشغّل وسائط لسطح مكتب COSMIC</summary>
<summary xml:lang="cs">Přehrávač médií pro pracovní prostředí COSMIC</summary>
<summary xml:lang="hu">Médialejátszó a COSMIC asztali környezethez</summary>
<summary xml:lang="pl">Odtwarzacz Multimediów dla środowiska graficznego COSMIC</summary>
<summary xml:lang="pt_BR">Reprodutor de mídia do desktop COSMIC</summary>
<summary xml:lang="pt">Reprodutor de mídia do desktop COSMIC</summary>
<summary xml:lang="sk">Prehrávač médií pre pracovné prostredie COSMIC</summary>
<summary xml:lang="es">Reproductor de medios para el escritorio COSMIC</summary>
<summary xml:lang="it">Lettore multimediale di COSMIC</summary>
<summary xml:lang="sv">Mediaspelare för skrivbordsmiljön COSMIC</summary>
<description> <description>
<p>Media player for the COSMIC desktop</p> <p>Media player for the COSMIC desktop</p>
<p xml:lang="ar">مشغّل وسائط لسطح مكتب COSMIC</p> <p xml:lang="ar">مشغّل وسائط لسطح مكتب COSMIC</p>
<p xml:lang="cs">Přehrávač médií pro pracovní prostředí COSMIC</p> <p xml:lang="cs">Přehrávač médií pro pracovní prostředí COSMIC</p>
<p xml:lang="hu">Médialejátszó a COSMIC asztali környezethez</p> <p xml:lang="hu">Médialejátszó a COSMIC asztali környezethez</p>
<p xml:lang="pl">Odtwarzacz Multimediów dla środowiska graficznego COSMIC</p> <p
xml:lang="pl"
>Odtwarzacz Multimediów dla środowiska graficznego COSMIC</p>
<p xml:lang="pt_BR">Reprodutor de mídia do desktop COSMIC</p> <p xml:lang="pt_BR">Reprodutor de mídia do desktop COSMIC</p>
<p xml:lang="pt">Reprodutor de mídia do desktop COSMIC</p> <p xml:lang="pt">Reprodutor de mídia do desktop COSMIC</p>
<p xml:lang="sk">Prehrávač médií pre pracovné prostredie COSMIC</p> <p xml:lang="sk">Prehrávač médií pre pracovné prostredie COSMIC</p>
@ -43,8 +25,20 @@
<p xml:lang="es">Reproductor de medios para el escritorio COSMIC</p> <p xml:lang="es">Reproductor de medios para el escritorio COSMIC</p>
<p xml:lang="sv">Mediaspelare för skrivbordsmiljön COSMIC</p> <p xml:lang="sv">Mediaspelare för skrivbordsmiljön COSMIC</p>
</description> </description>
<keywords>
<keyword>Audio</keyword>
<keyword>Film</keyword>
<keyword>Movie</keyword>
<keyword>Music</keyword>
<keyword>Sound</keyword>
<keyword>Video</keyword>
</keywords>
<launchable type="desktop-id">com.system76.CosmicPlayer.desktop</launchable> <launchable type="desktop-id">com.system76.CosmicPlayer.desktop</launchable>
<icon type="remote" height="256" width="256">https://raw.githubusercontent.com/pop-os/cosmic-player/master/res/icons/hicolor/256x256/apps/com.system76.CosmicPlayer.svg</icon> <icon
type="remote"
height="256"
width="256"
>https://raw.githubusercontent.com/pop-os/cosmic-player/master/res/icons/hicolor/256x256/apps/com.system76.CosmicPlayer.svg</icon>
<provides> <provides>
<id>com.system76.CosmicApplication</id> <id>com.system76.CosmicApplication</id>
<binaries> <binaries>