Puppy Linux Discussion Forum Forum Index Puppy Linux Discussion Forum
Puppy HOME page : puppylinux.com
"THE" alternative forum : puppylinux.info
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

The time now is Fri 18 Apr 2014, 21:28
All times are UTC - 4
 Forum index » Advanced Topics » Cutting edge
internationalization of initrd messages at bootup
Moderators: Flash, Ian, JohnMurga
Post new topic   Reply to topic View previous topic :: View next topic
Page 1 of 4 [52 Posts]   Goto page: 1, 2, 3, 4 Next
Author Message
L18L

Joined: 19 Jun 2010
Posts: 2473
Location: Burghaslach, Germany somewhere also known as "Hosla"

PostPosted: Thu 06 Oct 2011, 15:49    Post subject:  internationalization of initrd messages at bootup
Subject description: [was: internationalization of bootup messages]
 

Wouldn't it be nice to see messages at bootup in your language?

Not just nice but often helpful.

I have started this using frugal installation of latest wary5.1.103

Now limited to available consolefonts lat1 and lat2, but it is a start Smile
________________________________________
edited 2011-10-21-14:50 CEST

Now for all European languages, Arab and Hebrew.

edited 2011-10-23-20:32 CEST
Arab and Hebrew still not possible Crying or Very sad

-------------------------------------------------------------


init script splitted:
init:
Code:

#!/bin/sh
#(c) Copyright 2007 Barry Kauler, www.puppylinux.com
#2007 GPL licence v2 (/usr/share/doc/legal/gpl-2.0.txt)
#Aug 2007, init script in initramfs, for puppy v2.20, Sept: v3.00, Oct: v3.01
...
...
...
#/bin/hotplug2stdout_notimeout > /tmp/pup_event_uevents_initrd &

#translate rest of splitted script (= init2) to boot param plang #L18L
[ $plang -a -f /boot_msg/${plang} ] &&  mv /init2 /trans && sed -f /boot_msg/${plang} /trans > /init2 && rm /trans
. /init2


translation file see next post

EDIT: screenshots some posts down

Last edited by L18L on Sun 23 Oct 2011, 14:31; edited 5 times in total
Back to top
View user's profile Send private message 
L18L

Joined: 19 Jun 2010
Posts: 2473
Location: Burghaslach, Germany somewhere also known as "Hosla"

PostPosted: Thu 06 Oct 2011, 15:52    Post subject: internationalization of progress messages at bootup
Subject description: translation template
 

Translation is done by stream editor sed, delimiter is #

The following file for translation to German (de) is placed into initrd/boot_msg/de

Post other translations here please.

Code:
 #English#translation#
