diff --git a/apps/lang/english.lang b/apps/lang/english.lang index dcaeb2f7e5..770b60da28 100644 --- a/apps/lang/english.lang +++ b/apps/lang/english.lang @@ -17,16 +17,14 @@ # This is the master of the language files. This is the original, the one with # all the existing strings Rockbox features. # -# The target names used for target-specific strings are set in the ARCHOS -# variable in the root Makefile -# # *WARNING* # # If you want to add a new string, add it to the end of this file! -# Removing strings will break the numbering of strings in binary lang files and -# voice files so instead of removing a unused , change the desc field -# to "deprecated" (without quotes) and either blank the strings or change them to -# "deprecated" (without quotes) and do *not* change the targets. +# Removing strings will break the numbering of strings in binary lang +# files and voice files so instead of removing a unused , change +# the desc field to "deprecated" (without quotes) and either blank the +# strings or change them to "deprecated" (without quotes) and do *not* +# change the targets. # # If you re-order things or remove entries, you must bump the binary language # file version number in both the 'genlang' tool and the language loader code. @@ -40,57 +38,31 @@ # when doing updates etc, while the ones are used when this file is # used to simply get the full set of english strings for a particular target. # -# All phrases have a default string like: *: "default" that will be used if no -# other string matches for the particular model you build the language for. If -# you want a particular string for the iriver iriverh300 series you'd write it like: -# iriverh300: "iriverh300-specific string" (below the default line). If your string isn't -# used for all targets set the default to none like: *: none (no quotes!) this -# will not include the string for target that will not need it, see -# apps/features.txt for available categories that can be used instead of the -# target name, for example: swcodec: "swcodec-specific string". +# All phrases have a default string like: +# *: "default" +# that will be used if no other string matches for the particular model you +# build the anguage for. If you want a particular string for the iriver +# iriverh300 series you'd write it like: +# iriverh300: "iriverh300-specific string" (below the default line). +# If your string isn't used for all targets set the default to none like: +# *: none (no quotes!) +# this will not include the string for target that will not need it, see +# apps/features.txt for available categories that can be used instead of +# the target name, for example: swcodec: "swcodec-specific string". # -# The target names used are picked from the configure script and are set in the -# MODELNAME variable in the root makefile. This is an incomplete list: -# Target Target string -# iriver -# H100/H110/H115 iriverh100 -# H120/H140 iriverh120 -# H320/H340 iriverh300 -# H10 iriverh10 -# iaudio/Cowon -# X5 iaudiox5 -# M5 iaudiom5 -# D2 cowond2* -# ipod -# All iPods ipod* -# 4G Color/Photo ipodcolor -# Nano ipodnano1g -# Video (5G) ipodvideo -# 3G ipod3g -# 4G gray ipod4g -# mini ipodmini1g -# mini 2G ipodmini2g -# Toshiba -# All gigabeats gigabeat* -# Gigabeat Fxx gigabeatfx -# Gigabeat Sxx gigabeats -# Sandisk -# Sansa E200 sansae200* -# Sansa C200 sansac200* -# Sansa Fuze sansafuze* -# Sansa Clip sansaclip* -# Olympus -# m:robe 100 mrobe100 -# m:robe 500 mrobe500 -# Mpio -# HD200 mpiohd200 -# HD300 mpiohd300 -# Packard Bell -# Vibe 500 vibe500 -# Philips -# GoGear SA9200 gogearsa9200 -# Samsung -# YH820/YH920/YH925 samsungyh* +# The target names are either the model name picked from the +# configure script, or various feature flags. Look at the 'rockbox-info.txt' +# file in your build directory for a list of all of the feature flags +# supported by your build; typicall there are well over a dozen. +# +# It is possible for there to be multiple matches. When this is deteted +# the build system will treat this as a failure. There is a special +# case where this is intentional. Some strings refer to key actions that +# may be unique for a given device, but we need a way to flag an error +# if that is not properly defined. In this case, the feature flag +# is given a special value "FALLBACK". As an example of this, see +# the 'rtc' string of of LANG_TIME_SET_BUTTON. +#### # First item will be shown when P2STR is passed a NULL pointer id: LANG_ROCKBOX_TITLE @@ -3687,7 +3659,7 @@ iriverh100,iriverh120,iriverh300: "NAVI = Set" mpiohd300: "ENTER = Set" mrobe500: "HEART = Set" - rtc: "ON = Set" + rtc: "FALLBACK" vibe500: "OK = Set" @@ -3697,7 +3669,7 @@ iriverh100,iriverh120,iriverh300: "NAVI = Set" mpiohd300: "ENTER = Set" mrobe500: "HEART = Set" - rtc: "ON = Set" + rtc: "FALLBACK" vibe500: "OK = Set" @@ -3719,7 +3691,7 @@ iriverh10,iriverh10_5gb,sansae200*,sansafuze*: "PREV = Revert" iriverh100,iriverh120,iriverh300: "STOP = Revert" mrobe100: "DISPLAY = Revert" - rtc: "OFF = Revert" + rtc: "FALLBACK" samsungyh*: "REW = Revert" vibe500: "CANCEL = Revert" @@ -3733,7 +3705,7 @@ iriverh10,iriverh10_5gb,sansae200*,sansafuze*: "PREV = Revert" iriverh100,iriverh120,iriverh300: "STOP = Revert" mrobe100: "DISPLAY = Revert" - rtc: "OFF = Revert" + rtc: "FALLBACK" samsungyh*: "REW = Revert" vibe500: "CANCEL = Revert" diff --git a/tools/genlang b/tools/genlang index 6d0aa12528..7fd8f8099b 100755 --- a/tools/genlang +++ b/tools/genlang @@ -235,6 +235,7 @@ sub readenglish { my $withindest; my $numphrases = 0; my $numusers = 1; # core is already in the users map + my $deststr; while() { @@ -243,8 +244,7 @@ sub readenglish { if($_ =~ /^ *\/) { # this is the start of a phrase - } - elsif($_ =~ /\<\/phrase\>/) { + } elsif($_ =~ /\<\/phrase\>/) { # if id is something, when we count and store this phrase if($id) { @@ -253,8 +253,7 @@ sub readenglish { # Assign an ID number to this entry $idmap[$user]{$id}=$vidnum[$user]; $vidnum[$user]++; - } - else { + } else { # Assign an ID number to this entry $idmap[$user]{$id}=$idnum[$user]; $idnum[$user]++; @@ -266,8 +265,7 @@ sub readenglish { } undef @phrase; $id=""; - } - elsif($_ ne "\n") { + } elsif($_ ne "\n") { # gather everything related to this phrase push @phrase, $_; if($_ =~ /^ *\/i) { @@ -278,12 +276,10 @@ sub readenglish { $withindest=0; if($deststr && ($deststr !~ /^none\z/i)) { - # we unconditionally always use all IDs when the "update" - # feature is used + die ("Missing specific target match for $maybeid\n") if ($deststr eq '"FALLBACK"'); $id = $maybeid; # print "DEST: use this id $id\n"; - } - else { + } else { # print "skip $maybeid for $name\n"; } } @@ -293,11 +289,24 @@ sub readenglish { # model name isn't "ours" dest($_, $name, $val); - if($dest) { - # Store the current dest string. If this target matches - # multiple strings, it will get updated several times. - $deststr = $dest; - } + ## If $dest is nonnull (ie we have a match for this target) + ## if $deststr is null, accept + ## if $name is '*', accept + ## if $name is not '*' and $deststr is not null, COMPLAIN. + + if ($dest) { + if (!$deststr) { + $deststr = $dest; + } elsif ($name eq '*') { + $deststr = $dest; + } elsif ($deststr ne 'none' && $val ne '"FALLBACK"') { + die("multiple matches on $maybeid ($name:$val / $deststr)\n"); + } elsif ($deststr ne 'none' && $val eq '"FALLBACK"') { + # Ignore FALLBACK row if we already have a match + } else { + $deststr = $dest; + } + } } } diff --git a/tools/updatelang b/tools/updatelang index e68d958221..c17d08a85b 100755 --- a/tools/updatelang +++ b/tools/updatelang @@ -555,6 +555,7 @@ foreach my $id (@finalorder) { print $fh " \n"; foreach my $tgt (sort(keys(%lp))) { my $w = NFC($lp{$tgt}); + next if ($w eq 'FALLBACK'); if ($w eq 'none') { print $fh " $tgt: $w\n"; } else { @@ -568,6 +569,7 @@ foreach my $id (@finalorder) { print $fh " \n"; foreach my $tgt (sort(keys(%lp))) { my $w = NFC($lp{$tgt}); + next if ($w eq 'FALLBACK'); if ($w eq 'none') { print $fh " $tgt: $w\n"; } else { @@ -581,6 +583,7 @@ foreach my $id (@finalorder) { print $fh " \n"; foreach my $tgt (sort(keys(%lp))) { my $w = NFC($lp{$tgt}); + next if ($w eq 'FALLBACK'); if ($w eq 'none') { print $fh " $tgt: $w\n"; } else {