[Risolto] [Bash] Script conversione batch file .mo → file .po

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
Avatar utente
wilecoyote
Tenace Tecnocrate
Tenace Tecnocrate
Messaggi: 15349
Iscrizione: giovedì 20 agosto 2009, 16:21
Desktop: Kubuntu et alii
Distribuzione: 9.04 32bit 14/18/20/22.04 LTS 64bit
Sesso: Maschile
Località: Ceranesi - Ge

[Risolto] [Bash] Script conversione batch file .mo → file .po

Messaggio da wilecoyote »

) Salve, mi serve una mano per creare un semplice script che mi consenta di convertire svariati file .mo in file .po, senza consumare diti e tastiera. :D

Il comando base è questo:

Codice: Seleziona tutto

msgunfmt -o perbacco.po < perbacco.mo
Quello che mi servirebbe è che lo script legga i nomi dei file .mo e usi il medesimo come file .po, nell'esempio perbacco, ripetendo il ciclo fino all'esaurimento di tutti i file presenti nella directory.

Mi sono fatto rifilare la traduzione di un'applicazione che serve a gestire l'esecuzione di disegni su delle insegne luminose, e purtroppo contiene 107 micro file .mo in svariate lingue senza l'italiano.

Grazie in anticipo a chi m'aiuta.

:: Ciao
Ultima modifica di wilecoyote il lunedì 27 febbraio 2023, 12:00, modificato 1 volta in totale.
ACER Extensa 5230E 2,2 Ghz cpu Celeron 900 hdd 160 GB Ram 1 GB scheda video Intel GM500
ACER Extensa 5635Z 2,2 Ghz cpu Celeron T3100 hdd 320 GB Ram 4 GB scheda video Intel Mobile 4
Quando una Finestra chiusa incontra un Pinguino la Finestra chiusa è una Finestra aperta.
Lucio C
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 363
Iscrizione: venerdì 10 dicembre 2021, 18:33
Desktop: fvwm
Distribuzione: (X)Ubuntu20@home; openSUSE42.3@work
Sesso: Maschile
Località: Paneropoli

Re: [Bash] Script conversione batch file .mo → file .po

Messaggio da Lucio C »