s#'save file' filesystem check, please wait...#'save file' Dateisystem-Check, bitte warten...#g
s#'${1}' filesystem check, please wait...#'${1}' Dateisystem-Check, bitte warten...#g
s#ERROR: Windows NTFS hibernated partition, cannot mount#FEHLER: Windows NTFS winterschlafende Partition, kann nicht einhängen#g
s#32mdone#32mgetan#g
s#failed#fehlgeschlagen#g
s#Dumping last lines of /tmp/bootinit.log...#Zeige letzte Zeilen vom /tmp/bootinit.log...#g
s#Dumping last lines of kernel log...#Zeige letzte Zeilen vom kernel log...#g
s#Pausing for 60 seconds...#Pausiere für 60 Sekunden...#g
s#PAUSE 5SEC: tried to mount /dev/${ONEDEV}, ${ONEFS} f.s.#PAUSE 5SEC: versuchte Dateisysteme /dev/${ONEDEV}, ${ONEFS} einzuhängen.#g
s#pausing#pausiere#g
s#RETRY FAILED: mounting /dev/${ONEDEV}, ${ONEFS} f.s.#2.VERSUCH FEHLSCHLAG: einhängen der /dev/${ONEDEV}, ${ONEFS} Dateisysteme.#g
s#Bypass looking for vmlinuz on $ONEDEV#Umgehe nachsehen, ob vmlinuz auf $ONEDEV ist#g
s#Loading '${PKEYS}' keyboard layout...#Lade '${PKEYS}' Tastatur-Layout...#g
s#Loading drivers needed to access disk drives#Lade Treiber für Zugriff auf Plattenlaufwerke#g
s#Searching for Puppy files...#Suche nach Puppy-Dateien...#g
s#${DROPOUT} not found. Dropping out to initial-ramdisk console...#${DROPOUT} nicht gefunden. Falle zurück auf initiale ramdisk Konsole...#g
s#Type a number to choose which personal file to use:#Tipp eine Ziffer zur Auswahl der zu verwendenden persönlichen Datei:#g
s#0  none#0  keine#g
s#Loading personal file $PUPSAVEFILE ($PUPSAVEDEV)...#Lade persönliche Datei $PUPSAVEFILE ($PUPSAVEDEV)...#g
s#Mounting encrypted $PUPSAVEFILE...#Hänge verschlüsselte Datei $PUPSAVEFILE ein...#g
s#Increasing $PUPSAVEFILE by $KILOBIG Kbytes, please wait...#Vergrößere $PUPSAVEFILE um $KILOBIG Kbytes, bitte warten...#g
s#NOTICE: As you type your password nothing will be displayed on the#HINWEIS: Bei der Eingabe des Paßworts wird nichts auf dem Bildschirm angezeigt #g
s#screen for absolute security. Just type it in then press ENTER key...#zur absoluten Sicherheit. Nur eingeben und dann die Enter-Taste drücken...#g
s#Password:#Paßwort:#g
s#...continuing with loading $PUPSAVEFILE...#...lade $PUPSAVEFILE weiter...#g
s#...successfully mounted#...erfolgreich eingehängt#g
s#Can't mount file, press ENTER key to try again, or#Kann Datei nicht einhängen, Enter-Taste für noch einen Versuch oder#g
s#any other char then ENTER for f.s. check then try again, or#irgendeine und dann Enter-Taste für Dateisystem-Check und noch einen Versuch, oder#g
s#for developers type 'quit' to drop out to console:#für Entwickler: tipp 'quit' für Konsole:#g
s#Increasing $PUPSAVEFILE by $KILOBIG Kbytes, please wait...#Vergrößere $PUPSAVEFILE um $KILOBIG Kbytes, bitte warten...#g
s#This save-file was last used with version $OLDDISTRO_VERSION of Puppy#Diese Sicherungsdatei wurde zuletzt benutzt mit Version $OLDDISTRO_VERSION von Puppy#g
s#Hit the ENTER key only if it is okay to upgrade this file, or to#Nur fie Enter-Taste drücken, wenn es OK ist, diese Date upzugraden, oder #g
s#not use it and boot up in RAM only type any other printable character.#um sie nicht zu benutzen, irgendeine druckbare Taste und dann die Enter-Taste.#g
s#ENTER only to upgrade:#Nur die Enter-Taste zum Upgrade:#g
s#Backing off, not using save-file, booting in RAM only, PUPMODE=5...#Ohne alte Daten, save-file nicht benutzt, booting in RAM only, PUPMODE=5...#g
s#The main Puppy file '${basepupsfs}' is being loaded off the optical disc.#Die Puppy-Hauptdatei '${basepupsfs}' wird jetzt vom optischen Medium geladen.#g
s#Very slow! Type ENTER key only to copy it to the same partition as the save-file#Sehr langsam! Nur die Enter-Taste drücken zum Kopieren auf dieselbe Partition wie die Sicherungsdatei#g
s#then on next boot it will load fast. Type any printable char not to copy it.#dann wird beim nächsten Neustart schneller geladen werden. Irgendein druckbares Zeichen zum Nichtkopieren.#g
s#ENTER key only to copy:#Nur Enter-Taste zum Kopieren:#g
s#'${basepupsfs}' now copying to hard drive (but only available next boot)...#'${basepupsfs}' wird jetzt auf die Festplatte kopiert (aber erst beim nächsten Neustart verfügbar)...#g
s#Folder $ONEFOLDER marked bad.#Folder $ONEFOLDER als schlecht markiert.#g
s#Loading folder $ONEFOLDER from CD/DVD...#Lade Verzeichnis $ONEFOLDER von CD/DVD...#g
s#RAM full#RAM voll#g
s#copying to ram#kopiere ins RAM#g
s#Loading the '${basepupsfs}' main file...#Lade die '${basepupsfs}' Hauptdatei...#g
s#Setting up the layered filesystem...#Richte das überlagernde Dateisystem ein...#g
s#Version update, restoring 'official' files, please wait...#Version update, restauriere 'offizielle' Dateien, bitte warten...#g
s#(with a slow CPU this may take sometime, please be patient)#(mit einer langsamen CPU kann das eine Weile dauern, bitte etwas Geduld)#g

