diff --git a/web/zm_lang_de_de.php b/web/zm_lang_de_de.php index 5541c5765..2d30279d7 100644 --- a/web/zm_lang_de_de.php +++ b/web/zm_lang_de_de.php @@ -1,6 +1,6 @@ Translation by + // Notes for Translators +// 0. Get some credit, put your name in the line above (optional) // 1. When composing the language tokens in your language you should try and keep to roughly the // same length text if possible. Abbreviate where necessary as spacing is quite close in a number of places. -// 2. There are three types of string replacement +// 2. There are four types of string replacement // a) Simple replacements are words or short phrases that are static and used directly. This type of // replacement can be used 'as is'. // b) Complex replacements involve some dynamic element being included and so may require substitution @@ -29,13 +32,12 @@ // a formatting string. If the dynamic element is a number you will usually need to use a variable // replacement also as described below. // c) Variable replacements are used in conjunction with complex replacements and involve the generation -// of a singular or plural noun depending on the number passed into the zmVlang function. This is -// intended to allow phrases such a '0 potatoes', '1 potato', '2 potatoes' etc to conjunct correctly -// with the associated numerator. Variable replacements are expressed are arrays with a series of -// counts and their associated words. When doing a replacement the passed value is compared with -// those counts in descending order and the nearest match below is used if no exact match is found. -// Therefore is you have a variable replacement with 0,1 and 2 counts, which would be the normal form -// in English, if you have 5 'things' then the nearest match below is '2' and so that plural would be used. +// of a singular or plural noun depending on the number passed into the zmVlang function. See the +// the zmVlang section below for a further description of this. +// d) Optional strings which can be used to replace the prompts and/or help text for the Options section +// of the web interface. These are not listed below as they are quite large and held in the database +// so that they can also be used by the zmconfig.pl script. However you can build up your own list +// quite easily from the Config table in the database if necessary. // 3. The tokens listed below are not used to build up phrases or sentences from single words. Therefore // you can safely assume that a single word token will only be used in that context. // 4. In new language files, or if you are changing only a few words or phrases it makes sense from a @@ -44,6 +46,29 @@ // is and uncomment it. // require_once( 'zm_lang_en_gb.php' ); +// You may need to change the character set here, if your web server does not already +// do this by default, uncomment this if required. +// +// Example +// header( "Content-Type: text/html; charset=iso-8859-1" ); + +// You may need to change your locale here if your default one is incorrect for the +// language described in this file, or if you have multiple languages supported. +// If you do need to change your locale, be aware that the format of this function +// is subtlely different in versions of PHP before and after 4.3.0, see +// http://uk2.php.net/manual/en/function.setlocale.php for details. +// Also be aware that changing the whole locale may affect some floating point or decimal +// arithmetic in the database, if this is the case change only the individual locale areas +// that don't affect this rather than all at once. See the examples below. +// Finally, depending on your setup, PHP may not enjoy have multiple locales in a shared +// threaded environment, if you get funny errors it may be this. +// +// Examples +// setlocale( 'LC_ALL', 'en_GB' ); All locale settings pre-4.3.0 +// setlocale( LC_ALL, 'en_GB' ); All locale settings 4.3.0 and after +// setlocale( LC_CTYPE, 'en_GB' ); Character class settings 4.3.0 and after +// setlocale( LC_TIME, 'en_GB' ); Date and time formatting 4.3.0 and after + // Simple String Replacements $zmSlang24BitColour = '24 bit Farbe'; $zmSlang8BitGrey = '8 bit Graustufe'; @@ -328,8 +353,120 @@ $zmClangLastEvents = 'Letzen %1$s %2$s'; // For example 'Last 37 Event $zmClangMonitorCount = '%1$s %2$s'; // For example '4 Monitors' (from Vlang below) $zmClangMonitorFunction = 'Monitor %1$s Function'; -// Variable arrays expressing plurality +// The next section allows you to describe a series of word ending and counts used to +// generate the correctly conjugated forms of words depending on a count that is associated +// with that word. +// This intended to allow phrases such a '0 potatoes', '1 potato', '2 potatoes' etc to +// conjugate correctly with the associated count. +// In some languages such as English this is fairly simple and can be expressed by assigning +// a count with a singular or plural form of a word and then finding the nearest (lower) value. +// So '0' of something generally ends in 's', 1 of something is singular and has no extra +// ending and 2 or more is a plural and ends in 's' also. So to find the ending for '187' of +// something you would find the nearest lower count (2) and use that ending. +// +// So examples of this would be +// $zmVlangPotato = array( 0=>'Potatoes', 1=>'Potato', 2=>'Potatoes' ); +// $zmVlangSheep = array( 0=>'Sheep' ); +// +// where you can have as few or as many entries in the array as necessary +// If your language is similar in form to this then use the same format and choose the +// appropriate zmVlang function below. +// If however you have a language with a different format of plural endings then another +// approach is required . For instance in Russian the word endings change continuously +// depending on the last digit (or digits) of the numerator. In this case then zmVlang +// arrays could be written so that the array index just represents an arbitrary 'type' +// and the zmVlang function does the calculation about which version is appropriate. +// +// So an example in Russian might be (using English words, and made up endings as I +// don't know any Russian!!) +// $zmVlangPotato = array( 1=>'Potati', 2=>'Potaton', 3=>'Potaten' ); +// +// and the zmVlang function decides that the first form is used for counts ending in +// 0, 5-9 or 11-19 and the second form when ending in 1 etc. +// + +// Variable arrays expressing plurality, see the zmVlang description above $zmVlangEvent = array( 0=>'Ereigniss', 1=>'Ereigisse', 2=>'Ereignisse' ); $zmVlangMonitor = array( 0=>'Monitors', 1=>'Monitor', 2=>'Monitors' ); +// You will need to choose or write a function that can correlate the plurality string arrays +// with variable counts. This is used to conjugate the Vlang arrays above with a number passed +// in to generate the correct noun form. +// +// In languages such as English this is fairly simple +// Note this still has to be used with printf etc to get the right formating +function zmVlang( $lang_var_array, $count ) +{ + krsort( $lang_var_array ); + foreach ( $lang_var_array as $key=>$value ) + { + if ( abs($count) >= $key ) + { + return( $value ); + } + } + die( 'Error, unable to correlate variable language string' ); +} + +// This is an version that could be used in the Russian example above +// The rules are that the first word form is used if the count ends in +// 0, 5-9 or 11-19. The second form is used then the count ends in 1 +// (not including 11 as above) and the third form is used when the +// count ends in 2-4, again excluding any values ending in 12-14. +// +// function zmVlang( $lang_var_array, $count ) +// { +// $secondlastdigit = substr( $count, -2, 1 ); +// $lastdigit = substr( $count, -1, 1 ); +// // or +// // $secondlastdigit = ($count/10)%10; +// // $lastdigit = $count%10; +// +// // Get rid of the special cases first, the teens +// if ( $secondlastdigit == 1 && $lastdigit != 0 ) +// { +// return( $lang_var_array[1] ); +// } +// switch ( $lastdigit ) +// { +// case 0 : +// case 5 : +// case 6 : +// case 7 : +// case 8 : +// case 9 : +// { +// return( $lang_var_array[1] ); +// break; +// } +// case 1 : +// { +// return( $lang_var_array[2] ); +// break; +// } +// case 2 : +// case 3 : +// case 4 : +// { +// return( $lang_var_array[3] ); +// break; +// } +// } +// die( 'Error, unable to correlate variable language string' ); +// } + +// This is an example of how the function is used in the code which you can uncomment and +// use to test your custom function. +//$monitors = array(); +//$monitors[] = 1; // Choose any number +//echo sprintf( $zmClangMonitorCount, count($monitors), zmVlang( $zmVlangMonitor, count($monitors) ) ); + +// In this section you can override the default prompt and help texts for the options area +// These overrides are in the form of $zmVarOlangPrompt