Io lo so fare in (t)csh con i seguenti tre comandi (rimuovere echo e gli apici per eseguirlo, cosi' fa solo vedere il comando costruito)

Codice: Seleziona tutto

foreach i ( *.mo )
 echo "msgunfmt -o ${i:r}.po < $i"
end
se non si trattasse di convertire ma solo di rinominare in blocco mantenendo il nome ma cambiando il tipo userei un mio vecchio script (del 1990 !!)

Codice: Seleziona tutto

 rename *.mo =.po
(lo allego come txt perche' col suo nome solo non me lo lascia fare, se si sostituisse "mv" con "msgunfmt" potrebbe fare quanto voluto)
Il trucco di usare = per tenere invariato o il nome o il tipo fu ispirato ai tempi da una sintassi del VM/CMS dell'IBM. Il comando e(ra) parte di una cosiddetta "uniq interface" che serviva a usare una sintassi analoga sotto Unix e VAX/VMS ai tempi in cui non c'era la monocultura dei sistemi operativi :D
Allegati
rename.txt
(1.26 KiB) Scaricato 9 volte
The reasonable man adapts himself to the world: the unreasonable one persists in trying to adapt the world to himself. Therefore all progress depends on the unreasonable man. (G.B. Shaw)
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4433
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: [Bash] Script conversione batch file .mo → file .po

Messaggio da UbuNuovo »

Se devi eseguire: msgunfmt -o perbacco.po < perbacco.mo su tutti i file .mo nella directory 'test',
visto che (purtroppo) il foreach non esiste in Bash, si può fare in vari modi, per esempio, puoi provare:

Codice: Seleziona tutto

while read f;do msgunfmt -o ${f%%.*}.po < "$f";done < <(find test -type f -name *.mo)
naturalmente non l'ho provato, dovevi mettere un link ai file originali.
Salva l'Ucraina! 🇺🇦
Lucio C
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 363
Iscrizione: venerdì 10 dicembre 2021, 18:33
Desktop: fvwm
Distribuzione: (X)Ubuntu20@home; openSUSE42.3@work
Sesso: Maschile
Località: Paneropoli

Re: [Bash] Script conversione batch file .mo → file .po

Messaggio da Lucio C »

UbuNuovo ha scritto:
lunedì 27 febbraio 2023, 0:20
visto che (purtroppo) il foreach non esiste in Bash,
Nulla vieta di entrare temporaneasmente in csh o tsh, eseguire e uscire
The reasonable man adapts himself to the world: the unreasonable one persists in trying to adapt the world to himself. Therefore all progress depends on the unreasonable man. (G.B. Shaw)
Avatar utente
wilecoyote
Tenace Tecnocrate
Tenace Tecnocrate
Messaggi: 15349
Iscrizione: giovedì 20 agosto 2009, 16:21
Desktop: Kubuntu et alii
Distribuzione: 9.04 32bit 14/18/20/22.04 LTS 64bit
Sesso: Maschile
Località: Ceranesi - Ge

Re: [Bash] Script conversione batch file .mo → file .po

Messaggio da wilecoyote »

) Salve,
Lucio C ha scritto:
domenica 26 febbraio 2023, 23:26
Io lo so fare in (t)csh con i seguenti tre comandi (rimuovere echo e gli apici per eseguirlo, cosi' fa solo vedere il comando costruito)

L'ho copiato in un file, mettendo il dovuto shabang, nome converti-mo→po.tcsh e impostato come eseguibile, ed usato così:

Codice: Seleziona tutto

wilecoyote@CactusField:~$ ./converti-mo→po.tcsh ~/MyDict/Cantiere/PO-MO/locale/fr/LC_MESSAGES/*
foreach: No match.
Leggendo il tuo altro script leggo che foreach non supporta i wildcharacters, forse è per questo che non funziona ?

UbuNuovo ha scritto:
lunedì 27 febbraio 2023, 0:20
si può fare in vari modi, per esempio, puoi provare:

Codice: Seleziona tutto

while read f;do msgunfmt -o ${f%%.*}.po < "$f";done < <(find test -type f -name *.mo)
naturalmente non l'ho provato, dovevi mettere un link ai file originali.



Non ho messo il link poiché non c'è un link, c'è la path di lavoro ~/MyDict/Cantiere/PO-MO/locale/fr/LC_MESSAGES/*, la directory fr proviene dal deposito temporaneoi:

Codice: Seleziona tutto

wilecoyote@CactusField:~$ ls -r ~/MyDict/Archivio/giant-display-manager/*
/home/wilecoyote/MyDict/Archivio/giant-display-manager/locale/be/LC_MESSAGES/ 
/home/wilecoyote/MyDict/Archivio/giant-display-manager/locale/de/LC_MESSAGES/ 
/home/wilecoyote/MyDict/Archivio/giant-display-manager/locale/el/LC_MESSAGES/ 
/home/wilecoyote/MyDict/Archivio/giant-display-manager/locale/es/LC_MESSAGES/  
/home/wilecoyote/MyDict/Archivio/giant-display-manager/locale/fr/LC_MESSAGES/  
/home/wilecoyote/MyDict/Archivio/giant-display-manager/locale/hr/LC_MESSAGES/ 
/home/wilecoyote/MyDict/Archivio/giant-display-manager/locale/hu/LC_MESSAGES/
/home/wilecoyote/MyDict/Archivio/giant-display-manager/locale/nl/LC_MESSAGES/
/home/wilecoyote/MyDict/Archivio/giant-display-manager/locale/p-BR/LC_MESSAGES/
/home/wilecoyote/MyDict/Archivio/giant-display-manager/locale/rw/LC_MESSAGES/
/home/wilecoyote/MyDict/Archivio/giant-display-manager/locale/sk/LC_MESSAGES/
/home/wilecoyote/MyDict/Archivio/giant-display-manager/locale/tr/LC_MESSAGES/
/home/wilecoyote/MyDict/Archivio/giant-display-manager/locale/zh_CN/LC_MESSAGES/
/home/wilecoyote/MyDict/Archivio/giant-display-manager/locale/zh_TW/LC_MESSAGES/
A richiesta ti listo tutti i 107 file .mo di ciascuna directory… :D

Comunque ha funzionato, precisando la path così:

Codice: Seleziona tutto

while read f;do msgunfmt -o ${f%%.*}.po < "$f";done < <(find ~/MyDict/Cantiere/PO-MO/locale/fr/LC_MESSAGES/ -type f -name *.mo)
Adesso non mi resta che eseguire le traduzioni.

Grazie a @Lucio C & @UbuNuovo. :birra:

:: Ciao
ACER Extensa 5230E 2,2 Ghz cpu Celeron 900 hdd 160 GB Ram 1 GB scheda video Intel GM500
ACER Extensa 5635Z 2,2 Ghz cpu Celeron T3100 hdd 320 GB Ram 4 GB scheda video Intel Mobile 4
Quando una Finestra chiusa incontra un Pinguino la Finestra chiusa è una Finestra aperta.
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4433
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: [Bash] Script conversione batch file .mo → file .po

Messaggio da UbuNuovo »

Lucio C ha scritto:
lunedì 27 febbraio 2023, 10:17
UbuNuovo ha scritto:
lunedì 27 febbraio 2023, 0:20
visto che (purtroppo) il foreach non esiste in Bash,
Nulla vieta di entrare temporaneasmente in csh o tsh, eseguire e uscire
Sì certo, non lo vieta nessuno; solo che essendo sul forum di Ubuntu, credo sia meglio fornire codice bash, visto che, a differenza di tcsh e csh, è installato di default. Anch'io (mea culpa), come credo molti altri qua, conosco poco altre shell. Anche macOS ora utilizza bash di default, questo non vuol dire che sia la shell migliore ma che probabilmente, è la più diffusa.
In ogni modo, postare codice non solo bash, potrebbe far incuriosire gli utenti, spingendoli a documentarsi su altre shell, questo è positivo.
Salva l'Ucraina! 🇺🇦
Lucio C
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 363
Iscrizione: venerdì 10 dicembre 2021, 18:33
Desktop: fvwm
Distribuzione: (X)Ubuntu20@home; openSUSE42.3@work
Sesso: Maschile
Località: Paneropoli

Re: [Bash] Script conversione batch file .mo → file .po

Messaggio da Lucio C »

wilecoyote ha scritto:
lunedì 27 febbraio 2023, 11:49
L'ho copiato in un file, mettendo il dovuto shabang, nome converti-mo→po.tcsh e impostato come eseguibile, ed usato così:

Codice: Seleziona tutto

wilecoyote@CactusField:~$ ./converti-mo→po.tcsh ~/MyDict/Cantiere/PO-MO/locale/fr/LC_MESSAGES/*
foreach: No match.
Leggendo il tuo altro script leggo che foreach non supporta i wildcharacters, forse è per questo che non funziona ?
copiato come ? ossia cosa c'era dentro le parentesi del foreach ? nel mio esempio c'era la wildcard hardcodata ... non una variabile (quale? $1 ? $argv ? o cosa ?)
... ho il sospetto che dire che foreach non supporta le wildcard (scritto 33 anni fa :D) sia un po' semplificativo. Forse e' meglio dire che la espansione delle wildchar interferisce con i settaggi della variabile noglob dello shell.

Consideriamo questo scriptino prova.csh

Codice: Seleziona tutto

#! /bin/csh -f 
echo $1
foreach i ($1)
 ls -l $i
end
dopo di che proviamo a chiamarlo nei tre modi seguenti (scelgo dei file che ho piu' di uno nel directory di prova)

Codice: Seleziona tutto

prova.csh README.*
prova.csh 'README.*'
set noglob
prova.csh README.*
unset noglob
Da me il primo ritorna solo il primo file e poi esce, gli altri due invece funzionano su tutti i file.
Ossia nel primo caso la wildchar e' espansa nello shell chiamante (e quindi $1 e' il primo elemento della lista), negli altri e' passata allo script ed espansa nel subshell in cui gira lo script.
The reasonable man adapts himself to the world: the unreasonable one persists in trying to adapt the world to himself. Therefore all progress depends on the unreasonable man. (G.B. Shaw)
Avatar utente
wilecoyote
Tenace Tecnocrate
Tenace Tecnocrate
Messaggi: 15349
Iscrizione: giovedì 20 agosto 2009, 16:21
Desktop: Kubuntu et alii
Distribuzione: 9.04 32bit 14/18/20/22.04 LTS 64bit
Sesso: Maschile
Località: Ceranesi - Ge

Re: [Risolto] [Bash] Script conversione batch file .mo → file .po

Messaggio da wilecoyote »

) Salve, nel file converti-mo→po.tcsh ho copiato pedissequamente il codice, cioè questo:

Codice: Seleziona tutto

#!/bin/tcsh

foreach i ( *.mo )
msgunfmt -o ${i:r}.po < $i
end
A parte l'aggiunta del shabang altre modifiche non saprei farle.

:: Ciao
ACER Extensa 5230E 2,2 Ghz cpu Celeron 900 hdd 160 GB Ram 1 GB scheda video Intel GM500
ACER Extensa 5635Z 2,2 Ghz cpu Celeron T3100 hdd 320 GB Ram 4 GB scheda video Intel Mobile 4
Quando una Finestra chiusa incontra un Pinguino la Finestra chiusa è una Finestra aperta.
Lucio C
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 363
Iscrizione: venerdì 10 dicembre 2021, 18:33
Desktop: fvwm
Distribuzione: (X)Ubuntu20@home; openSUSE42.3@work
Sesso: Maschile
Località: Paneropoli

Re: [Risolto] [Bash] Script conversione batch file .mo → file .po

Messaggio da Lucio C »

Allora forse banalmente basta fare girare lo script (che a quel punto e' piu' un source file) dopo aver fatto

Codice: Seleziona tutto

cd ~/MyDict/Cantiere/PO-MO/locale/fr/LC_MESSAGES
oppure mettere cd $1 nello script stesso e chiamarlo con argomento il directory senza le wildchar del file.

Codice: Seleziona tutto

./converti-mo→po.tcsh ~/MyDict/Cantiere/PO-MO/locale/fr/LC_MESSAGES
elementare, Watson :ciao:
The reasonable man adapts himself to the world: the unreasonable one persists in trying to adapt the world to himself. Therefore all progress depends on the unreasonable man. (G.B. Shaw)
Avatar utente
wilecoyote
Tenace Tecnocrate
Tenace Tecnocrate
Messaggi: 15349
Iscrizione: giovedì 20 agosto 2009, 16:21
Desktop: Kubuntu et alii
Distribuzione: 9.04 32bit 14/18/20/22.04 LTS 64bit
Sesso: Maschile
Località: Ceranesi - Ge

Re: [Risolto] [Bash] Script conversione batch file .mo → file .po

Messaggio da wilecoyote »

) Salve, mica tanto elementare se non s'è pratici di scripting, appena posso provo.

:: Ciao
ACER Extensa 5230E 2,2 Ghz cpu Celeron 900 hdd 160 GB Ram 1 GB scheda video Intel GM500
ACER Extensa 5635Z 2,2 Ghz cpu Celeron T3100 hdd 320 GB Ram 4 GB scheda video Intel Mobile 4
Quando una Finestra chiusa incontra un Pinguino la Finestra chiusa è una Finestra aperta.
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: Bing [Bot] e 13 ospiti