s#to#auf#g edited: very bad:use entire phrases Crying or Very sad
Code:
s#You are upgrading Puppy ${OLDstr} ${NEWPVERSION}.#Du upgradest Puppy ${OLDstr} ${NEWPVERSION}.#g
s#Overwritten old files have been moved to /tmp/versioncleanup/#Überschriebene alte Dateien sind nach /tmp/versioncleanup/ verschoben worden#g
s#After bootup please examine this directory (before shutdown) for anything#Nach dem Start examiniere bitte dieses Verzeichnis (vor dem Herunterfahren) auf alles#g
s#that you might like to recover. Pausing 30 secs so you can read this msg...#was vielleicht erhalten werden soll. 30 Sekunden Pause zum Lesen dieser Meldung...#g
s#Overlaying preconfig files...#Überlagern der preconfig-Dateien...#g
s#Performing a 'switch_root' to the layered filesystem...#Führe ein 'switch_root' auf das überlagernde Dateisystem aus...#g
s#Dropped to initramfs shell. Type 'exec switch' to continue booting Puppy.#Zur initramfs shell gefallen. Tipp 'exec switch' zum Weiterstart von Puppy.#g
s#from version $xOLDPVERSION to#von Version $xOLDPVERSION auf#g
s#This is a simulated version upgrade, which performs a file cleanup.#Dies ist ein simuliertes Version-upgrade, das eine Dateisäuberung ausführt.#g
s#This is a radical file cleanup for broken systems, could alter some settings.#Dies ist eine radikale Dateisäuberung für defekte Systeme, könnte einige Einstellungen verändern.#g


That is how this file has been created:

extracted init from itird.gz
marked 63 translatable lines by '#tr'

extract them:

grep '#tr$' init > translation
cat -n translation | cut -d '"' -f2 > tr
cat -n translation | cut -d '"' -f4 >>tr
cat -n translation | cut -d '"' -f6 >>tr

edit tr:
trimmed
delete double entries
delete empty lines
59 lines remaining

create sed file:
file=translated
echo '#English#translation#' > $file
while read LINE; do
echo "s#${LINE}#${LINE}#g" >> $file
done<tr

cp translated to boot_msg/de
edit boot_msg/de:
s#English message#German message#g
Back to top
View user's profile Send private message 
L18L

Joined: 19 Jun 2010
Posts: 2473
Location: Burghaslach, Germany somewhere also known as "Hosla"

PostPosted: Fri 07 Oct 2011, 16:40    Post subject: internationalization of progress messages at bootup  

equivalent to xgettext

Code:
#!/bin/sh
# create translate template from shell script
# lines containing translatable strings have to be marked by
# Syntax to use for automatic creation of translate template
#   #tr2 -> grep tr.$ | cut -d '"' -f 2
#   example:
#    echo -n " 'save file' filesystem check, please wait..." >/dev/console #tr2
#   
#   #tr4 -> grep tr.$ | cut -d '"' -f 4
#
#   #tr6 -> grep tr.$ | cut -d '"' -f 6
#    example:
#  [ "$xOLDPVERSION" != "0.0" ] && OLDstr="from version $xOLDPVERSION to" #tr6
#####################################################

infile=init2
outfile=template1

echo -n > ${outfile}
while read LINE ; do
 case $LINE in
  *tr2) x=`echo $LINE | cut -d '"' -f 2`
        [ "$x" = "$LINE" ] && x=`echo $LINE | cut -d "'" -f 2`
        echo $x >>  ${outfile} ;;
  *tr4) x=`echo $LINE | cut -d '"' -f 4`
        [ "$x" = "$LINE" ] && x=`echo $LINE | cut -d "'" -f 4`
        echo $x >>  ${outfile} ;;
  *tr6) x=`echo $LINE | cut -d '"' -f 6`
        [ "$x" = "$LINE" ] && x=`echo $LINE | cut -d "'" -f 6`
        echo $x >>  ${outfile} ;;
  *tr8) x=`echo $LINE | cut -d '"' -f 8`
        [ "$x" = "$LINE" ] && x=`echo $LINE | cut -d "'" -f 8`
        echo $x >>  ${outfile} ;;
 esac
