summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorBjörn Stenberg <bjorn@haxx.se>2002-09-18 14:08:05 +0000
committerBjörn Stenberg <bjorn@haxx.se>2002-09-18 14:08:05 +0000
commit505eca76e661df673ae3ff77863936e6a533f663 (patch)
treec09f07ca4eaf5c4433af9a4365ccb136e02f3d5a /apps
parenta24bd9a894c1d8594e99f95e470cbd8296e5b3d2 (diff)
downloadrockbox-505eca76e661df673ae3ff77863936e6a533f663.tar.gz
rockbox-505eca76e661df673ae3ff77863936e6a533f663.zip
New language/string handling
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@2327 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
-rw-r--r--apps/Makefile10
-rw-r--r--apps/demo_menu.c6
-rw-r--r--apps/games_menu.c10
-rw-r--r--apps/lang.c16
-rw-r--r--apps/lang.h25
-rw-r--r--apps/lang/english.lang733
-rw-r--r--apps/main_menu.c10
-rw-r--r--apps/playlist.c16
-rw-r--r--apps/recorder/snake.c26
-rw-r--r--apps/recorder/sokoban.c16
-rw-r--r--apps/recorder/tetris.c6
-rw-r--r--apps/recorder/wormlet.c63
-rw-r--r--apps/settings.c14
-rw-r--r--apps/settings_menu.c115
-rw-r--r--apps/sound_menu.c38
-rw-r--r--apps/tree.c13
-rw-r--r--apps/wps-display.c10
-rw-r--r--apps/wps.c79
18 files changed, 948 insertions, 258 deletions
diff --git a/apps/Makefile b/apps/Makefile
index a501bb2747..3f99798e67 100644
--- a/apps/Makefile
+++ b/apps/Makefile
@@ -13,9 +13,11 @@ AR = sh-elf-ar
13AS = sh-elf-as 13AS = sh-elf-as
14OC = sh-elf-objcopy 14OC = sh-elf-objcopy
15 15
16LANGUAGE = english
17
16FIRMWARE := ../firmware 18FIRMWARE := ../firmware
17 19
18INCLUDES= -I$(FIRMWARE)/include -I$(FIRMWARE) -I$(FIRMWARE)/common -I$(FIRMWARE)/drivers -I$(FIRMWARE)/malloc -I. 20INCLUDES= -I$(FIRMWARE)/include -I$(FIRMWARE) -I$(FIRMWARE)/common -I$(FIRMWARE)/drivers -I$(FIRMWARE)/malloc -I. -I$(OBJDIR)
19 21
20# store output files in this directory: 22# store output files in this directory:
21OBJDIR = . 23OBJDIR = .
@@ -47,7 +49,7 @@ else
47 OUTNAME = archos.mod 49 OUTNAME = archos.mod
48endif 50endif
49 51
50OBJS := $(SRC:%.c=$(OBJDIR)/%.o) 52OBJS := $(OBJDIR)/lang.o $(SRC:%.c=$(OBJDIR)/%.o)
51 53
52all : $(OBJDIR)/$(OUTNAME) 54all : $(OBJDIR)/$(OUTNAME)
53 55
@@ -70,6 +72,10 @@ $(OBJDIR)/%.o: %.c
70 @mkdir -p `dirname $@` 72 @mkdir -p `dirname $@`
71 $(CC) $(CFLAGS) -c $< -o $@ 73 $(CC) $(CFLAGS) -c $< -o $@
72 74
75$(OBJDIR)/lang.o: lang/$(LANGUAGE).lang
76 ../tools/genlang -p=$(OBJDIR)/lang $<
77 $(CC) $(CFLAGS) -c $(OBJDIR)/lang.c -o $@
78
73dist: 79dist:
74 tar czvf dist.tar.gz Makefile main.c start.s app.lds 80 tar czvf dist.tar.gz Makefile main.c start.s app.lds
75 81
diff --git a/apps/demo_menu.c b/apps/demo_menu.c
index cbd5742c7c..de625c5821 100644
--- a/apps/demo_menu.c
+++ b/apps/demo_menu.c
@@ -31,6 +31,8 @@
31#include "kernel.h" 31#include "kernel.h"
32#include "sprintf.h" 32#include "sprintf.h"
33 33
34#include "lang.h"
35
34extern Menu bounce(void); 36extern Menu bounce(void);
35extern Menu snow(void); 37extern Menu snow(void);
36 38
@@ -40,8 +42,8 @@ Menu demo_menu(void)
40 Menu result; 42 Menu result;
41 43
42 struct menu_items items[] = { 44 struct menu_items items[] = {
43 { "Bounce", bounce }, 45 { str(LANG_BOUNCE), bounce },
44 { "Snow", snow }, 46 { str(LANG_SNOW), snow },
45 }; 47 };
46 48
47 m=menu_init( items, sizeof items / sizeof(struct menu_items) ); 49 m=menu_init( items, sizeof items / sizeof(struct menu_items) );
diff --git a/apps/games_menu.c b/apps/games_menu.c
index dd0c671be4..6ab1faf7e6 100644
--- a/apps/games_menu.c
+++ b/apps/games_menu.c
@@ -34,6 +34,8 @@
34 34
35#include "sokoban.h" 35#include "sokoban.h"
36#include "wormlet.h" 36#include "wormlet.h"
37#include "lang.h"
38
37extern Menu tetris(void); 39extern Menu tetris(void);
38extern Menu snake(void); 40extern Menu snake(void);
39 41
@@ -43,10 +45,10 @@ Menu games_menu(void)
43 Menu result; 45 Menu result;
44 46
45 struct menu_items items[] = { 47 struct menu_items items[] = {
46 { "Tetris", tetris }, 48 { str(LANG_TETRIS), tetris },
47 { "Sokoban", sokoban }, 49 { str(LANG_SOKOBAN), sokoban },
48 { "Wormlet", wormlet }, 50 { str(LANG_WORMLET), wormlet },
49 { "Snake", snake } 51 { str(LANG_SNAKE), snake }
50 }; 52 };
51 53
52 m=menu_init( items, sizeof items / sizeof(struct menu_items) ); 54 m=menu_init( items, sizeof items / sizeof(struct menu_items) );
diff --git a/apps/lang.c b/apps/lang.c
deleted file mode 100644
index af8b16aa5a..0000000000
--- a/apps/lang.c
+++ /dev/null
@@ -1,16 +0,0 @@
1/* This file was automaticly generated using genlang, the strings come
2 from "lang/english.lang" */
3
4unsigned char *language_strings[]={
5 "Sound Settings",
6 "General Settings",
7 "Games",
8 "Demos",
9 "Info",
10 "Version",
11 "Debug (keep out!)",
12 "Rockbox info:",
13 "Buf: %d.%02dMb",
14 "Buffer: %d.%02dMb",
15};
16/* end of generated string list */
diff --git a/apps/lang.h b/apps/lang.h
deleted file mode 100644
index b841271eff..0000000000
--- a/apps/lang.h
+++ /dev/null
@@ -1,25 +0,0 @@
1/* This file was automaticly generated using genlang */
2/*
3 * The str() macro/functions is how to access strings that might be
4 * translated. Use it like str(MACRO) and expect a string to be
5 * returned!
6 */
7#define str(x) language_strings[x]
8
9/* this is the array with all the strings */
10extern unsigned char *language_strings[];
11
12/* The enum below contains all available strings */
13enum {
14 LANG_SOUND_SETTINGS,
15 LANG_GENERAL_SETTINGS,
16 LANG_GAMES,
17 LANG_DEMOS,
18 LANG_INFO,
19 LANG_VERSION,
20 LANG_DEBUG,
21 LANG_ROCKBOX_INFO,
22 LANG_BUFFER_STAT_PLAYER,
23 LANG_BUFFER_STAT_RECORDER,
24};
25/* end of generated enum list */
diff --git a/apps/lang/english.lang b/apps/lang/english.lang
index db99993471..4d89d2e9f7 100644
--- a/apps/lang/english.lang
+++ b/apps/lang/english.lang
@@ -33,6 +33,11 @@ desc: in the main menu
33eng: "Debug (keep out!)" 33eng: "Debug (keep out!)"
34new: 34new:
35 35
36id: LANG_USB
37desc: in the main menu
38eng: "USB (sim)"
39new:
40
36id: LANG_ROCKBOX_INFO 41id: LANG_ROCKBOX_INFO
37desc: displayed topmost on the info screen 42desc: displayed topmost on the info screen
38eng: "Rockbox info:" 43eng: "Rockbox info:"
@@ -48,3 +53,731 @@ desc: the buffer size recorder-screen width, %d MB %d fraction of MB
48eng: "Buffer: %d.%02dMb" 53eng: "Buffer: %d.%02dMb"
49new: 54new:
50 55
56id: LANG_BATTERY_LEVEL_PLAYER
57desc: the battery level in percentage
58eng: "Batt: %d%%%s"
59new:
60
61id: LANG_BATTERY_LEVEL_RECORDER
62desc: the battery level in percentage
63eng: "Battery: %d%%%s"
64new:
65
66id: LANG_BATTERY_CHARGE
67desc: tells that the battery is charging, instead of battery level
68eng: "Battery: charging"
69new:
70
71id: LANG_BOUNCE
72desc: in the demos menu
73eng: "Bounce"
74new:
75
76id: LANG_SNOW
77desc: in the demos menu
78eng: "Snow"
79new:
80
81id: LANG_TETRIS
82desc: in the games menu
83eng: "Tetris"
84new:
85
86id: LANG_SOKOBAN
87desc: in the games menu
88eng: "Sokoban"
89new:
90
91id: LANG_WORMLET
92desc: in the games menu
93eng: "Wormlet"
94new:
95
96id: LANG_SNAKE
97desc: in the games menu
98eng: "Snake"
99new:
100
101id: LANG_PLAYLIST_LOAD
102desc: displayed on screen while loading a playlist
103eng: "Loading..."
104new:
105
106id: LANG_PLAYLIST_SHUFFLE
107desc: displayed on screen while shuffling a playlist
108eng: "Shuffling..."
109new:
110
111id: LANG_PLAYLIST_PLAY
112desc: displayed on screen when start playing a playlist
113eng: "Playing..."
114new:
115
116id: LANG_PLAYINDICES_PLAYLIST
117desc: in playlist.indices() when playlist is full
118eng: "Playlist"
119new:
120
121id: LANG_PLAYINDICES_BUFFER
122desc: in playlist.indices() when playlist is full
123eng: "buffer full"
124new:
125
126id: LANG_PLAYINDICES_AMOUNT
127desc: number of files in playlist
128eng: "%d files"
129new:
130
131id: LANG_SETTINGS_SAVE_PLAYER
132desc: displayed if save settings has failed
133eng: "Save failed"
134new:
135
136id: LANG_SETTINGS_BATTERY_PLAYER
137desc: if save settings has failed
138eng: "Batt. low?"
139new:
140
141id: LANG_SETTINGS_SAVE_RECORDER
142desc: displayed if save settings has failed
143eng: "Save failed"
144new:
145
146id: LANG_SETTINGS_BATTERY_RECORDER
147desc: if save settings has failed
148eng: "Is battery low?"
149new:
150
151id: LANG_TIME_SET
152dec: used in set_time()
153eng: "ON to set"
154new:
155
156id: LANG_TIME_REVERT
157desc: used in set_time()
158eng: "OFF to revert"
159new:
160
161id: LANG_HIDDEN
162desc: in settings_menu
163eng: "Hidden Files"
164new:
165
166id: LANG_HIDDEN_SHOW
167desc: in settings_menu
168eng: "Show"
169new:
170
171id: LANG_HIDDEN_HIDE
172desc: in settings_menu
173eng: "Hide"
174new:
175
176id: LANG_CONTRAST
177desc: in settings_menu
178eng: "Contrast"
179new:
180
181id: LANG_SHUFFLE
182desc: in settings_menu
183eng: "Shuffle"
184new:
185
186id: LANG_PLAY_SELECTED
187desc: in settings_menu
188eng: "Play selected first"
189new:
190
191id: LANG_MP3FILTER
192desc: in settings_menu
193eng: "Music Filter"
194new:
195
196id: LANG_SORT_CASE
197desc: in settings_menu
198eng: "Sort Case Sensitive"
199new:
200
201id: LANG_RESUME
202desc: in settings_menu
203eng: "Resume"
204new:
205
206id: LANG_OFF
207desc: Used in a lot of places
208eng: "Off"
209new:
210
211id: LANG_RESUME_SETTING_ASK
212desc: in settings_menu
213eng: "ask"
214new:
215
216id: LANG_ON
217desc: Used in a lot of places
218eng: "On"
219new:
220
221id: LANG_BACKLIGHT
222desc: in settings_menu
223eng: "Backlight"
224new:
225
226id: LANG_BACKLIGHT_ON
227desc: in settings_menu,
228
229id: LANG_SCROLL
230desc: in settings_menu
231eng: "Scroll Speed Setting Example"
232new:
233
234id: LANG_DISCHARGE
235desc: in settings_menu
236eng: "Deep discharge"
237new:
238
239id: LANG_TIME
240desc: in settings_menu
241eng: "Set Time/Date"
242new:
243
244id: LANG_SPINDOWN
245desc: in settings_menu
246eng: "Disk Spindown"
247new:
248
249id: LANG_FFRW_STEP
250desc: in settings_menu
251eng: "FF/RW Min Step"
252new:
253
254id: LANG_FFRW_ACCEL
255desc: in settings_menu
256eng: "FF/RW Accel"
257new:
258
259id: LANG_FOLLOW
260desc: in settings_menu
261eng: "Follow Playlist"
262new:
263
264id: LANG_RESET_ASK_PLAYER
265desc: confirm to reset settings
266eng: "Really?"
267new:
268
269id: LANG_RESET_CONFIRM_PLAYER
270desc: confirm to reset settings
271eng: "Play/Stop"
272new:
273
274id: LANG_RESET_ASK_RECORDER
275desc: confirm to reset settings
276eng: "Are you sure?"
277new:
278
279id: LANG_RESET_CONFIRM_RECORDER
280desc: confirm to reset settings
281eng: "Play = Yes"
282new:
283
284id: LANG_RESET_CANCEL_RECORDER
285desc: confirm to reset settings
286eng: "Any Other = No"
287new:
288
289id: LANG_RESET_DONE_SETTING
290desc: visual confirmation after settings reset
291eng: "Settings"
292new:
293
294id: LANG_RESET_DONE_CLEAR
295desc: visual confirmation after settings reset
296eng: "Cleared"
297new:
298
299id: LANG_RESET_DONE_CANCEL
300desc: Visual confirmation of cancelation
301eng: "Canceled"
302new:
303
304id: LANG_CASE_MENU
305desc: in fileview_settings_menu()
306eng: "Sort Mode"
307new:
308
309id: LANG_SCROLL_MENU
310desc: in display_settings_menu()
311eng: "Scroll Speed"
312new:
313
314id: LANG_RESET
315desc: in system_settings_menu()
316eng: "Reset settings"
317new:
318
319id: LANG_PLAYBACK
320desc: in settings_menu()
321eng: "Playback"
322new:
323
324id: LANG_FILE
325desc: in settings_menu()
326eng: "File View"
327new:
328
329id: LANG_DISPLAY
330desc: in settings_menu()
331eng: "Display"
332new:
333
334id: LANG_SYSTEM
335desc: in settings_menu()
336eng: "System"
337new:
338
339id: LANG_VOLUME
340desc: in sound_settings
341eng: "Volume"
342new:
343
344id: LANG_BALANCE
345desc: in sound_settings
346eng: "Balance"
347new:
348
349id: LANG_BASS
350desc: in sound_settings
351eng: "Bass"
352new:
353
354id: LANG_TREBLE
355desc: in sound_settings
356eng: "Treble"
357new:
358
359id: LANG_LOUDNESS
360desc: in sound_settings
361eng: "Loudness"
362new:
363
364id: LANG_BBOOST
365desc: in sound settings
366eng: "Bass Boost"
367new:
368
369id: LANG_DECAY
370desc: in sound_settings
371eng: "AV decay time"
372new:
373
374id: LANG_CHANNEL_MENU
375desc: in sound_settings
376eng: "Channels"
377new:
378
379id: LANG_CHANNEL
380desc: in sound_settings
381eng: "Channel configuration"
382new:
383
384id: LANG_CHANNEL_STEREO
385desc: in sound_settings
386eng: "Stereo"
387new:
388
389id: LANG_CHANNEL_MONO
390desc: in sound_settings
391eng: "Mono"
392new:
393
394id: LANG_CHANNEL_LEFT
395desc: in sound_settings
396eng: "Mono Left"
397new:
398
399id: LANG_CHANNEL_RIGHT
400desc: in sound_settings
401eng: "Mono Right"
402new:
403
404id: LANG_AUTOVOL
405desc: in sound_settings
406eng: "Auto Volume"
407new:
408
409id: LANG_SHOWDIR_ERROR_BUFFER
410desc: in showdir(), displayed on screen when you reach buffer limit
411eng: "Dir Buffer"
412new:
413
414id: LANG_SHOWDIR_ERROR_FULL
415desc: in showdir(), displayed on screen when you reach buffer limit
416eng: "is full!"
417new:
418
419id: LANG_RESUME_ASK
420desc: question asked at the begining when resume is on
421eng: "Resume?"
422new:
423
424id: LANG_RESUME_CONFIRM_PLAYER
425desc: posible answers to resume question
426eng: "(PLAY/STOP)"
427new:
428
429id: LANG_RESUME_CONFIRM_RECORDER
430desc: posible answer to resume question
431eng: "Play = Yes"
432new:
433
434id: LANG_RESUME_CANCEL_RECORDER
435desc: posible answer to resume question
436eng: "Any Other = No"
437new:
438
439id: LANG_KEYLOCK_ON_PLAYER
440desc: displayed when key lock is on
441eng: "Keylock ON"
442new:
443
444id: LANG_KEYLOCK_OFF_PLAYER
445desc: displayed when key lock is turned off
446eng: "Keylock OFF"
447new:
448
449id: LANG_KEYLOCK_ON_RECORDER
450desc: displayed when key lock is on
451eng: "Key lock is ON"
452new:
453
454id: LANG_KEYLOCK_OFF_RECORDER
455desc: displayed when key lock is turned off
456eng: "Key lock is OFF"
457new:
458
459id: LANG_MUTE_ON_PLAYER
460desc: displayed when mute is on
461eng: "Mute ON"
462new:
463
464id: LANG_MUTE_OFF_PLAYER
465desc: displayed when mute is off
466eng: "MUTE OFF"
467new:
468
469id: LANG_MUTE_ON_RECORDER
470desc: displayed when mute is on
471eng: "Mute is ON"
472new:
473
474id: LANG_MUTE_OFF_RECORDER
475desc: displayed when mute is off
476eng: "Mute is OFF"
477new:
478
479id: LANG_ID3_INFO
480desc: in the browse_id3() function
481eng: "-ID3 Info- "
482new:
483
484id: LANG_ID3_SCREEN
485desc: in the browse_id3() function
486eng: "--Screen-- "
487new:
488
489id: LANG_ID3_TITLE
490desc: in wps
491eng: "[Title]"
492new:
493
494id: LANG_ID3_NO_TITLE
495desc: in wps when no title is avaible
496eng: "<no title>"
497new:
498
499id: LANG_ID3_ARTIST
500desc: in wps
501eng: "[Artist]"
502new:
503
504id: LANG_ID3_NO_ARTIST
505desc: in wps when no artist is avaible
506eng: "<no artist>"
507new:
508
509id: LANG_ID3_ALBUM
510desc: in wps
511eng: "[Album]"
512new:
513
514id: LANG_ID3_NO_ALBUM
515desc: in wps when no album is avaible
516eng: "<no album>"
517new:
518
519id: LANG_ID3_TRACKNUM
520desc: in wps
521eng: "[Tracknum]"
522new:
523
524id: LANG_ID3_NO_TRACKNUM
525desc: in wps if no track number is avaible
526eng: "<no tracknum>"
527new:
528
529id: LANG_ID3_LENGHT
530desc: in wps
531eng: "[Length]"
532new:
533
534id: LANG_ID3_PLAYLIST
535desc: in wps
536eng: "[Playlist]"
537new:
538
539id: LANG_ID3_BITRATE
540desc: in wps
541eng: "[Bitrate]"
542new:
543
544id: LANG_ID3_FRECUENCY
545desc: in wps
546eng: "[Frecuency]"
547new:
548
549id: LANG_ID3_PATH
550desc: in wps
551eng: "[PATH]"
552new:
553
554id: LANG_PITCH_UP
555desc: in wps
556eng: "Pitch up"
557new:
558
559id: LANG_PITCH_DOWN
560desc: in wps
561eng: "Pitch down"
562new:
563
564id: LANG_PAUSE
565desc: in wps
566eng: "Pause"
567new:
568
569id: LANG_F2_MODE
570desc: in wps F2 pressed
571eng: "mode:"
572new:
573
574id: LANG_DIR_FILTER
575desc: in wps F2 pressed
576eng: "Dir filter: %s"
577new:
578
579id: LANG_F3_STATUS
580desc: in wps F3 pressed
581eng: "Status"
582new:
583
584id: LANG_F3_SCROLL
585desc: in wps F3 pressed
586eng: "Scroll"
587new:
588
589id: LANG_F3_BAR
590desc: in wps F3 pressed
591eng: "bar"
592new:
593
594id: LANG_END_PLAYLIST_PLAYER
595desc: when playlist has finished
596eng: "End of list"
597new:
598
599id: LANG_END_CONFIRM_PLAYER
600desc: when playlist has finished
601eng: "<Press ON>"
602new:
603
604id: LANG_END_PLAYLIST_RECORDER
605desc: when playlist has finished
606eng: "<End of song list>"
607new:
608
609id: LANG_END_CONFIRM_RECORDER
610desc: when playlist has finished
611eng: "Press ON"
612new:
613
614id: LANG_SNAKE_SCORE
615desc: when you die in snake game
616eng: "Your score :"
617new:
618
619id: LANG_SNAKE_HISCORE
620desc: high score in snake game
621eng: "High Score: %d"
622new:
623
624id: LANG_SNAKE_HISCORE_NEW
625desc: new high score in snake game
626eng: "New High Score!"
627new:
628
629id: LANG_SNAKE_PAUSE
630desc: displayed when game is paused
631eng: "Game Paused"
632new:
633
634id: LANG_SNAKE_RESUME
635desc: what to do to resume game
636eng: "[Play] to resume"
637new:
638
639id: LANG_SNAKE_QUIT
640desc: how to quit game
641eng: "[Off] to quit"
642new:
643
644id: LANG_SNAKE_LEVEL
645desc: level of difficulty
646eng: "Level - %d"
647new:
648
649id: LANG_SNAKE_RANGE
650desc: range of levels
651eng: "(1 - slow, 9 - fast)"
652new:
653
654id: LANG_SNAKE_START
655desc: how to start or pause the game
656eng: "[Play] to start/pause"
657new:
658
659id: LANG_SOKOBAN_LEVEL
660desc: must be smaller than 6 characters
661eng: "Level"
662new:
663
664id: LANG_SOKOBAN_MOVE
665desc: must be smaller than 6 characters
666eng: "Moves"
667new:
668
669id: LANG_SOKOBAN_WIN
670desc: displayed when you win
671eng: "YOU WIN!!"
672new:
673
674id: LANG_SOKOBAN_QUIT
675desc: how to quit game
676eng: "[Off] to stop"
677new:
678
679id: LANG_SOKOBAN_F1
680desc: what does F1 do
681eng: "[F1] - level"
682new:
683
684id: LANG_SOKOBAN_F2
685desc: what does F2 do
686eng: "[F2] same level"
687new:
688
689id: LANG_SOKOBAN_F3
690desc: what does F3 do
691eng: "[F3] + level"
692new:
693
694# Next ids are for Worlmet Game.
695# Lenght restrictions for score board strings (LANG_SB_XXX):
696# LCD_PROPFONTS: max 43 pixel
697# fix font: max 7 characters
698
699id: LANG_WORMLET_LENGTH
700desc: wormlet game
701eng: "Len:%d"
702new:
703
704id: LANG_WORMLET_GROWING
705desc: wormlet game
706eng: "Growing"
707new:
708
709id: LANG_WORMLET_HUNGRY
710desc: wormlet game
711eng: "Hungry"
712new:
713
714id: LANG_WORMLET_WORMED
715desc: wormlet game
716eng: "Wormed"
717new:
718
719id: LANG_WORMLET_ARGH
720desc: wormlet game
721eng: "Argh"
722new:
723
724id: LANG_WORMLET_CRASHED
725desc: wormlet game
726eng: "Crashed"
727new:
728
729id: LANG_WORMLET_HIGHSCORE
730desc: wormlet game
731eng: "Hs: %d"
732new:
733
734# Length restrictions for wormlet config screen strings (LANG_CS_XXX)
735# They must fit on the entire screen - preferably with the
736# key names aligned right
737
738id: LANG_WORMLET_PLAYERS
739desc: wormlet game
740eng: "%d Players up/dn"
741new:
742
743id: LANG_WORMLET_WORMS
744desc: wormlet game
745eng: "%d Worms l/r"
746new:
747
748id: LANG_WORMLET_REMOTE_CTRL
749desc: wormlet game
750eng: "Remote control F1"
751new:
752
753id: LANG_WORMLET_NO_REM_CTRL
754desc: wormlet game
755eng: "No rem. control F1"
756new:
757
758id: LANG_WORMLET_2_KEY_CTRL
759desc: wormlet game
760eng: "2 key control F1"
761new:
762
763id: LANG_WORMLET_4_KEY_CTRL
764desc: wormlet game
765eng: "4 key control F1"
766new:
767
768id: LANG_WORMLET_NO_CONTROL
769desc: wormlet game
770eng: "Out of control"
771new:
772
773# Wormlet game ids ended
774
775id: LANG_TETRIS_LOSE
776desc: tetris game
777eng: "You lose!"
778new:
779
780id: LANG_TETRIS_LEVEL
781desc: tetris game
782eng: "0 Rows - Level 0"
783new:
diff --git a/apps/main_menu.c b/apps/main_menu.c
index 7430671fc0..ad5388ec6f 100644
--- a/apps/main_menu.c
+++ b/apps/main_menu.c
@@ -172,19 +172,19 @@ Menu show_info(void)
172#endif 172#endif
173 173
174#ifdef HAVE_LCD_CHARCELLS 174#ifdef HAVE_LCD_CHARCELLS
175 snprintf(s, sizeof(s), "Batt: %d%%%s", 175 snprintf(s, sizeof(s), str(LANG_BATTERY_LEVEL_PLAYER),
176 battery_level(), battery_level_safe() ? "" : "!"); 176 battery_level(), battery_level_safe() ? "" : "!");
177 lcd_puts(0, 1, s); 177 lcd_puts(0, 1, s);
178#else 178#else
179#ifdef HAVE_CHARGE_CTRL 179#ifdef HAVE_CHARGE_CTRL
180 if (charger_enabled) 180 if (charger_enabled)
181 snprintf(s, sizeof(s), "Battery: charging"); 181 snprintf(s, sizeof(s), str(LANG_BATTERY_CHARGE));
182 else 182 else
183 snprintf(s, sizeof(s), "Battery: %d%%%s", 183 snprintf(s, sizeof(s), str(LANG_BATTERY_LEVEL_RECORDER),
184 battery_level(), battery_level_safe() ? "" : " !!"); 184 battery_level(), battery_level_safe() ? "" : " !!");
185 lcd_puts(0, 3, s); 185 lcd_puts(0, 3, s);
186#else 186#else
187 snprintf(s, sizeof(s), "Battery: %d%%%s", 187 snprintf(s, sizeof(s), str(LANG_BATTERY_LEVEL_RECORDER),
188 battery_level(), battery_level_safe() ? "" : " !!"); 188 battery_level(), battery_level_safe() ? "" : " !!");
189 lcd_puts(0, 3, s); 189 lcd_puts(0, 3, s);
190#endif 190#endif
@@ -224,7 +224,7 @@ Menu main_menu(void)
224#ifndef SIMULATOR 224#ifndef SIMULATOR
225 { str(LANG_DEBUG), debug_menu }, 225 { str(LANG_DEBUG), debug_menu },
226#else 226#else
227 { "USB (sim)", simulate_usb }, 227 { str(LANG_USB), simulate_usb },
228#endif 228#endif
229 }; 229 };
230 230
diff --git a/apps/playlist.c b/apps/playlist.c
index 76ce81b51a..b81aed8763 100644
--- a/apps/playlist.c
+++ b/apps/playlist.c
@@ -35,6 +35,8 @@
35#include "widgets.h" 35#include "widgets.h"
36#endif 36#endif
37 37
38#include "lang.h"
39
38struct playlist_info playlist; 40struct playlist_info playlist;
39 41
40#define PLAYLIST_BUFFER_SIZE (AVERAGE_FILENAME_LENGTH*MAX_FILES_IN_DIR) 42#define PLAYLIST_BUFFER_SIZE (AVERAGE_FILENAME_LENGTH*MAX_FILES_IN_DIR)
@@ -209,7 +211,7 @@ int play_list(char *dir, /* "current directory" */
209 /* If file is NULL, the list is in RAM */ 211 /* If file is NULL, the list is in RAM */
210 if(file) { 212 if(file) {
211 lcd_clear_display(); 213 lcd_clear_display();
212 lcd_puts(0,0,"Loading..."); 214 lcd_puts(0,0,str(LANG_PLAYLIST_LOAD));
213 status_draw(); 215 status_draw();
214 lcd_update(); 216 lcd_update();
215 playlist.in_ram = false; 217 playlist.in_ram = false;
@@ -273,7 +275,7 @@ int play_list(char *dir, /* "current directory" */
273 } 275 }
274 276
275 if(!playlist.in_ram) { 277 if(!playlist.in_ram) {
276 lcd_puts(0,0,"Playing... "); 278 lcd_puts(0,0,str(LANG_PLAYLIST_PLAY));
277 status_draw(); 279 status_draw();
278 lcd_update(); 280 lcd_update();
279 } 281 }
@@ -350,8 +352,8 @@ void add_indices_to_playlist(void)
350 close(fd); 352 close(fd);
351 353
352 lcd_clear_display(); 354 lcd_clear_display();
353 lcd_puts(0,0,"Playlist"); 355 lcd_puts(0,0,str(LANG_PLAYINDICES_PLAYLIST));
354 lcd_puts(0,1,"buffer full"); 356 lcd_puts(0,1,str(LANG_PLAYINDICES_BUFFER));
355 lcd_update(); 357 lcd_update();
356 sleep(HZ*2); 358 sleep(HZ*2);
357 lcd_clear_display(); 359 lcd_clear_display();
@@ -363,7 +365,8 @@ void add_indices_to_playlist(void)
363 if(!playlist.in_ram) { 365 if(!playlist.in_ram) {
364 if ( current_tick >= next_tick ) { 366 if ( current_tick >= next_tick ) {
365 next_tick = current_tick + HZ; 367 next_tick = current_tick + HZ;
366 snprintf(line, sizeof line, "%d files", 368 snprintf(line, sizeof line,
369 str(LANG_PLAYINDICES_AMOUNT),
367 playlist.amount); 370 playlist.amount);
368 lcd_puts(0,1,line); 371 lcd_puts(0,1,line);
369 status_draw(); 372 status_draw();
@@ -380,7 +383,8 @@ void add_indices_to_playlist(void)
380 break; 383 break;
381 } 384 }
382 if(!playlist.in_ram) { 385 if(!playlist.in_ram) {
383 snprintf(line, sizeof line, "%d files", playlist.amount); 386 snprintf(line, sizeof line, str(LANG_PLAYINDICES_AMOUNT),
387 playlist.amount);
384 lcd_puts(0,1,line); 388 lcd_puts(0,1,line);
385 status_draw(); 389 status_draw();
386 lcd_update(); 390 lcd_update();
diff --git a/apps/recorder/snake.c b/apps/recorder/snake.c
index b0e42d8fd0..8c14527bd5 100644
--- a/apps/recorder/snake.c
+++ b/apps/recorder/snake.c
@@ -20,7 +20,7 @@ dir is the current direction of the snake - 0=up, 1=right, 2=down, 3=left;
20#include "button.h" 20#include "button.h"
21#include "kernel.h" 21#include "kernel.h"
22#include "menu.h" 22#include "menu.h"
23 23#include "lang.h"
24 24
25int board[28][16],snakelength; 25int board[28][16],snakelength;
26unsigned int score,hiscore=0; 26unsigned int score,hiscore=0;
@@ -35,14 +35,14 @@ void die (void) {
35 lcd_clear_display(); 35 lcd_clear_display();
36 snprintf(pscore,sizeof(pscore),"%d",score); 36 snprintf(pscore,sizeof(pscore),"%d",score);
37 lcd_putsxy(3,12,"oops...",0); 37 lcd_putsxy(3,12,"oops...",0);
38 lcd_putsxy(3,22,"Your Score :",0); 38 lcd_putsxy(3,22,str(LANG_SNAKE_SCORE),0);
39 lcd_putsxy(3,32, pscore,0); 39 lcd_putsxy(3,32, pscore,0);
40 if (score>hiscore) { 40 if (score>hiscore) {
41 hiscore=score; 41 hiscore=score;
42 lcd_putsxy(3,42,"New High Score!",0); 42 lcd_putsxy(3,42,str(LANG_SNAKE_HISCORE_NEW),0);
43 } 43 }
44 else { 44 else {
45 snprintf(hscore,sizeof(hscore),"High Score %d",hiscore); 45 snprintf(hscore,sizeof(hscore),str(LANG_SNAKE_HISCORE),hiscore);
46 lcd_putsxy(3,42,hscore,0); 46 lcd_putsxy(3,42,hscore,0);
47 } 47 }
48 lcd_update(); 48 lcd_update();
@@ -141,9 +141,9 @@ void redraw (void) {
141 141
142void game_pause (void) { 142void game_pause (void) {
143 lcd_clear_display(); 143 lcd_clear_display();
144 lcd_putsxy(3,12,"Game Paused",0); 144 lcd_putsxy(3,12,str(LANG_SNAKE_PAUSE),0);
145 lcd_putsxy(3,22,"[play] to resume",0); 145 lcd_putsxy(3,22,str(LANG_SNAKE_RESUME),0);
146 lcd_putsxy(3,32,"[off] to quit",0); 146 lcd_putsxy(3,32,str(LANG_SNAKE_QUIT),0);
147 lcd_update(); 147 lcd_update();
148 while (1) { 148 while (1) {
149 switch (button_get(true)) { 149 switch (button_get(true)) {
@@ -221,12 +221,12 @@ void game_init(void) {
221 221
222 222
223 lcd_clear_display(); 223 lcd_clear_display();
224 snprintf(plevel,sizeof(plevel),"Level - %d",level); 224 snprintf(plevel,sizeof(plevel),str(LANG_SNAKE_LEVEL),level);
225 snprintf(phscore,sizeof(phscore),"High Score - %d",hiscore); 225 snprintf(phscore,sizeof(phscore),str(LANG_SNAKE_HISCORE),hiscore);
226 lcd_putsxy(3,2, plevel,0); 226 lcd_putsxy(3,2, plevel,0);
227 lcd_putsxy(3,12, "(1 - slow, 9 - fast)",0); 227 lcd_putsxy(3,12, str(LANG_SNAKE_RANGE),0);
228 lcd_putsxy(3,22, "[off] to quit",0); 228 lcd_putsxy(3,22, str(LANG_SNAKE_QUIT),0);
229 lcd_putsxy(3,32, "[play] to start/pause",0); 229 lcd_putsxy(3,32, str(LANG_SNAKE_START),0);
230 lcd_putsxy(3,42, phscore,0); 230 lcd_putsxy(3,42, phscore,0);
231 lcd_update(); 231 lcd_update();
232 232
@@ -250,7 +250,7 @@ void game_init(void) {
250 return; 250 return;
251 break; 251 break;
252 } 252 }
253 snprintf(plevel,sizeof(plevel),"Level - %d",level); 253 snprintf(plevel,sizeof(plevel),str(LANG_SNAKE_LEVEL),level);
254 lcd_putsxy(3,2, plevel,0); 254 lcd_putsxy(3,2, plevel,0);
255 lcd_update(); 255 lcd_update();
256 } 256 }
diff --git a/apps/recorder/sokoban.c b/apps/recorder/sokoban.c
index 078153077e..bec556054a 100644
--- a/apps/recorder/sokoban.c
+++ b/apps/recorder/sokoban.c
@@ -32,7 +32,7 @@
32#include <stdio.h> 32#include <stdio.h>
33#endif 33#endif
34#include <string.h> 34#include <string.h>
35 35#include "lang.h"
36#define SOKOBAN_TITLE "Sokoban" 36#define SOKOBAN_TITLE "Sokoban"
37#define SOKOBAN_TITLE_FONT 2 37#define SOKOBAN_TITLE_FONT 2
38#define NUM_LEVELS sizeof(levels)/320 38#define NUM_LEVELS sizeof(levels)/320
@@ -1847,8 +1847,8 @@ void update_screen(void) {
1847 1847
1848 lcd_drawrect (80,0,32,32); 1848 lcd_drawrect (80,0,32,32);
1849 lcd_drawrect (80,32,32,64); 1849 lcd_drawrect (80,32,32,64);
1850 lcd_putsxy (81, 10, "Level", 0); 1850 lcd_putsxy (81, 10, str(LANG_SOKOBAN_LEVEL), 0);
1851 lcd_putsxy (81, 42, "Moves", 0); 1851 lcd_putsxy (81, 42, str(LANG_SOKOBAN_MOVE), 0);
1852 /* print out the screen */ 1852 /* print out the screen */
1853 lcd_update(); 1853 lcd_update();
1854} 1854}
@@ -2187,7 +2187,7 @@ void sokoban_loop(void) {
2187 if (current_level == NUM_LEVELS) { 2187 if (current_level == NUM_LEVELS) {
2188 for(ii=0; ii<30 ; ii++) { 2188 for(ii=0; ii<30 ; ii++) {
2189 lcd_clear_display(); 2189 lcd_clear_display();
2190 lcd_putsxy(10, 20, "YOU WIN!!", 2); 2190 lcd_putsxy(10, 20, str(LANG_SOKOBAN_WIN), 2);
2191 lcd_update(); 2191 lcd_update();
2192 lcd_invertrect(0,0,111,63); 2192 lcd_invertrect(0,0,111,63);
2193 lcd_update(); 2193 lcd_update();
@@ -2232,10 +2232,10 @@ Menu sokoban(void)
2232 2232
2233 lcd_clear_display(); 2233 lcd_clear_display();
2234 2234
2235 lcd_putsxy( 3,12, "[Off] to stop", 0); 2235 lcd_putsxy( 3,12, str(LANG_SOKOBAN_QUIT), 0);
2236 lcd_putsxy( 3,22, "[F1] - level",0); 2236 lcd_putsxy( 3,22, str(LANG_SOKOBAN_F1),0);
2237 lcd_putsxy( 3,32, "[F2] same level",0); 2237 lcd_putsxy( 3,32, str(LANG_SOKOBAN_F2),0);
2238 lcd_putsxy( 3,42, "[F3] + level",0); 2238 lcd_putsxy( 3,42, str(LANG_SOKOBAN_F3),0);
2239 2239
2240 lcd_update(); 2240 lcd_update();
2241 sleep(HZ*2); 2241 sleep(HZ*2);
diff --git a/apps/recorder/tetris.c b/apps/recorder/tetris.c
index ba7ff546f7..2455f269b3 100644
--- a/apps/recorder/tetris.c
+++ b/apps/recorder/tetris.c
@@ -35,7 +35,7 @@
35#include <stdio.h> 35#include <stdio.h>
36#endif 36#endif
37#include "sprintf.h" 37#include "sprintf.h"
38 38#include "lang.h"
39#define TETRIS_TITLE "Tetris!" 39#define TETRIS_TITLE "Tetris!"
40#define TETRIS_TITLE_FONT 1 40#define TETRIS_TITLE_FONT 1
41#define TETRIS_TITLE_XLOC 43 41#define TETRIS_TITLE_XLOC 43
@@ -366,7 +366,7 @@ void game_loop(void)
366 if(gameover()) 366 if(gameover())
367 { 367 {
368 lcd_clearrect(0, 52, LCD_WIDTH, LCD_HEIGHT - 52); 368 lcd_clearrect(0, 52, LCD_WIDTH, LCD_HEIGHT - 52);
369 lcd_putsxy (2, 52, "You lose!", 0); 369 lcd_putsxy (2, 52, str(LANG_TETRIS_LOSE), 0);
370 lcd_update(); 370 lcd_update();
371 sleep(HZ * 3); 371 sleep(HZ * 3);
372 return; 372 return;
@@ -396,7 +396,7 @@ Menu tetris(void)
396 init_tetris(); 396 init_tetris();
397 397
398 draw_frame(start_x, start_x + max_x - 1, start_y - 1, start_y + max_y); 398 draw_frame(start_x, start_x + max_x - 1, start_y - 1, start_y + max_y);
399 lcd_putsxy (2, 42, "0 Rows - Level 0", 0); 399 lcd_putsxy (2, 42, str(LANG_TETRIS_LEVEL), 0);
400 lcd_update(); 400 lcd_update();
401 401
402 next_b = t_rand(blocks); 402 next_b = t_rand(blocks);
diff --git a/apps/recorder/wormlet.c b/apps/recorder/wormlet.c
index 71a356134f..acebbad8bf 100644
--- a/apps/recorder/wormlet.c
+++ b/apps/recorder/wormlet.c
@@ -33,36 +33,7 @@
33#include "kernel.h" 33#include "kernel.h"
34#include "menu.h" 34#include "menu.h"
35#include "rtc.h" 35#include "rtc.h"
36 36#include "lang.h"
37/* I extracted string constants for output to
38 simplify inernationalization - once we have
39 decided how to do that exactly. Even though
40 there are other strings in the code they don't
41 have to be internationalized because they are
42 only for debugging purposes and are only included
43 if DEBUG_WORMLET is defined anyway.*/
44
45/* Length restriction for score board strings (LANG_SB_XXX):
46 LCD_PROPFONTS: max 43 pixel
47 fix font: max 7 characters*/
48#define LANG_SB_LENGTH "Len:%d"
49#define LANG_SB_GROWING "Growing"
50#define LANG_SB_HUNGRY "Hungry"
51#define LANG_SB_WORMED "Wormed"
52#define LANG_SB_ARGH "Argh"
53#define LANG_SB_CRASHED "Crashed"
54#define LANG_SB_HIGHSCORE "Hs: %d"
55
56/* Length restriction for config screen strings (LANG_CS_XXX):
57 The must fit on the entire screen - preferably
58 with the key names aligned right. */
59#define LANG_CS_PLAYERS "%d Players up/dn"
60#define LANG_CS_WORMS "%d Worms l/r"
61#define LANG_CS_REMOTE_CTRL "Remote control F1"
62#define LANG_CS_NO_REM_CTRL "No rem. control F1"
63#define LANG_CS_2_KEY_CTRL "2 key control F1"
64#define LANG_CS_4_KEY_CTRL "4 key control F1"
65#define LANG_CS_NO_CONTROL "Out of control"
66 37
67/* size of the field the worm lives in */ 38/* size of the field the worm lives in */
68#define FIELD_RECT_X 1 39#define FIELD_RECT_X 1
@@ -1208,37 +1179,37 @@ static void score_board(void)
1208 } 1179 }
1209 1180
1210 /* length */ 1181 /* length */
1211 snprintf(buf, sizeof (buf), LANG_SB_LENGTH, score); 1182 snprintf(buf, sizeof (buf),str(LANG_WORMLET_LENGTH), score);
1212 1183
1213 /* worm state */ 1184 /* worm state */
1214 switch (check_collision(&worms[i])) { 1185 switch (check_collision(&worms[i])) {
1215 case COLLISION_NONE: 1186 case COLLISION_NONE:
1216 if (worms[i].growing > 0){ 1187 if (worms[i].growing > 0){
1217 snprintf(buf2, sizeof(buf2), LANG_SB_GROWING); 1188 snprintf(buf2, sizeof(buf2), str(LANG_WORMLET_GROWING));
1218 } 1189 }
1219 else { 1190 else {
1220 if (worms[i].alive) { 1191 if (worms[i].alive) {
1221 snprintf(buf2, sizeof(buf2), LANG_SB_HUNGRY); 1192 snprintf(buf2, sizeof(buf2), str(LANG_WORMLET_HUNGRY));
1222 } else { 1193 } else {
1223 snprintf(buf2, sizeof(buf2), LANG_SB_WORMED); 1194 snprintf(buf2, sizeof(buf2), str(LANG_WORMLET_WORMED));
1224 } 1195 }
1225 } 1196 }
1226 break; 1197 break;
1227 1198
1228 case COLLISION_WORM: 1199 case COLLISION_WORM:
1229 snprintf(buf2, sizeof(buf2), LANG_SB_WORMED); 1200 snprintf(buf2, sizeof(buf2), str(LANG_WORMLET_WORMED));
1230 break; 1201 break;
1231 1202
1232 case COLLISION_FOOD: 1203 case COLLISION_FOOD:
1233 snprintf(buf2, sizeof(buf2), LANG_SB_GROWING); 1204 snprintf(buf2, sizeof(buf2), str(LANG_WORMLET_GROWING));
1234 break; 1205 break;
1235 1206
1236 case COLLISION_ARGH: 1207 case COLLISION_ARGH:
1237 snprintf(buf2, sizeof(buf2), LANG_SB_ARGH); 1208 snprintf(buf2, sizeof(buf2), str(LANG_WORMLET_ARGH));
1238 break; 1209 break;
1239 1210
1240 case COLLISION_FIELD: 1211 case COLLISION_FIELD:
1241 snprintf(buf2, sizeof(buf2), LANG_SB_CRASHED); 1212 snprintf(buf2, sizeof(buf2), str(LANG_WORMLET_CRASHED));
1242 break; 1213 break;
1243 } 1214 }
1244 lcd_putsxy(FIELD_RECT_WIDTH + 3, y , buf, 0); 1215 lcd_putsxy(FIELD_RECT_WIDTH + 3, y , buf, 0);
@@ -1250,7 +1221,7 @@ static void score_board(void)
1250 } 1221 }
1251 y += 19; 1222 y += 19;
1252 } 1223 }
1253 snprintf(buf , sizeof(buf), LANG_SB_HIGHSCORE, highscore); 1224 snprintf(buf , sizeof(buf), str(LANG_WORMLET_HIGHSCORE), highscore);
1254#ifndef DEBUG_WORMLET 1225#ifndef DEBUG_WORMLET
1255 lcd_putsxy(FIELD_RECT_WIDTH + 3, LCD_HEIGHT - 8, buf, 0); 1226 lcd_putsxy(FIELD_RECT_WIDTH + 3, LCD_HEIGHT - 8, buf, 0);
1256#else 1227#else
@@ -1937,29 +1908,29 @@ Menu wormlet(void)
1937 lcd_clear_display(); 1908 lcd_clear_display();
1938 1909
1939 /* first line players */ 1910 /* first line players */
1940 snprintf(buf, sizeof buf, LANG_CS_PLAYERS, players); 1911 snprintf(buf, sizeof buf, str(LANG_WORMLET_PLAYERS), players);
1941 lcd_puts(0, 0, buf); 1912 lcd_puts(0, 0, buf);
1942 1913
1943 /* second line worms */ 1914 /* second line worms */
1944 snprintf(buf, sizeof buf, LANG_CS_WORMS, worm_count); 1915 snprintf(buf, sizeof buf, str(LANG_WORMLET_WORMS), worm_count);
1945 lcd_puts(0, 1, buf); 1916 lcd_puts(0, 1, buf);
1946 1917
1947 /* third line control */ 1918 /* third line control */
1948 if (players > 1) { 1919 if (players > 1) {
1949 if (use_remote) { 1920 if (use_remote) {
1950 snprintf(buf, sizeof buf, LANG_CS_REMOTE_CTRL); 1921 snprintf(buf, sizeof buf, str(LANG_WORMLET_REMOTE_CTRL));
1951 } else { 1922 } else {
1952 snprintf(buf, sizeof buf, LANG_CS_NO_REM_CTRL); 1923 snprintf(buf, sizeof buf, str(LANG_WORMLET_NO_REM_CTRL));
1953 } 1924 }
1954 } else { 1925 } else {
1955 if (players > 0) { 1926 if (players > 0) {
1956 if (use_remote) { 1927 if (use_remote) {
1957 snprintf(buf, sizeof buf, LANG_CS_2_KEY_CTRL); 1928 snprintf(buf, sizeof buf, str(LANG_WORMLET_2_KEY_CTRL));
1958 } else { 1929 } else {
1959 snprintf(buf, sizeof buf, LANG_CS_4_KEY_CTRL); 1930 snprintf(buf, sizeof buf, str(LANG_WORMLET_4_KEY_CTRL));
1960 } 1931 }
1961 } else { 1932 } else {
1962 snprintf(buf, sizeof buf, LANG_CS_NO_CONTROL); 1933 snprintf(buf, sizeof buf, str(LANG_WORMLET_NO_CONTROL));
1963 } 1934 }
1964 } 1935 }
1965 lcd_puts(0, 2, buf); 1936 lcd_puts(0, 2, buf);
diff --git a/apps/settings.c b/apps/settings.c
index 76b0cc5088..3bc39ed6d2 100644
--- a/apps/settings.c
+++ b/apps/settings.c
@@ -43,6 +43,8 @@
43#include "font.h" 43#include "font.h"
44#endif 44#endif
45 45
46#include "lang.h"
47
46struct user_settings global_settings; 48struct user_settings global_settings;
47char rockboxdir[] = ROCKBOX_DIR; /* config/font/data file directory */ 49char rockboxdir[] = ROCKBOX_DIR; /* config/font/data file directory */
48 50
@@ -304,11 +306,11 @@ int settings_save( void )
304 { 306 {
305 lcd_clear_display(); 307 lcd_clear_display();
306#ifdef HAVE_LCD_CHARCELLS 308#ifdef HAVE_LCD_CHARCELLS
307 lcd_puts(0, 0, "Save failed"); 309 lcd_puts(0, 0, str(LANG_SETTINGS_SAVE_PLAYER));
308 lcd_puts(0, 1, "Batt. low?"); 310 lcd_puts(0, 1, str(LANG_SETTINGS_BATTERY_PLAYER));
309#else 311#else
310 lcd_puts(4, 2, "Save failed"); 312 lcd_puts(4, 2, str(LANG_SETTINGS_SAVE_RECORDER));
311 lcd_puts(2, 4, "Is battery low?"); 313 lcd_puts(2, 4, str(LANG_SETTINGS_BATTERY_RECORDER));
312 lcd_update(); 314 lcd_update();
313#endif 315#endif
314 sleep(HZ*2); 316 sleep(HZ*2);
@@ -944,8 +946,8 @@ void set_time(char* string, int timedate[])
944 cursor[cursorpos][INDEX_WIDTH], 946 cursor[cursorpos][INDEX_WIDTH],
945 line_height); 947 line_height);
946 948
947 lcd_puts(0, 4, "ON to set"); 949 lcd_puts(0, 4, str(LANG_TIME_SET));
948 lcd_puts(0, 5, "OFF to revert"); 950 lcd_puts(0, 5, str(LANG_TIME_REVERT));
949#ifdef HAVE_LCD_BITMAP 951#ifdef HAVE_LCD_BITMAP
950 status_draw(); 952 status_draw();
951#endif 953#endif
diff --git a/apps/settings_menu.c b/apps/settings_menu.c
index d40263cd00..678eda437e 100644
--- a/apps/settings_menu.c
+++ b/apps/settings_menu.c
@@ -36,17 +36,18 @@
36#include "powermgmt.h" 36#include "powermgmt.h"
37#include "rtc.h" 37#include "rtc.h"
38#include "ata.h" 38#include "ata.h"
39#include "lang.h"
39 40
40static Menu show_hidden_files(void) 41static Menu show_hidden_files(void)
41{ 42{
42 set_bool_options( "Hidden Files", &global_settings.show_hidden_files, 43 set_bool_options( str(LANG_HIDDEN), &global_settings.show_hidden_files,
43 "show", "hide" ); 44 str(LANG_HIDDEN_SHOW), str(LANG_HIDDEN_HIDE) );
44 return MENU_OK; 45 return MENU_OK;
45} 46}
46 47
47static Menu contrast(void) 48static Menu contrast(void)
48{ 49{
49 set_int( "Contrast", "", &global_settings.contrast, 50 set_int( str(LANG_CONTRAST), "", &global_settings.contrast,
50 lcd_set_contrast, 1, 0, MAX_CONTRAST_SETTING ); 51 lcd_set_contrast, 1, 0, MAX_CONTRAST_SETTING );
51 return MENU_OK; 52 return MENU_OK;
52} 53}
@@ -54,50 +55,53 @@ static Menu contrast(void)
54#ifndef HAVE_RECORDER_KEYPAD 55#ifndef HAVE_RECORDER_KEYPAD
55static Menu shuffle(void) 56static Menu shuffle(void)
56{ 57{
57 set_bool( "Shuffle", &global_settings.playlist_shuffle ); 58 set_bool( str(LANG_SHUFFLE), &global_settings.playlist_shuffle );
58 return MENU_OK; 59 return MENU_OK;
59} 60}
60#endif 61#endif
61 62
62static Menu play_selected(void) 63static Menu play_selected(void)
63{ 64{
64 set_bool( "Play Selected", &global_settings.play_selected ); 65 set_bool( str(LANG_PLAY_SELECTED), &global_settings.play_selected );
65 return MENU_OK; 66 return MENU_OK;
66} 67}
67 68
68static Menu mp3_filter(void) 69static Menu mp3_filter(void)
69{ 70{
70 set_bool( "Music Filter", &global_settings.mp3filter ); 71 set_bool( str(LANG_MP3FILTER), &global_settings.mp3filter );
71 return MENU_OK; 72 return MENU_OK;
72} 73}
73 74
74static Menu sort_case(void) 75static Menu sort_case(void)
75{ 76{
76 set_bool( "Sort Case Sensitive", &global_settings.sort_case ); 77 set_bool( str(LANG_SORT_CASE), &global_settings.sort_case );
77 return MENU_OK; 78 return MENU_OK;
78} 79}
79 80
80static Menu resume(void) 81static Menu resume(void)
81{ 82{
82 char* names[] = { "off", "ask", "on" }; 83 char* names[] = { str(LANG_OFF),
83 set_option( "Resume", &global_settings.resume, names, 3, NULL ); 84 str(LANG_RESUME_SETTING_ASK),
85 str(LANG_ON) };
86 set_option( str(LANG_RESUME), &global_settings.resume, names, 3, NULL );
84 return MENU_OK; 87 return MENU_OK;
85} 88}
86 89
87static Menu backlight_timer(void) 90static Menu backlight_timer(void)
88{ 91{
89 char* names[] = { "off", "on ", 92 char* names[] = { str(LANG_OFF), str(LANG_ON),
90 "1s ", "2s ", "3s ", "4s ", "5s ", 93 "1s ", "2s ", "3s ", "4s ", "5s ",
91 "6s ", "7s ", "8s ", "9s ", "10s", 94 "6s ", "7s ", "8s ", "9s ", "10s",
92 "15s", "20s", "25s", "30s", "45s", 95 "15s", "20s", "25s", "30s", "45s",
93 "60s", "90s"}; 96 "60s", "90s"};
94 set_option("Backlight", &global_settings.backlight, names, 19, backlight_time ); 97 set_option(str(LANG_BACKLIGHT), &global_settings.backlight, names, 19,
98 backlight_time );
95 return MENU_OK; 99 return MENU_OK;
96} 100}
97 101
98static Menu scroll_speed(void) 102static Menu scroll_speed(void)
99{ 103{
100 set_int("Scroll Speed Setting Example", "", &global_settings.scroll_speed, 104 set_int(str(LANG_SCROLL), "", &global_settings.scroll_speed,
101 &lcd_scroll_speed, 1, 1, 30 ); 105 &lcd_scroll_speed, 1, 1, 30 );
102 return MENU_OK; 106 return MENU_OK;
103} 107}
@@ -105,7 +109,7 @@ static Menu scroll_speed(void)
105#ifdef HAVE_CHARGE_CTRL 109#ifdef HAVE_CHARGE_CTRL
106static Menu deep_discharge(void) 110static Menu deep_discharge(void)
107{ 111{
108 set_bool( "Deep Discharge", &global_settings.discharge ); 112 set_bool( str(LANG_DISCHARGE), &global_settings.discharge );
109 charge_restart_level = global_settings.discharge ? 113 charge_restart_level = global_settings.discharge ?
110 CHARGE_RESTART_LO : CHARGE_RESTART_HI; 114 CHARGE_RESTART_LO : CHARGE_RESTART_HI;
111 return MENU_OK; 115 return MENU_OK;
@@ -139,7 +143,7 @@ static Menu timedate_set(void)
139 timedate[5] = ((timedate[5] & 0x30) >> 4) * 10 + (timedate[5] & 0x0f); 143 timedate[5] = ((timedate[5] & 0x30) >> 4) * 10 + (timedate[5] & 0x0f);
140 144
141 145
142 set_time("Set time/date",timedate); 146 set_time(str(LANG_TIME),timedate);
143 147
144 if(timedate[0] != -1) { 148 if(timedate[0] != -1) {
145 /* hour */ 149 /* hour */
@@ -155,14 +159,14 @@ static Menu timedate_set(void)
155 /* day */ 159 /* day */
156 timedate[5] = ((timedate[5]/10) << 4 | timedate[5]%10) & 0x3f; 160 timedate[5] = ((timedate[5]/10) << 4 | timedate[5]%10) & 0x3f;
157 161
158 rtc_write(0x03, timedate[0] | (rtc_read(0x03) & 0xc0)); /* hour */ 162 rtc_write(0x03, timedate[0] | (rtc_read(0x03) & 0xc0)); /* hour */
159 rtc_write(0x02, timedate[1] | (rtc_read(0x02) & 0x80)); /* minute */ 163 rtc_write(0x02, timedate[1] | (rtc_read(0x02) & 0x80)); /* minute */
160 rtc_write(0x01, timedate[2] | (rtc_read(0x01) & 0x80)); /* second */ 164 rtc_write(0x01, timedate[2] | (rtc_read(0x01) & 0x80)); /* second */
161 rtc_write(0x07, timedate[3]); /* year */ 165 rtc_write(0x07, timedate[3]); /* year */
162 rtc_write(0x06, timedate[4] | (rtc_read(0x06) & 0xe0)); /* month */ 166 rtc_write(0x06, timedate[4] | (rtc_read(0x06) & 0xe0)); /* month */
163 rtc_write(0x05, timedate[5] | (rtc_read(0x05) & 0xc0)); /* day */ 167 rtc_write(0x05, timedate[5] | (rtc_read(0x05) & 0xc0)); /* day */
164 rtc_write(0x04, timedate[6] | (rtc_read(0x04) & 0xf8)); /* dayofweek */ 168 rtc_write(0x04, timedate[6] | (rtc_read(0x04) & 0xf8)); /* dayofweek */
165 rtc_write(0x00, 0x00); /* 0.1 + 0.01 seconds */ 169 rtc_write(0x00, 0x00); /* 0.1 + 0.01 seconds */
166 } 170 }
167 return MENU_OK; 171 return MENU_OK;
168} 172}
@@ -170,7 +174,7 @@ static Menu timedate_set(void)
170 174
171static Menu spindown(void) 175static Menu spindown(void)
172{ 176{
173 set_int("Disk Spindown", "s", &global_settings.disk_spindown, 177 set_int(str(LANG_SPINDOWN), "s", &global_settings.disk_spindown,
174 ata_spindown, 1, 3, 254 ); 178 ata_spindown, 1, 3, 254 );
175 return MENU_OK; 179 return MENU_OK;
176} 180}
@@ -181,25 +185,25 @@ static Menu ff_rewind_min_step(void)
181 "5s", "6s", "8s", "10s", 185 "5s", "6s", "8s", "10s",
182 "15s", "20s", "25s", "30s", 186 "15s", "20s", "25s", "30s",
183 "45s", "60s" }; 187 "45s", "60s" };
184 set_option("FF/RW Min Step", &global_settings.ff_rewind_min_step, 188 set_option(str(LANG_FFRW_STEP), &global_settings.ff_rewind_min_step,
185 names, 14, NULL ); 189 names, 14, NULL );
186 return MENU_OK; 190 return MENU_OK;
187} 191}
188 192
189static Menu ff_rewind_accel(void) 193static Menu ff_rewind_accel(void)
190{ 194{
191 char* names[] = { "off", "2x/1s", "2x/2s", "2x/3s", 195 char* names[] = { str(LANG_OFF), "2x/1s", "2x/2s", "2x/3s",
192 "2x/4s", "2x/5s", "2x/6s", "2x/7s", 196 "2x/4s", "2x/5s", "2x/6s", "2x/7s",
193 "2x/8s", "2x/9s", "2x/10s", "2x/11s", 197 "2x/8s", "2x/9s", "2x/10s", "2x/11s",
194 "2x/12s", "2x/13s", "2x/14s", "2x/15s", }; 198 "2x/12s", "2x/13s", "2x/14s", "2x/15s", };
195 set_option("FF/RW Accel", &global_settings.ff_rewind_accel, 199 set_option(str(LANG_FFRW_ACCEL), &global_settings.ff_rewind_accel,
196 names, 16, NULL ); 200 names, 16, NULL );
197 return MENU_OK; 201 return MENU_OK;
198} 202}
199 203
200static Menu browse_current(void) 204static Menu browse_current(void)
201{ 205{
202 set_bool( "Follow Playlist", &global_settings.browse_current ); 206 set_bool( str(LANG_FOLLOW), &global_settings.browse_current );
203 return MENU_OK; 207 return MENU_OK;
204} 208}
205 209
@@ -210,13 +214,14 @@ Menu playback_settings_menu(void)
210 214
211 struct menu_items items[] = { 215 struct menu_items items[] = {
212#ifndef HAVE_RECORDER_KEYPAD 216#ifndef HAVE_RECORDER_KEYPAD
213 { "Shuffle", shuffle }, 217 { str(LANG_SHUFFLE), shuffle },
214#endif 218#endif
215 { "Play Selected", play_selected }, 219 { str(LANG_PLAY_SELECTED), play_selected },
216 { "Resume", resume }, 220 { str(LANG_RESUME), resume },
217 { "FF/RW Min Step", ff_rewind_min_step }, 221 { str(LANG_FFRW_STEP), ff_rewind_min_step },
218 { "FF/RW Accel", ff_rewind_accel }, 222 { str(LANG_FFRW_ACCEL), ff_rewind_accel },
219 }; 223 };
224
220 bool old_shuffle = global_settings.playlist_shuffle; 225 bool old_shuffle = global_settings.playlist_shuffle;
221 226
222 m=menu_init( items, sizeof items / sizeof(struct menu_items) ); 227 m=menu_init( items, sizeof items / sizeof(struct menu_items) );
@@ -243,26 +248,26 @@ static Menu reset_settings(void)
243 248
244 lcd_clear_display(); 249 lcd_clear_display();
245#ifdef HAVE_LCD_CHARCELLS 250#ifdef HAVE_LCD_CHARCELLS
246 lcd_puts(0,0,"Really?"); 251 lcd_puts(0,0,str(LANG_RESET_ASK_PLAYER));
247 lcd_puts(0,1,"Play/Stop"); 252 lcd_puts(0,1,str(LANG_RESET_CONFIRM_PLAYER));
248#else 253#else
249 lcd_puts(0,0,"Are you sure?"); 254 lcd_puts(0,0,str(LANG_RESET_ASK_RECORDER));
250 lcd_puts(0,1,"Play = Yes"); 255 lcd_puts(0,1,str(LANG_RESET_CONFIRM_RECORDER));
251 lcd_puts(0,2,"Any Other = No"); 256 lcd_puts(0,2,str(LANG_RESET_CANCEL_RECORDER));
252#endif 257#endif
253 lcd_update(); 258 lcd_update();
254 button = button_get(true); 259 button = button_get(true);
255 if (button == BUTTON_PLAY) { 260 if (button == BUTTON_PLAY) {
256 settings_reset(); 261 settings_reset();
257 lcd_clear_display(); 262 lcd_clear_display();
258 lcd_puts(0,0,"Settings"); 263 lcd_puts(0,0,str(LANG_RESET_DONE_SETTING));
259 lcd_puts(0,1,"Cleared"); 264 lcd_puts(0,1,str(LANG_RESET_DONE_CLEAR));
260 lcd_update(); 265 lcd_update();
261 sleep(HZ); 266 sleep(HZ);
262 return(true); 267 return(true);
263 } else { 268 } else {
264 lcd_clear_display(); 269 lcd_clear_display();
265 lcd_puts(0,0,"Canceled"); 270 lcd_puts(0,0,str(LANG_RESET_DONE_CANCEL));
266 lcd_update(); 271 lcd_update();
267 sleep(HZ); 272 sleep(HZ);
268 return(false); 273 return(false);
@@ -275,10 +280,10 @@ static Menu fileview_settings_menu(void)
275 Menu result; 280 Menu result;
276 281
277 struct menu_items items[] = { 282 struct menu_items items[] = {
278 { "Sort Mode", sort_case }, 283 { str(LANG_CASE_MENU), sort_case },
279 { "Music Filter", mp3_filter }, 284 { str(LANG_MP3FILTER), mp3_filter },
280 { "Hidden Files", show_hidden_files }, 285 { str(LANG_HIDDEN), show_hidden_files },
281 { "Follow Playlist", browse_current }, 286 { str(LANG_FOLLOW), browse_current },
282 }; 287 };
283 288
284 m=menu_init( items, sizeof items / sizeof(struct menu_items) ); 289 m=menu_init( items, sizeof items / sizeof(struct menu_items) );
@@ -293,9 +298,9 @@ static Menu display_settings_menu(void)
293 Menu result; 298 Menu result;
294 299
295 struct menu_items items[] = { 300 struct menu_items items[] = {
296 { "Scroll Speed", scroll_speed }, 301 { str(LANG_SCROLL_MENU), scroll_speed },
297 { "Backlight", backlight_timer }, 302 { str(LANG_BACKLIGHT), backlight_timer },
298 { "Contrast", contrast }, 303 { str(LANG_CONTRAST), contrast },
299 }; 304 };
300 305
301 m=menu_init( items, sizeof items / sizeof(struct menu_items) ); 306 m=menu_init( items, sizeof items / sizeof(struct menu_items) );
@@ -310,14 +315,14 @@ static Menu system_settings_menu(void)
310 Menu result; 315 Menu result;
311 316
312 struct menu_items items[] = { 317 struct menu_items items[] = {
313 { "Disk Spindown", spindown }, 318 { str(LANG_SPINDOWN), spindown },
314#ifdef HAVE_CHARGE_CTRL 319#ifdef HAVE_CHARGE_CTRL
315 { "Deep Discharge", deep_discharge }, 320 { str(LANG_DISCHARGE), deep_discharge },
316#endif 321#endif
317#ifdef HAVE_RTC 322#ifdef HAVE_RTC
318 { "Time/Date", timedate_set }, 323 { str(LANG_TIME), timedate_set },
319#endif 324#endif
320 { "Reset settings", reset_settings }, 325 { str(LANG_RESET), reset_settings },
321 }; 326 };
322 327
323 m=menu_init( items, sizeof items / sizeof(struct menu_items) ); 328 m=menu_init( items, sizeof items / sizeof(struct menu_items) );
@@ -332,10 +337,10 @@ Menu settings_menu(void)
332 Menu result; 337 Menu result;
333 338
334 struct menu_items items[] = { 339 struct menu_items items[] = {
335 { "Playback", playback_settings_menu }, 340 { str(LANG_PLAYBACK), playback_settings_menu },
336 { "File View", fileview_settings_menu }, 341 { str(LANG_FILE), fileview_settings_menu },
337 { "Display", display_settings_menu }, 342 { str(LANG_DISPLAY), display_settings_menu },
338 { "System", system_settings_menu }, 343 { str(LANG_SYSTEM), system_settings_menu },
339 }; 344 };
340 345
341 m=menu_init( items, sizeof items / sizeof(struct menu_items) ); 346 m=menu_init( items, sizeof items / sizeof(struct menu_items) );
diff --git a/apps/sound_menu.c b/apps/sound_menu.c
index 664ad0b9fb..c7d72cf553 100644
--- a/apps/sound_menu.c
+++ b/apps/sound_menu.c
@@ -29,6 +29,7 @@
29#ifdef HAVE_LCD_BITMAP 29#ifdef HAVE_LCD_BITMAP
30#include "icons.h" 30#include "icons.h"
31#endif 31#endif
32#include "lang.h"
32 33
33static char *fmt[] = 34static char *fmt[] =
34{ 35{
@@ -147,38 +148,38 @@ void set_sound(char* string,
147 148
148static Menu volume(void) 149static Menu volume(void)
149{ 150{
150 set_sound("Volume", &global_settings.volume, SOUND_VOLUME); 151 set_sound(str(LANG_VOLUME), &global_settings.volume, SOUND_VOLUME);
151 return MENU_OK; 152 return MENU_OK;
152} 153}
153 154
154static Menu balance(void) 155static Menu balance(void)
155{ 156{
156 set_sound("Balance", &global_settings.balance, SOUND_BALANCE); 157 set_sound(str(LANG_BALANCE), &global_settings.balance, SOUND_BALANCE);
157 return MENU_OK; 158 return MENU_OK;
158} 159}
159 160
160static Menu bass(void) 161static Menu bass(void)
161{ 162{
162 set_sound("Bass", &global_settings.bass, SOUND_BASS); 163 set_sound(str(LANG_BASS), &global_settings.bass, SOUND_BASS);
163 return MENU_OK; 164 return MENU_OK;
164}; 165};
165 166
166static Menu treble(void) 167static Menu treble(void)
167{ 168{
168 set_sound("Treble", &global_settings.treble, SOUND_TREBLE); 169 set_sound(str(LANG_TREBLE), &global_settings.treble, SOUND_TREBLE);
169 return MENU_OK; 170 return MENU_OK;
170} 171}
171 172
172#ifdef HAVE_MAS3587F 173#ifdef HAVE_MAS3587F
173static Menu loudness(void) 174static Menu loudness(void)
174{ 175{
175 set_sound("Loudness", &global_settings.loudness, SOUND_LOUDNESS); 176 set_sound(str(LANG_LOUDNESS), &global_settings.loudness, SOUND_LOUDNESS);
176 return MENU_OK; 177 return MENU_OK;
177}; 178};
178 179
179static Menu bass_boost(void) 180static Menu bass_boost(void)
180{ 181{
181 set_sound("Bass boost", &global_settings.bass_boost, SOUND_SUPERBASS); 182 set_sound(str(LANG_BBOOST), &global_settings.bass_boost, SOUND_SUPERBASS);
182 return MENU_OK; 183 return MENU_OK;
183}; 184};
184 185
@@ -189,8 +190,8 @@ static void set_avc(int val)
189 190
190static Menu avc(void) 191static Menu avc(void)
191{ 192{
192 char* names[] = { "off", "2s", "4s", "8s" }; 193 char* names[] = { str(LANG_OFF), "2s", "4s", "8s" };
193 set_option("AV decay time", &global_settings.avc, names, 4, set_avc ); 194 set_option(str(LANG_DECAY), &global_settings.avc, names, 4, set_avc );
194 return MENU_OK; 195 return MENU_OK;
195} 196}
196#endif /* ARCHOS_RECORDER */ 197#endif /* ARCHOS_RECORDER */
@@ -202,8 +203,9 @@ static void set_chanconf(int val)
202 203
203static Menu chanconf(void) 204static Menu chanconf(void)
204{ 205{
205 char *names[] = {"Stereo", "Mono", "Mono Left", "Mono Right" }; 206 char *names[] = {str(LANG_CHANNEL_STEREO), str(LANG_CHANNEL_MONO),
206 set_option("Channel configuration", 207 str(LANG_CHANNEL_LEFT),str(LANG_CHANNEL_RIGHT) };
208 set_option(str(LANG_CHANNEL),
207 &global_settings.channel_config, names, 4, set_chanconf ); 209 &global_settings.channel_config, names, 4, set_chanconf );
208 return MENU_OK; 210 return MENU_OK;
209} 211}
@@ -213,15 +215,15 @@ Menu sound_menu(void)
213 int m; 215 int m;
214 Menu result; 216 Menu result;
215 struct menu_items items[] = { 217 struct menu_items items[] = {
216 { "Volume", volume }, 218 { str(LANG_VOLUME), volume },
217 { "Bass", bass }, 219 { str(LANG_BASS), bass },
218 { "Treble", treble }, 220 { str(LANG_TREBLE), treble },
219 { "Balance", balance }, 221 { str(LANG_BALANCE), balance },
220 { "Channels", chanconf }, 222 { str(LANG_CHANNEL_MENU), chanconf },
221#ifdef HAVE_MAS3587F 223#ifdef HAVE_MAS3587F
222 { "Loudness", loudness }, 224 { str(LANG_LOUDNESS), loudness },
223 { "Bass Boost", bass_boost }, 225 { str(LANG_BBOOST), bass_boost },
224 { "Auto Volume", avc } 226 { str(LANG_AUTOVOL), avc }
225#endif 227#endif
226 }; 228 };
227 229
diff --git a/apps/tree.c b/apps/tree.c
index b86f606cc6..40d686490a 100644
--- a/apps/tree.c
+++ b/apps/tree.c
@@ -45,6 +45,7 @@
45#include "ata.h" 45#include "ata.h"
46#include "rolo.h" 46#include "rolo.h"
47#include "icons.h" 47#include "icons.h"
48#include "lang.h"
48 49
49#ifdef HAVE_LCD_BITMAP 50#ifdef HAVE_LCD_BITMAP
50#include "widgets.h" 51#include "widgets.h"
@@ -289,8 +290,8 @@ static int showdir(char *path, int start)
289 lcd_double_height(false); 290 lcd_double_height(false);
290#endif 291#endif
291 lcd_clear_display(); 292 lcd_clear_display();
292 lcd_puts(0,0,"Dir buffer"); 293 lcd_puts(0,0,str(LANG_SHOWDIR_ERROR_BUFFER));
293 lcd_puts(0,1,"is full!"); 294 lcd_puts(0,1,str(LANG_SHOWDIR_ERROR_FULL));
294 lcd_update(); 295 lcd_update();
295 sleep(HZ*2); 296 sleep(HZ*2);
296 lcd_clear_display(); 297 lcd_clear_display();
@@ -420,12 +421,12 @@ bool ask_resume(void)
420 return true; 421 return true;
421 422
422 lcd_clear_display(); 423 lcd_clear_display();
423 lcd_puts(0,0,"Resume?"); 424 lcd_puts(0,0,str(LANG_RESUME_ASK));
424#ifdef HAVE_LCD_CHARCELLS 425#ifdef HAVE_LCD_CHARCELLS
425 lcd_puts(0,1,"(Play/Stop)"); 426 lcd_puts(0,1,str(LANG_RESUME_CONFIRM_PLAYER));
426#else 427#else
427 lcd_puts(0,1,"Play = Yes"); 428 lcd_puts(0,1,str(LANG_RESUME_CONFIRM_RECORDER));
428 lcd_puts(0,2,"Any other = No"); 429 lcd_puts(0,2,str(LANG_RESUME_CANCEL_RECORDER));
429#endif 430#endif
430 lcd_update(); 431 lcd_update();
431 if (button_get(true) == BUTTON_PLAY) 432 if (button_get(true) == BUTTON_PLAY)
diff --git a/apps/wps-display.c b/apps/wps-display.c
index 8d33c723a4..72905e441b 100644
--- a/apps/wps-display.c
+++ b/apps/wps-display.c
@@ -37,7 +37,7 @@
37#include "status.h" 37#include "status.h"
38#include "wps-display.h" 38#include "wps-display.h"
39#include "debug.h" 39#include "debug.h"
40 40#include "lang.h"
41#ifdef HAVE_LCD_BITMAP 41#ifdef HAVE_LCD_BITMAP
42#include "icons.h" 42#include "icons.h"
43#include "widgets.h" 43#include "widgets.h"
@@ -579,11 +579,11 @@ void wps_display(struct mp3entry* id3)
579 if (!id3 && !mpeg_is_playing()) 579 if (!id3 && !mpeg_is_playing())
580 { 580 {
581#ifdef HAVE_LCD_CHARCELLS 581#ifdef HAVE_LCD_CHARCELLS
582 lcd_puts(0, 0, "End of list"); 582 lcd_puts(0, 0, str(LANG_END_PLAYLIST_PLAYER));
583 lcd_puts(0, 1, "<Press ON>"); 583 lcd_puts(0, 1, str(LANG_END_CONFIRM_PLAYER));
584#else 584#else
585 lcd_puts(0, 2, "<End of song list>"); 585 lcd_puts(0, 2, str(LANG_END_PLAYLIST_RECORDER));
586 lcd_puts(5, 4, "Press ON"); 586 lcd_puts(5, 4, str(LANG_END_CONFIRM_RECORDER));
587#endif 587#endif
588 } 588 }
589 else 589 else
diff --git a/apps/wps.c b/apps/wps.c
index c912cdd9b0..8f093f8a0a 100644
--- a/apps/wps.c
+++ b/apps/wps.c
@@ -40,7 +40,7 @@
40#ifdef HAVE_LCD_BITMAP 40#ifdef HAVE_LCD_BITMAP
41#include "icons.h" 41#include "icons.h"
42#endif 42#endif
43 43#include "lang.h"
44#define FF_REWIND_MAX_PERCENT 3 /* cap ff/rewind step size at max % of file */ 44#define FF_REWIND_MAX_PERCENT 3 /* cap ff/rewind step size at max % of file */
45 /* 3% of 30min file == 54s step size */ 45 /* 3% of 30min file == 54s step size */
46 46
@@ -116,17 +116,17 @@ void display_keylock_text(bool locked)
116 116
117#ifdef HAVE_LCD_CHARCELLS 117#ifdef HAVE_LCD_CHARCELLS
118 if(locked) 118 if(locked)
119 lcd_puts(0, 0, "Keylock ON"); 119 lcd_puts(0, 0, str(LANG_KEYLOCK_ON_PLAYER));
120 else 120 else
121 lcd_puts(0, 0, "Keylock OFF"); 121 lcd_puts(0, 0, str(LANG_KEYLOCK_OFF_PLAYER));
122#else 122#else
123 if(locked) 123 if(locked)
124 { 124 {
125 lcd_puts(2, 3, "Key lock is ON"); 125 lcd_puts(2, 3, str(LANG_KEYLOCK_ON_RECORDER));
126 } 126 }
127 else 127 else
128 { 128 {
129 lcd_puts(2, 3, "Key lock is OFF"); 129 lcd_puts(2, 3, str(LANG_KEYLOCK_OFF_RECORDER));
130 } 130 }
131 lcd_update(); 131 lcd_update();
132#endif 132#endif
@@ -141,17 +141,17 @@ void display_mute_text(bool muted)
141 141
142#ifdef HAVE_LCD_CHARCELLS 142#ifdef HAVE_LCD_CHARCELLS
143 if (muted) 143 if (muted)
144 lcd_puts(0, 0, "Mute ON"); 144 lcd_puts(0, 0, str(LANG_MUTE_ON_PLAYER));
145 else 145 else
146 lcd_puts(0, 0, "Mute OFF"); 146 lcd_puts(0, 0, str(LANG_MUTE_OFF_PLAYER));
147#else 147#else
148 if (muted) 148 if (muted)
149 { 149 {
150 lcd_puts(2, 3, "Mute is ON"); 150 lcd_puts(2, 3, str(LANG_MUTE_ON_RECORDER));
151 } 151 }
152 else 152 else
153 { 153 {
154 lcd_puts(2, 3, "Mute is OFF"); 154 lcd_puts(2, 3, str(LANG_MUTE_OFF_RECORDER));
155 } 155 }
156 lcd_update(); 156 lcd_update();
157#endif 157#endif
@@ -185,8 +185,8 @@ static int browse_id3(void)
185 185
186 lcd_stop_scroll(); 186 lcd_stop_scroll();
187 lcd_clear_display(); 187 lcd_clear_display();
188 lcd_puts(0, 0, "-ID3 Info- "); 188 lcd_puts(0, 0, str(LANG_ID3_INFO));
189 lcd_puts(0, 1, "--Screen-- "); 189 lcd_puts(0, 1, str(LANG_ID3_SCREEN));
190 lcd_update(); 190 lcd_update();
191 sleep(HZ); 191 sleep(HZ);
192 192
@@ -198,23 +198,26 @@ static int browse_id3(void)
198 switch (menu_pos) 198 switch (menu_pos)
199 { 199 {
200 case 0: 200 case 0:
201 lcd_puts(0, 0, "[Title]"); 201 lcd_puts(0, 0, str(LANG_ID3_TITLE));
202 lcd_puts_scroll(0, 1, id3->title ? id3->title : "<no title>"); 202 lcd_puts_scroll(0, 1, id3->title ? id3->title :
203 (char*)str(LANG_ID3_NO_TITLE));
203 break; 204 break;
204 205
205 case 1: 206 case 1:
206 lcd_puts(0, 0, "[Artist]"); 207 lcd_puts(0, 0, str(LANG_ID3_ARTIST));
207 lcd_puts_scroll(0, 1, 208 lcd_puts_scroll(0, 1,
208 id3->artist ? id3->artist : "<no artist>"); 209 id3->artist ? id3->artist :
210 (char*)str(LANG_ID3_NO_ARTIST));
209 break; 211 break;
210 212
211 case 2: 213 case 2:
212 lcd_puts(0, 0, "[Album]"); 214 lcd_puts(0, 0, str(LANG_ID3_ALBUM));
213 lcd_puts_scroll(0, 1, id3->album ? id3->album : "<no album>"); 215 lcd_puts_scroll(0, 1, id3->album ? id3->album :
216 (char*)str(LANG_ID3_NO_ALBUM));
214 break; 217 break;
215 218
216 case 3: 219 case 3:
217 lcd_puts(0, 0, "[Tracknum]"); 220 lcd_puts(0, 0, str(LANG_ID3_TRACKNUM));
218 221
219 if (id3->tracknum) 222 if (id3->tracknum)
220 { 223 {
@@ -224,12 +227,12 @@ static int browse_id3(void)
224 } 227 }
225 else 228 else
226 { 229 {
227 lcd_puts_scroll(0, 1, "<no tracknum>"); 230 lcd_puts_scroll(0, 1, str(LANG_ID3_NO_TRACKNUM));
228 } 231 }
229 break; 232 break;
230 233
231 case 4: 234 case 4:
232 lcd_puts(0, 0, "[Length]"); 235 lcd_puts(0, 0, str(LANG_ID3_LENGHT));
233 snprintf(scroll_text,sizeof(scroll_text), "%d:%02d", 236 snprintf(scroll_text,sizeof(scroll_text), "%d:%02d",
234 id3->length / 60000, 237 id3->length / 60000,
235 id3->length % 60000 / 1000 ); 238 id3->length % 60000 / 1000 );
@@ -237,7 +240,7 @@ static int browse_id3(void)
237 break; 240 break;
238 241
239 case 5: 242 case 5:
240 lcd_puts(0, 0, "[Playlist]"); 243 lcd_puts(0, 0, str(LANG_ID3_PLAYLIST));
241 snprintf(scroll_text,sizeof(scroll_text), "%d/%d", 244 snprintf(scroll_text,sizeof(scroll_text), "%d/%d",
242 id3->index + 1, playlist.amount); 245 id3->index + 1, playlist.amount);
243 lcd_puts_scroll(0, 1, scroll_text); 246 lcd_puts_scroll(0, 1, scroll_text);
@@ -245,21 +248,21 @@ static int browse_id3(void)
245 248
246 249
247 case 6: 250 case 6:
248 lcd_puts(0, 0, "[Bitrate]"); 251 lcd_puts(0, 0, str(LANG_ID3_BITRATE));
249 snprintf(scroll_text,sizeof(scroll_text), "%d kbps", 252 snprintf(scroll_text,sizeof(scroll_text), "%d kbps",
250 id3->bitrate); 253 id3->bitrate);
251 lcd_puts(0, 1, scroll_text); 254 lcd_puts(0, 1, scroll_text);
252 break; 255 break;
253 256
254 case 7: 257 case 7:
255 lcd_puts(0, 0, "[Frequency]"); 258 lcd_puts(0, 0, str(LANG_ID3_FRECUENCY));
256 snprintf(scroll_text,sizeof(scroll_text), "%d Hz", 259 snprintf(scroll_text,sizeof(scroll_text), "%d Hz",
257 id3->frequency); 260 id3->frequency);
258 lcd_puts(0, 1, scroll_text); 261 lcd_puts(0, 1, scroll_text);
259 break; 262 break;
260 263
261 case 8: 264 case 8:
262 lcd_puts(0, 0, "[Path]"); 265 lcd_puts(0, 0, str(LANG_ID3_PATH));
263 lcd_puts_scroll(0, 1, id3->path); 266 lcd_puts_scroll(0, 1, id3->path);
264 break; 267 break;
265 } 268 }
@@ -644,7 +647,7 @@ int on_screen(void)
644 lcd_scroll_pause(); 647 lcd_scroll_pause();
645 lcd_clear_display(); 648 lcd_clear_display();
646 649
647 ptr = "Pitch up"; 650 ptr = str(LANG_PITCH_UP);
648 lcd_getstringsize(ptr,FONT_UI,&w,&h); 651 lcd_getstringsize(ptr,FONT_UI,&w,&h);
649 lcd_putsxy((LCD_WIDTH-w)/2, 0, ptr, FONT_UI); 652 lcd_putsxy((LCD_WIDTH-w)/2, 0, ptr, FONT_UI);
650 lcd_bitmap(bitmap_icons_7x8[Icon_UpArrow], 653 lcd_bitmap(bitmap_icons_7x8[Icon_UpArrow],
@@ -654,13 +657,13 @@ int on_screen(void)
654 lcd_getstringsize(buf,FONT_UI,&w,&h); 657 lcd_getstringsize(buf,FONT_UI,&w,&h);
655 lcd_putsxy((LCD_WIDTH-w)/2, h, buf, FONT_UI); 658 lcd_putsxy((LCD_WIDTH-w)/2, h, buf, FONT_UI);
656 659
657 ptr = "Pitch down"; 660 ptr = str(LANG_PITCH_DOWN);
658 lcd_getstringsize(ptr,FONT_UI,&w,&h); 661 lcd_getstringsize(ptr,FONT_UI,&w,&h);
659 lcd_putsxy((LCD_WIDTH-w)/2, LCD_HEIGHT - h, ptr, FONT_UI); 662 lcd_putsxy((LCD_WIDTH-w)/2, LCD_HEIGHT - h, ptr, FONT_UI);
660 lcd_bitmap(bitmap_icons_7x8[Icon_DownArrow], 663 lcd_bitmap(bitmap_icons_7x8[Icon_DownArrow],
661 LCD_WIDTH/2 - 3, LCD_HEIGHT - h*3, 7, 8, true); 664 LCD_WIDTH/2 - 3, LCD_HEIGHT - h*3, 7, 8, true);
662 665
663 ptr = "Pause"; 666 ptr = str(LANG_PAUSE);
664 lcd_getstringsize(ptr,FONT_UI,&w,&h); 667 lcd_getstringsize(ptr,FONT_UI,&w,&h);
665 lcd_putsxy((LCD_WIDTH-(w/2))/2, LCD_HEIGHT/2 - h/2, ptr, FONT_UI); 668 lcd_putsxy((LCD_WIDTH-(w/2))/2, LCD_HEIGHT/2 - h/2, ptr, FONT_UI);
666 lcd_bitmap(bitmap_icons_7x8[Icon_Pause], 669 lcd_bitmap(bitmap_icons_7x8[Icon_Pause],
@@ -753,15 +756,15 @@ bool f2_screen(void)
753 while (!exit) { 756 while (!exit) {
754 lcd_clear_display(); 757 lcd_clear_display();
755 758
756 lcd_putsxy(0, LCD_HEIGHT/2 - h*2, "Shuffle", FONT_UI); 759 lcd_putsxy(0, LCD_HEIGHT/2 - h*2, str(LANG_SHUFFLE), FONT_UI);
757 lcd_putsxy(0, LCD_HEIGHT/2 - h, "mode:", FONT_UI); 760 lcd_putsxy(0, LCD_HEIGHT/2 - h, str(LANG_F2_MODE), FONT_UI);
758 lcd_putsxy(0, LCD_HEIGHT/2, 761 lcd_putsxy(0, LCD_HEIGHT/2,
759 global_settings.playlist_shuffle ? "on" : "off", FONT_UI); 762 global_settings.playlist_shuffle ? str(LANG_ON) : str(LANG_OFF), FONT_UI);
760 lcd_bitmap(bitmap_icons_7x8[Icon_FastBackward], 763 lcd_bitmap(bitmap_icons_7x8[Icon_FastBackward],
761 LCD_WIDTH/2 - 16, LCD_HEIGHT/2 - 4, 7, 8, true); 764 LCD_WIDTH/2 - 16, LCD_HEIGHT/2 - 4, 7, 8, true);
762 765
763 snprintf(buf, sizeof buf, "Dir filter: %s", 766 snprintf(buf, sizeof buf, str(LANG_DIR_FILTER),
764 global_settings.mp3filter ? "on" : "off"); 767 global_settings.mp3filter ? str(LANG_ON) : str(LANG_OFF));
765 768
766 /* Get the string width and height */ 769 /* Get the string width and height */
767 lcd_getstringsize(buf,FONT_UI,&w,&h); 770 lcd_getstringsize(buf,FONT_UI,&w,&h);
@@ -819,21 +822,21 @@ bool f3_screen(void)
819 int w,h; 822 int w,h;
820 char* ptr; 823 char* ptr;
821 824
822 ptr = "Status"; 825 ptr = str(LANG_F3_STATUS);
823 lcd_getstringsize(ptr,FONT_UI,&w,&h); 826 lcd_getstringsize(ptr,FONT_UI,&w,&h);
824 lcd_clear_display(); 827 lcd_clear_display();
825 828
826 lcd_putsxy(0, LCD_HEIGHT/2 - h*2, "Scroll", FONT_UI); 829 lcd_putsxy(0, LCD_HEIGHT/2 - h*2, str(LANG_F3_SCROLL), FONT_UI);
827 lcd_putsxy(0, LCD_HEIGHT/2 - h, "bar:", FONT_UI); 830 lcd_putsxy(0, LCD_HEIGHT/2 - h, str(LANG_F3_BAR), FONT_UI);
828 lcd_putsxy(0, LCD_HEIGHT/2, 831 lcd_putsxy(0, LCD_HEIGHT/2,
829 global_settings.scrollbar ? "on" : "off", FONT_UI); 832 global_settings.scrollbar ? str(LANG_ON) : str(LANG_OFF), FONT_UI);
830 lcd_bitmap(bitmap_icons_7x8[Icon_FastBackward], 833 lcd_bitmap(bitmap_icons_7x8[Icon_FastBackward],
831 LCD_WIDTH/2 - 16, LCD_HEIGHT/2 - 4, 7, 8, true); 834 LCD_WIDTH/2 - 16, LCD_HEIGHT/2 - 4, 7, 8, true);
832 835
833 lcd_putsxy(LCD_WIDTH - w, LCD_HEIGHT/2 - h*2, ptr, FONT_UI); 836 lcd_putsxy(LCD_WIDTH - w, LCD_HEIGHT/2 - h*2, ptr, FONT_UI);
834 lcd_putsxy(LCD_WIDTH - w, LCD_HEIGHT/2 - h, "bar:", FONT_UI); 837 lcd_putsxy(LCD_WIDTH - w, LCD_HEIGHT/2 - h, str(LANG_F3_BAR), FONT_UI);
835 lcd_putsxy(LCD_WIDTH - w, LCD_HEIGHT/2, 838 lcd_putsxy(LCD_WIDTH - w, LCD_HEIGHT/2,
836 global_settings.statusbar ? "on" : "off", FONT_UI); 839 global_settings.statusbar ? str(LANG_ON) : str(LANG_OFF), FONT_UI);
837 lcd_bitmap(bitmap_icons_7x8[Icon_FastForward], 840 lcd_bitmap(bitmap_icons_7x8[Icon_FastForward],
838 LCD_WIDTH/2 + 8, LCD_HEIGHT/2 - 4, 7, 8, true); 841 LCD_WIDTH/2 + 8, LCD_HEIGHT/2 - 4, 7, 8, true);
839 lcd_update(); 842 lcd_update();