done < ${infile}

sort --uniq ${outfile} >${outfile}_uniq

check ${outfile}_uniq
then create sed file (see above post)
Back to top
View user's profile Send private message 
L18L

Joined: 19 Jun 2010
Posts: 2473
Location: Burghaslach, Germany somewhere also known as "Hosla"

PostPosted: Sat 08 Oct 2011, 15:10    Post subject: internationalization of initrd messages at bootup
Subject description: internationalization of initrd messages at bootup
 

And here is how it looks (was the most difficult part without photo)
initrd_i18n_1.png
 Description   boot param plang
for language
 Filesize   37.56 KB
 Viewed   1075 Time(s)

initrd_i18n_1.png

initrd_i18n_2.png
 Description   initrd messages dynamically translated
 Filesize   20.52 KB
 Viewed   1076 Time(s)

initrd_i18n_2.png

Back to top
View user's profile Send private message 
L18L

Joined: 19 Jun 2010
Posts: 2473
Location: Burghaslach, Germany somewhere also known as "Hosla"

PostPosted: Sun 09 Oct 2011, 07:34    Post subject: internationalization of initrd messages at bootup
Subject description: bugfix
 

Reviewing screenshot now...

mishmash of deutsch english in performing a 'switch_root' ....

Reason: translation of 'to'
Fix:
# OLDstr='to'

# [ "$xOLDPVERSION" != "0.0" ] && OLDstr="from version $xOLDPVERSION to"
[ "$xOLDPVERSION" != "0.0" ] && OLDstr="from version $xOLDPVERSION"

echo "You are upgrading Puppy ${OLDstr} to ${NEWPVERSION}." >/dev/console

This will cause 'to' to NOT be in the translation template Laughing
_______________________

German translation:
getan is Rolling Eyes
erledigt appeared to be better but too long (last letter in next line)
fertig will be in next version

Any suggestions for better translations ?
...Zugriff auf Plattenlaufwerke ???
Lade die 'puppy_wary...' Hauptdatei...
oder besser?:
Lade die Hauptdatei 'puppy_wary...'...
Back to top
View user's profile Send private message 
L18L

Joined: 19 Jun 2010
Posts: 2473
Location: Burghaslach, Germany somewhere also known as "Hosla"

PostPosted: Mon 10 Oct 2011, 03:35    Post subject: internationalization of initrd messages at bootup
Subject description: script manually marked for translation
 

Barry,
I have thought uploading this could be useful too
init2_int_marked.gz
Description 
gz

 Download 
Filename  init2_int_marked.gz 
Filesize  21.21 KB 
Downloaded  330 Time(s) 
Back to top
View user's profile Send private message 
L18L

Joined: 19 Jun 2010
Posts: 2473
Location: Burghaslach, Germany somewhere also known as "Hosla"

PostPosted: Wed 19 Oct 2011, 09:15    Post subject: internationalization of initrd messages at bootup
Subject description: demo using 2 different consolefonts
 

Howto display UTF-8 in console?

Here is a little demo made in wary 5.2

Extract attached console_i18n_demo.tar.gz where you like to
Here is a screenshot of executing script i18n

If it does not display properly for every language you might install
ucs-fonts-target3.pet

busybox in initrd does NOT have setfont
so I could not use it where it should be used: in initrd

Anyone able to add fontset to busybox of initrd?
edited:
using loadfont now which is included in busybox of initrd (thanks Technosaurus)
X.png
 Description   
 Filesize   9.22 KB
 Viewed   976 Time(s)

X.png

console_i18n_demo.tar.gz
Description 
gz

 Download 
Filename  console_i18n_demo.tar.gz 
Filesize  27.77 KB 
Downloaded  317 Time(s) 

Last edited by L18L on Thu 20 Oct 2011, 14:52; edited 1 time in total
Back to top
View user's profile Send private message 
Moose On The Loose


Joined: 24 Feb 2011
Posts: 478

PostPosted: Wed 19 Oct 2011, 10:52    Post subject: Re: internationalization of initrd messages at bootup
Subject description: internationalization of initrd messages at bootup
 

L18L wrote:
And here is how it looks (was the most difficult part without photo)


The picture brings up a couple of interesting questions:

Is "Wary" a bad word in anybodies language?

Some cultures, German is one as is English, calling someone or something a dog has a meaning. Is there anything bad about the word puppy?

The puplets like "bigdog" may have an issue in some languages too.
Back to top
View user's profile Send private message 
L18L

Joined: 19 Jun 2010
Posts: 2473
Location: Burghaslach, Germany somewhere also known as "Hosla"

PostPosted: Wed 19 Oct 2011, 12:17    Post subject: Re: internationalization of initrd messages at bootup
Subject description: internationalization of initrd messages at bootup
 

Moose On The Loose wrote:
Is "Wary" a bad word in anybodies language?
This word is not used in German. (but: make love not war was popular once upon a time...)

Moose On The Loose wrote:
Some cultures, German is one as is English, calling someone or something a dog has a meaning. Is there anything bad about the word puppy?

Calling someone a dog can be a compliment in Bavaria
The word puppy in German is unknown
Depending on its pronountiation it is either a doll or daddy Very Happy
So nothing bad Smile
Back to top
View user's profile Send private message 
technosaurus


Joined: 18 May 2008
Posts: 4134

PostPosted: Wed 19 Oct 2011, 23:39    Post subject:  

here is the fastest/easiest method that I have found, it doesn't require bashisms or any outside shell stuff like sed/grep/cut/tr ....
but more importantly, the translation files are raw text that _any_ user can modify

here is a basic template:
Code:
case $LANG in
   de*|be*|br*|dk*|es*|fi*|fr*|it*|no*|se*|sv*|pt*)
      modprobe nls_cp850
      CODEPAGE="850"
      zcat /lib/consolefonts/lat1-12.psfu.gz | loadfont
   ;;
   cz*|hu*|pl*|ro*|sk*|cr*|sl*)
      modprobe nls_cp852
      modprobe nls_iso8859-2
      CODEPAGE="852"
      zcat /lib/consolefonts/lat2-12.psfu.gz | loadfont
   ;;
esac
 
case $LANG in
#uncomment locales as they are added
#   de*). /etc/locale/de/init;;
#   be*). /etc/locale/be/init;;
#   br*). /etc/locale/br/init;;
#   dk*). /etc/locale/dk/init;;
#   es*). /etc/locale/es/init;;
#   fi*). /etc/locale/fi/init;;
#   fr*). /etc/locale/fr/init;;
#   it*). /etc/locale/it/init;;
#   no*). /etc/locale/no/init;;
#   se*). /etc/locale/se/init;;
#   sv*). /etc/locale/sv/init;;
#   pt*). /etc/locale/pt/init;;

#   cz*). /etc/locale/cz/init;;
#   hu*). /etc/locale/hu/init;;
#   pl*). /etc/locale/pl/init;;
#   ro*). /etc/locale/ro/init;;
#   sk*). /etc/locale/sk/init;;
#   cr*). /etc/locale/cr/init;;
#   sl*). /etc/locale/sl/init;;
   *)echo $LANG not yet supported, please help us translate >/dev/console
esac

#each file in /etc/locale/*/init will contain localized string variables like:
#  VAR1='Some translated string'
#  ...
#  VARZ='Last translated string'
#NOTE: use a variable name that makes sense for translating for the template
#  instead of VAR1='', use PERFORMING_SWITCHROOT=''

echo ${VAR1:-Default English Message Here} >/dev/console
#more code here
echo ${PERFORMING_SWITCHROOT:-Performing Switchroot} >/dev/console

_________________
Web Programming - Pet Packaging 100 & 101
Back to top
View user's profile Send private message 
L18L

Joined: 19 Jun 2010
Posts: 2473
Location: Burghaslach, Germany somewhere also known as "Hosla"

PostPosted: Thu 20 Oct 2011, 14:50    Post subject: internationalization of initrd messages at bootup  

Technosaurus,

One question about your localized string variables

Can they contain variables?
For example how would you make
Code:
s#Increasing $PUPSAVEFILE by $KILOBIG Kbytes, please wait...#Vergrößere $PUPSAVEFILE um $KILOBIG Kbytes, bitte warten...#g


Your script has given the solution for my font problem using loadfont instead of setfont now.

Code:
case $plang in
 el) zcat /lib/consolefonts/LatGrkCyr-8x16.psfu.gz | loadfont # greek
  *) zcat /lib/consolefonts/LatArCyrHeb-16.psfu.gz | loadfont
esac


Tested, it works, booted wary52 Russian (just the first 2 phrases)

That is my solution for now.

Thanks for your input Smile
L
DCP_1301.png
 Description   photograph of
console_i18n_demo
running in console
 Filesize   82.61 KB
 Viewed   980 Time(s)

DCP_1301.png

Back to top
View user's profile Send private message 
technosaurus


Joined: 18 May 2008
Posts: 4134

PostPosted: Thu 20 Oct 2011, 19:42    Post subject: Re: internationalization of initrd messages at bootup  

L18L wrote:
Technosaurus,

One question about your localized string variables

Can they contain variables?
For example how would you make
Code:
s#Increasing $PUPSAVEFILE by $KILOBIG Kbytes, please wait...#Vergrößere $PUPSAVEFILE um $KILOBIG Kbytes, bitte warten...#g

L
since they are variables, I wouldn't (there is a way, but would increase code complexity) ... instead, use multiple small variables:
echo ${INCREASING:-Increasing} $PUPSAVEFILE ${BY:-by} $KILOBIG Kbytes, ${PLSWAIT:-please wait...} >/dev/console

_________________
Web Programming - Pet Packaging 100 & 101
Back to top
View user's profile Send private message 
Moose On The Loose


Joined: 24 Feb 2011
Posts: 478

PostPosted: Thu 20 Oct 2011, 22:17    Post subject: Perhaps a useful trick for language selection
Subject description: If we make the file name match the language it is easier
 

[quote="technosaurus"]
Code:

case $LANG in
#uncomment locales as they are added
#   de*). /etc/locale/de/init;;
#   be*). /etc/locale/be/init;;
#   br*). /etc/locale/br/init;;
#   dk*). /etc/locale/dk/init;;


how about:

Code:

if test -e /etc/locale/${LANG}/init ; then
. /etc/locale/${LANG}/init
fi


If you make a file with the right name it gets used.
The mere addition of a file causes the new translation to happen
Back to top
View user's profile Send private message 
technosaurus


Joined: 18 May 2008
Posts: 4134

PostPosted: Fri 21 Oct 2011, 00:21    Post subject:  

i had done it like this:

[ -e /etc/locale/${LANG}/init ] && . /etc/locale/${LANG}/init

but realized that sometimes it may be something like de_DE (thus the case statement)

but now that you mentioned it, it could be
Code:

[ -e /etc/locale/${LANG:0:2}/init ] && . /etc/locale/${LANG:0:2}/init

_________________
Web Programming - Pet Packaging 100 & 101
Back to top
View user's profile Send private message 
BarryK
Puppy Master


Joined: 09 May 2005
Posts: 7047
Location: Perth, Western Australia

PostPosted: Fri 21 Oct 2011, 05:36    Post subject:  

Hi guys,
This is interesting stuff. I'm a bit pre-occupied right now, but intend to come back and read this thread properly later.

One quick question. L18L, I see that you propose "plang=de", but Puppy already supports "pkeys=de" -- couldn't we just have the one, to simplify things? Perhaps "plang=de" could also imply keyboard layout is "de". Or, maybe they do need to remain separate.

_________________
http://bkhome.org/news/
Back to top
View user's profile Send private message Visit poster's website 
Display posts from previous:   Sort by:   
Page 1 of 4 [52 Posts]   Goto page: 1, 2, 3, 4 Next
Post new topic   Reply to topic View previous topic :: View next topic
 Forum index » Advanced Topics » Cutting edge
Jump to:  

You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2005 phpBB Group
[ Time: 0.1237s ][ Queries: 12 (0.0137s) ][ GZIP on ]