moved qdb here because matt is lazy
[public/www-new.git] / pub / qdb / src / modules / Chirpy / Locale.pm
1 ###############################################################################\r
2 # Chirpy! 0.3, a quote management system                                      #\r
3 # Copyright (C) 2005-2007 Tim De Pauw <ceetee@users.sourceforge.net>          #\r
4 ###############################################################################\r
5 # This program is free software; you can redistribute it and/or modify it     #\r
6 # under the terms of the GNU General Public License as published by the Free  #\r
7 # Software Foundation; either version 2 of the License, or (at your option)   #\r
8 # any later version.                                                          #\r
9 #                                                                             #\r
10 # This program is distributed in the hope that it will be useful, but WITHOUT #\r
11 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or       #\r
12 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for   #\r
13 # more details.                                                               #\r
14 #                                                                             #\r
15 # You should have received a copy of the GNU General Public License along     #\r
16 # with this program; if not, write to the Free Software Foundation, Inc., 51  #\r
17 # Franklin St, Fifth Floor, Boston, MA  02110-1301  USA                       #\r
18 ###############################################################################\r
19 \r
20 ###############################################################################\r
21 # $Id:: Locale.pm 291 2007-02-05 21:24:46Z ceetee                           $ #\r
22 ###############################################################################\r
23 \r
24 =head1 NAME\r
25 \r
26 Chirpy::Locale - Represents a locale\r
27 \r
28 =head1 SYNOPSIS\r
29 \r
30  $locale = new Chirpy::Locale('/path/to/locale.ini');\r
31 \r
32  $value = $locale->get_string($name);\r
33  $value = $locale->get_string($name, @params);\r
34 \r
35  $target_version = $locale->get_target_version();\r
36  $full_name = $locale->get_full_name();\r
37  $version = $locale->get_version();\r
38  $author_hash_ref = $locale->get_author_information();\r
39 \r
40 =head1 CREATING LOCALES\r
41 \r
42 Locales are INI files with two sections, one with information about the locale\r
43 and one with the localized strings. It is recommended that you use the language\r
44 code as the filename, e.g. F<it.ini> for I<Italian> or F<fr-CA.ini> for\r
45 I<French/Canada>.\r
46 \r
47 =head2 Information Section\r
48 \r
49 Information about the locale is stored in the INI file's C<properties> section.\r
50 Locales use the following values for storing information about the locale:\r
51 \r
52 =over 4\r
53 \r
54 =item chirpy_version\r
55 \r
56 The version of Chirpy! that the locale was made for.\r
57 \r
58 =item full_name\r
59 \r
60 The full name of the locale. Usually, this is the name of the locale language.\r
61 \r
62 =item version\r
63 \r
64 The version number of the locale. You can use any version number scheme you\r
65 like, but make sure people can distinguish between versions easily.\r
66 \r
67 =item author_name\r
68 \r
69 Your full name.\r
70 \r
71 =item author_email\r
72 \r
73 The e-mail address where people can contact you.\r
74 \r
75 =item author_uri\r
76 \r
77 The URL to your homepage, if any.\r
78 \r
79 =back\r
80 \r
81 =head2 Strings Section\r
82 \r
83 The localized strings are stored in the INI file's C<strings> section. Mocales\r
84 must define the strings listed below. For examples, please consult\r
85 F<en-US.ini>, the I<U.S. English> locale, bundled with Chirpy! by default.\r
86 \r
87 Note that locales may contain extra strings which are specific to a user\r
88 interface class. These must be prepended by the name of the class and a dot.\r
89 The default L<Chirpy::UI::WebApp|Chirpy::UI::WebApp> class requires a few\r
90 strings already, which are listed under\r
91 L<Locale Strings|Chirpy::UI::WebApp/LOCALE STRINGS> in its documentation.\r
92 \r
93 =over 4\r
94 \r
95 =item error_title\r
96 \r
97 Title used for errors.\r
98 \r
99 =item quote_browser\r
100 \r
101 Translation of I<Quote Browser>, for the title of that section or links to it.\r
102 \r
103 =item random_quotes\r
104 \r
105 Translation of I<Random Quotes>, for the title of that section or links to it.\r
106 \r
107 =item view_quote\r
108 \r
109 Translation of I<View Quote>, for the title of that section or links to it.\r
110 \r
111 =item top_quotes\r
112 \r
113 Translation of I<Top Quotes>, for the title of that section or links to it.\r
114 \r
115 =item bottom_quotes\r
116 \r
117 Translation of I<Bottom Quotes>, for the title of that section or links to it.\r
118 \r
119 =item quotes_of_the_week\r
120 \r
121 Translation of I<Quotes of the Week>, for the title of that section or links to\r
122 it.\r
123 \r
124 =item search_for_quotes\r
125 \r
126 Translation of I<Search for Quotes>, for the title of that section or links to\r
127 it.\r
128 \r
129 =item tag_cloud\r
130 \r
131 Translation of I<Tag Cloud>, for the title of that section or links to it.\r
132 \r
133 =item statistics\r
134 \r
135 Translation of I<Statistics>, for the title of that section or links to it.\r
136 \r
137 =item administration\r
138 \r
139 Translation of I<Administration>, for the title of that section or links to it.\r
140 \r
141 =item edit_quote\r
142 \r
143 Translation of I<Edit Quote>, for the title of that section or links to it.\r
144 \r
145 =item remove_quote\r
146 \r
147 Translation of I<Remove Quote>, for the title of that section or links to it.\r
148 \r
149 =item welcome\r
150 \r
151 Generic translation of the string I<Welcome>.\r
152 \r
153 =item latest_news\r
154 \r
155 Translation of I<Latest News>, for the title of the list of recent news items.\r
156 \r
157 =item unknown_action\r
158 \r
159 Text describing that the action the user requested is unknown, for error\r
160 messages.\r
161 \r
162 =item no_quotes\r
163 \r
164 Text describing that there aren't any quotes to display.\r
165 \r
166 =item quote_browser_description\r
167 \r
168 Brief description of what the quote browser does, for tooltips and such.\r
169 \r
170 =item quote_browser_short_title\r
171 \r
172 Abbreviated version of I<Quote Browser>, for use in compact menus.\r
173 \r
174 =item random_quotes_description\r
175 \r
176 Brief description of what the list of random quotes does, for tooltips and\r
177 such.\r
178 \r
179 =item random_quotes_short_title\r
180 \r
181 Abbreviated version of I<Random Quotes>, for use in compact menus.\r
182 \r
183 =item top_quotes_description\r
184 \r
185 Brief description of what the list of top quotes does, for tooltips and such.\r
186 \r
187 =item top_quotes_short_title\r
188 \r
189 Abbreviated version of I<Top Quotes>, for use in compact menus.\r
190 \r
191 =item bottom_quotes_description\r
192 \r
193 Brief description of what the list of bottom quotes does, for tooltips and\r
194 such.\r
195 \r
196 =item bottom_quotes_short_title\r
197 \r
198 Abbreviated version of I<Bottom Quotes>, for use in compact menus.\r
199 \r
200 =item quotes_of_the_week_description\r
201 \r
202 Brief description of what the list of quotes of the week does, for tooltips and\r
203 such.\r
204 \r
205 =item quotes_of_the_week_short_title\r
206 \r
207 Abbreviated version of I<Quotes of the Week>, for use in compact menus.\r
208 \r
209 =item quote_search_description\r
210 \r
211 Brief description of what the quote search does, for tooltips and such.\r
212 \r
213 =item quote_search_short_title\r
214 \r
215 Abbreviated version of I<Quote Search>, for use in compact menus.\r
216 \r
217 =item tag_cloud_description\r
218 \r
219 Brief description of what the tag cloud is, for tooltips and such.\r
220 \r
221 =item tag_cloud_short_title\r
222 \r
223 Abbreviated version of I<Tag Cloud>, for use in compact menus.\r
224 \r
225 =item statistics_description\r
226 \r
227 Brief description of what the statistics do, for tooltips and such.\r
228 \r
229 =item submit_quote_description\r
230 \r
231 Brief description of what the quote submission interface does, for tooltips\r
232 and such.\r
233 \r
234 =item submit_quote_short_title\r
235 \r
236 Abbreviated version of I<Submit Quote>, for use in compact menus.\r
237 \r
238 =item moderation_queue_description\r
239 \r
240 Brief description of the quote moderation queue, for tooltips and such.\r
241 \r
242 =item moderation_queue_short_title\r
243 \r
244 Abbreviated version of I<Quote Moderation Queue>, for use in compact menus.\r
245 \r
246 =item administration_description\r
247 \r
248 Brief description of what the administration interface does, for tooltips and\r
249 such.\r
250 \r
251 =item administration_short_title\r
252 \r
253 Abbreviated version of I<Administration>, for use in compact menus.\r
254 \r
255 =item login_description\r
256 \r
257 Brief description of what the login interface does, for tooltips and such.\r
258 \r
259 =item login_short_title\r
260 \r
261 Abbreviated version of I<Log In>, for use in compact menus.\r
262 \r
263 =item logout_description\r
264 \r
265 Brief description of what the logout interface does, for tooltips and such.\r
266 \r
267 =item logout_short_title\r
268 \r
269 Abbreviated version of I<Log Out>, for use in compact menus.\r
270 \r
271 =item quote_title\r
272 \r
273 Generic title of a quote, i.e. something along the lines of the word "Quote"\r
274 followed by the quote's ID. Use C<%1%> to represent the ID.\r
275 \r
276 =item quote_report_description\r
277 \r
278 Brief description of what reporting quotes is, for tooltips and such.\r
279 \r
280 =item quote_rating_up_description\r
281 \r
282 Brief description of what increasing a quote's rating is, for tooltips and\r
283 such.\r
284 \r
285 =item quote_rating_down_description\r
286 \r
287 Brief description of what decreasing a quote's rating is, for tooltips and\r
288 such.\r
289 \r
290 =item quote_report_confirmation_request\r
291 \r
292 Text requesting that the user confirm that he wishes to report the quote that\r
293 follows.\r
294 \r
295 =item quote_rating_up_confirmation_request\r
296 \r
297 Text requesting that the user confirm that he wishes to increase the rating\r
298 of the quote that follows.\r
299 \r
300 =item quote_rating_down_confirmation_request\r
301 \r
302 Text requesting that the user confirm that he wishes to decrease the rating\r
303 of the quote that follows.\r
304 \r
305 =item quote_rating_description\r
306 \r
307 Brief description of what the quote's rating is, for tooltips and such.\r
308 \r
309 =item quote_vote_count_description\r
310 \r
311 Brief description of what the quote's vote count is, for tooltips and such.\r
312 \r
313 =item quote_date_description\r
314 \r
315 Brief description of what the date when the quote was submitted is, for\r
316 tooltips and such.\r
317 \r
318 =item quote_edit_description\r
319 \r
320 Brief description of what editing the quote does, for tooltips and such.\r
321 \r
322 =item quote_remove_description\r
323 \r
324 Brief description of what removing the quote does, for tooltips and such.\r
325 \r
326 =item quote_notes_title\r
327 \r
328 Title of the notes section in the quote list, followed by a colon.\r
329 \r
330 =item quote_tags_title\r
331 \r
332 Title of the tags section in the quote list, followed by a colon.\r
333 \r
334 =item no_tagged_quotes\r
335 \r
336 Message displayed instead of the tag cloud when no quotes have been tagged.\r
337 \r
338 =item statistics_unavailable\r
339 \r
340 Generic message, displayed when statistics are unavailable. Usually, this means\r
341 there are no quotes in the database, but this may change.\r
342 \r
343 =item statistics_short_title\r
344 \r
345 Abbreviated version of I<Statistics>, for use in compact menus.\r
346 \r
347 =item quote_count_by_date\r
348 \r
349 Title of the I<Number of Quotes by Date> section in the statistics.\r
350 \r
351 =item quote_count_by_hour\r
352 \r
353 Title of the I<Number of Quotes by Hour> section in the statistics.\r
354 \r
355 =item quote_count_by_month\r
356 \r
357 Title of the I<Number of Quotes by Month> section in the statistics.\r
358 \r
359 =item quote_count_by_day\r
360 \r
361 Title of the I<Number of Quotes by Day of the Month> section in the statistics.\r
362 \r
363 =item quote_count_by_weekday\r
364 \r
365 Title of the I<Number of Quotes by Weekday> section in the statistics.\r
366 \r
367 =item quote_count_by_rating\r
368 \r
369 Title of the I<Number of Quotes by Rating> section in the statistics.\r
370 \r
371 =item quote_count_by_vote_count\r
372 \r
373 Title of the I<Number of Quotes by Number of Votes> section in the statistics.\r
374 \r
375 =item vote_count_by_rating\r
376 \r
377 Title of the I<Number of Votes per Rating> section in the statistics.\r
378 \r
379 =item tag_link_description\r
380 \r
381 Description text for the link to the list of quotes with the current tag.\r
382 C<%1%> is replaced with the tag.\r
383 \r
384 =item search_query_title\r
385 \r
386 Title of the query field on the search interface, followed by a colon.\r
387 \r
388 =item search_button_label\r
389 \r
390 Label text for the button that initiates searches.\r
391 \r
392 =item search_results\r
393 \r
394 Translation of I<Search Results>, for the title of that section or links to it.\r
395 \r
396 =item submit_quote\r
397 \r
398 Translation of I<Submit Quote>, for the title of that section or links to it.\r
399 \r
400 =item unmoderated_quotes\r
401 \r
402 Translation of I<Unmoderated Quotes>, for the title of that section or links to\r
403 it.\r
404 \r
405 =item submission_title\r
406 \r
407 Directions telling the user to enter his quote in the input field that follows\r
408 the text.\r
409 \r
410 =item notes_title\r
411 \r
412 Directions telling the user to optionally enter notes about the quote in the\r
413 input field that follows the text.\r
414 \r
415 =item submit_button_label\r
416 \r
417 Label text for the button that submits the newly entered quote.\r
418 \r
419 =item submit_button_label_no_approval\r
420 \r
421 Label text for the button that submits the newly entered quote, suggesting that\r
422 the quote will be immediately added without approval, since the user has that\r
423 privilege.\r
424 \r
425 =item quote_submitted\r
426 \r
427 Title for the interface stating that the quote has been submitted.\r
428 \r
429 =item quote_submitted_no_approval\r
430 \r
431 Title for the interface stating that the quote has been submitted and approval\r
432 is not necessary. Something like I<Quote Added> is appropriate.\r
433 \r
434 =item quote_submission_thanks\r
435 \r
436 Message thanking the user for the submitted quote and explaining that it will\r
437 now be reviewed before it is added.\r
438 \r
439 =item quote_submission_thanks_no_approval\r
440 \r
441 Message thanking the user for the submitted quote and explaining that it has\r
442 been added without the need for approval.\r
443 \r
444 =item approve_quotes\r
445 \r
446 Translation of I<Approve Quotes>, for titles and labels in the administrative\r
447 interface.\r
448 \r
449 =item flagged_quotes\r
450 \r
451 Translation of I<Flagged Quotes>, for titles and labels in the administrative\r
452 interface.\r
453 \r
454 =item manage_news\r
455 \r
456 Translation of I<Manage News>, for titles and labels in the administrative\r
457 interface.\r
458 \r
459 =item manage_quotes\r
460 \r
461 Translation of I<Manage Quotes>, for titles and labels in the administrative\r
462 interface.\r
463 \r
464 =item add_news\r
465 \r
466 Translation of I<Add News>, for titles and labels in the administrative\r
467 interface.\r
468 \r
469 =item edit_news\r
470 \r
471 Translation of I<Edit News>, for titles and labels in the administrative\r
472 interface.\r
473 \r
474 =item remove_news\r
475 \r
476 Translation of I<Remove News>, for titles and labels in the administrative\r
477 interface.\r
478 \r
479 =item manage_accounts\r
480 \r
481 Translation of I<Manage Accounts>, for titles and labels in the administrative\r
482 interface.\r
483 \r
484 =item manage_accounts\r
485 \r
486 Translation of I<Event Log>, for titles and labels in the administrative\r
487 interface.\r
488 \r
489 =item no_unapproved_quotes\r
490 \r
491 Message describing that there are currently no quotes waiting for approval.\r
492 \r
493 =item no_flagged_quotes\r
494 \r
495 Message describing that there are currently no quotes that are flagged.\r
496 \r
497 =item quote_rating_up_short_title\r
498 \r
499 Short label text for the link that increases the quote's rating, e.g. I<Up>.\r
500 \r
501 =item quote_rating_down_short_title\r
502 \r
503 Short label text for the link that decreases the quote's rating, e.g. I<Down>.\r
504 \r
505 =item report_quote_short_title\r
506 \r
507 Short label text for the link that reports the quote, e.g. I<Report>.\r
508 \r
509 =item edit\r
510 \r
511 Generic translation of I<Edit>, which can be used for links to edit quotes,\r
512 news items, etc.\r
513 \r
514 =item remove\r
515 \r
516 Generic translation of I<Remove>, which can be used for links to remove quotes,\r
517 news items, etc.\r
518 \r
519 =item unflag\r
520 \r
521 Text for the link that removes the report for the quote.\r
522 \r
523 =item flagged\r
524 \r
525 Text that indicates that the quote has been reported in the past.\r
526 \r
527 =item quote_removal_confirmation\r
528 \r
529 Question that asks the user if he is sure that he would like to remove the\r
530 quote.\r
531 \r
532 =item news_removal_confirmation\r
533 \r
534 Question that asks the user if he is sure that he would like to remove the news\r
535 item.\r
536 \r
537 =item quote_rating_increased\r
538 \r
539 Title for the interface stating that the quote's rating has been increased.\r
540 \r
541 =item quote_rating_decreased\r
542 \r
543 Title for the interface stating that the quote's rating has been decreased.\r
544 \r
545 =item quote_rating_thanks\r
546 \r
547 Message confirming that the user's vote has been processed, used for both\r
548 positive and negative votes.\r
549 \r
550 =item quote_reported\r
551 \r
552 Title for the interface stating that the quote has been reported.\r
553 \r
554 =item quote_report_thanks\r
555 \r
556 Message confirming that the quote has been reported.\r
557 \r
558 =item quote_already_rated\r
559 \r
560 Error message stating that the user can only rate the same quote once per\r
561 session and that he has already rated the selected quote.\r
562 \r
563 =item quote_rating_limit_exceeded\r
564 \r
565 Error message stating that the user has exceeded the maximum number of votes\r
566 allowed. C<%1%> is replaced with the maximum number of votes, C<%2%> with the\r
567 number of seconds in the time frame for that maximum.\r
568 \r
569 =item login_title\r
570 \r
571 Title of the login interface.\r
572 \r
573 =item invalid_login_title\r
574 \r
575 Title of the interface stating that logging in has failed.\r
576 \r
577 =item username_title\r
578 \r
579 Title of the field where the user inputs his username, followed by a colon.\r
580 \r
581 =item password_title\r
582 \r
583 Title of the field where the user inputs his password, followed by a colon.\r
584 \r
585 =item login_button_label\r
586 \r
587 Label of the button that submits the login information the user has entered.\r
588 \r
589 =item invalid_login_instructions\r
590 \r
591 Error message stating that the credentials the user has entered are incorrect,\r
592 with the additional information that the password is case-sensitive, while the\r
593 username is not.\r
594 \r
595 =item logged_in_as\r
596 \r
597 Message stating that the user is logged in. C<%1%> is replaced with the user's\r
598 username, C<%2%> with his user level.\r
599 \r
600 =item change_password\r
601 \r
602 Translation of I<Change Password>, for titles and labels in the administrative\r
603 interface.\r
604 \r
605 =item none\r
606 \r
607 Generic translation of the string I<None>.\r
608 \r
609 =item error\r
610 \r
611 Generic translation of the string I<Error>.\r
612 \r
613 =item processing\r
614 \r
615 Generic translation of the string I<Processing>, used for operations that may\r
616 take a while.\r
617 \r
618 =item timed_out\r
619 \r
620 Generic translation of the string I<Timed Out>, used for operations that have\r
621 failed to complete.\r
622 \r
623 =item no_search_results\r
624 \r
625 Title of the interface stating that there are no search results.\r
626 \r
627 =item no_search_results_text\r
628 \r
629 Message explaining that none of the quotes match the search query.\r
630 \r
631 =item quote_not_found\r
632 \r
633 Title of the interface stating that the requested quote was not found.\r
634 \r
635 =item quote_not_found_text\r
636 \r
637 Message explaining that the quote ID the user has provided does not exist.\r
638 \r
639 =item rated_quote_not_found_text\r
640 \r
641 Message explaining that the quote the user is trying to rate does not exist.\r
642 \r
643 =item reported_quote_not_found_text\r
644 \r
645 Message explaining that the quote the user is trying to report does not exist.\r
646 \r
647 =item user_level_3\r
648 \r
649 Title of the user level with numeric ID 3.\r
650 \r
651 =item user_level_6\r
652 \r
653 Title of the user level with numeric ID 6.\r
654 \r
655 =item user_level_9\r
656 \r
657 Title of the user level with numeric ID 9.\r
658 \r
659 =item password_changed\r
660 \r
661 Title of the interface stating that the user's password has been changed.\r
662 \r
663 =item password_changed_text\r
664 \r
665 Message stating that the user's password has been changed, reminding him to\r
666 keep it in a safe place.\r
667 \r
668 =item current_password_title\r
669 \r
670 Title of the field where the user inputs his current password, followed by a\r
671 colon.\r
672 \r
673 =item new_password_title\r
674 \r
675 Title of the field where the user inputs his new password, followed by a colon.\r
676 \r
677 =item repeat_new_password_title\r
678 \r
679 Title of the field where the user inputs his new password again for\r
680 verification, followed by a colon.\r
681 \r
682 =item change_password_button_label\r
683 \r
684 Label of the button that submits the user's new password.\r
685 \r
686 =item change_password_current_password_invalid_text\r
687 \r
688 Error message stating that the user failed to enter his current password.\r
689 \r
690 =item change_password_new_password_invalid_text\r
691 \r
692 Error message stating that the new password the user has entered is invalid.\r
693 \r
694 =item change_password_passwords_differ_text\r
695 \r
696 Error message stating that the new password the user has entered does not match\r
697 the verification entry.\r
698 \r
699 =item do_nothing\r
700 \r
701 Generic translation of the string I<Do Nothing>, useful for the quote approval\r
702 and report review interfaces.\r
703 \r
704 =item approve_unapproved_quote\r
705 \r
706 Text for the option that approves the new quote in the approval interface.\r
707 \r
708 =item discard_unapproved_quote\r
709 \r
710 Text for the option that removes the new quote in the approval interface.\r
711 \r
712 =item update_database\r
713 \r
714 Generic translation of the string I<Update Database>, useful for the quote\r
715 approval and report review interfaces.\r
716 \r
717 =item reset_form\r
718 \r
719 Generic translation of the string I<Reset Form>, useful for various form-based\r
720 interfaces.\r
721 \r
722 =item keep_flagged_quote\r
723 \r
724 Text for the option that keeps the flagged quote in the report review\r
725 interface.\r
726 \r
727 =item remove_flagged_quote\r
728 \r
729 Text for the option that removes the flagged quote in the report review\r
730 interface.\r
731 \r
732 =item quote_removed\r
733 \r
734 Text confirming that the selected quote has been removed.\r
735 \r
736 =item quote_to_edit_not_found\r
737 \r
738 Error message stating that the quote the user tried to edit could not be found.\r
739 \r
740 =item quote_to_remove_not_found\r
741 \r
742 Error message stating that the quote the user tried to remove could not be\r
743 found.\r
744 \r
745 =item quote_modified\r
746 \r
747 Message confirming that the user's modifications to the quote have been saved.\r
748 \r
749 =item quote_id_title\r
750 \r
751 Title text for a quote ID input field, followed by a colon.\r
752 \r
753 =item save_quote\r
754 \r
755 Label text for the button that saves modifications to the quote.\r
756 \r
757 =item go\r
758 \r
759 Generic translation of the string I<Go>.\r
760 \r
761 =item news_item_added\r
762 \r
763 Message confirming that the submitted news item has been added.\r
764 \r
765 =item news_item_modified\r
766 \r
767 Message confirming that the modifications to the news item have been saved.\r
768 \r
769 =item news_item_to_edit_not_found\r
770 \r
771 Error message stating that the news item the user tried to edit was not found.\r
772 \r
773 =item news_item_removed\r
774 \r
775 Message confirming that the news item has been removed.\r
776 \r
777 =item news_item_to_remove_not_found\r
778 \r
779 Error message stating that the news item the user tried to remove was not\r
780 found.\r
781 \r
782 =item new_news_item_title\r
783 \r
784 Title text for the new news item input field, followed by a colon.\r
785 \r
786 =item add_news_item\r
787 \r
788 Label text for the button that adds the newly entered news item.\r
789 \r
790 =item news_poster_title\r
791 \r
792 Title text for the poster selection field upon modification of a news item,\r
793 followed by a colon.\r
794 \r
795 =item save_news_item\r
796 \r
797 Label text for the button that saves modifications to a news item.\r
798 \r
799 =item account_to_modify_not_found\r
800 \r
801 Error message stating that the account the user tried to modify could not be\r
802 found.\r
803 \r
804 =item account_to_remove_not_found\r
805 \r
806 Error message stating that the account the user tried to remove could not be\r
807 found.\r
808 \r
809 =item last_owner_account_removal_error\r
810 \r
811 Error message stating that there must be at least one account with the maximum\r
812 user level, and therefore, the selected account cannot be removed.\r
813 \r
814 =item modified_account_information_required\r
815 \r
816 Error message stating that the user failed to enter any updated account\r
817 information for the selected account.\r
818 \r
819 =item invalid_username\r
820 \r
821 Error message stating the username the user has entered is invalid.\r
822 \r
823 =item username_exists\r
824 \r
825 Error message stating the username the user has entered already exists.\r
826 \r
827 =item invalid_password\r
828 \r
829 Error message stating the password the user has entered is invalid.\r
830 \r
831 =item different_passwords\r
832 \r
833 Error message stating the password and confirmation the user has entered are\r
834 not equal.\r
835 \r
836 =item invalid_user_level\r
837 \r
838 Error message stating the user level the user has selected is invalid.\r
839 \r
840 =item account_removed\r
841 \r
842 Message confirming that the account has been removed.\r
843 \r
844 =item account_modified\r
845 \r
846 Message confirming that the account has been modified.\r
847 \r
848 =item account_created\r
849 \r
850 Message confirming that the account has been created.\r
851 \r
852 =item new_account\r
853 \r
854 Generic translation of the string I<New Account>.\r
855 \r
856 =item new_username_title\r
857 \r
858 Title for the field where the user enters the username for the account he is\r
859 adding, followed by a colon.\r
860 \r
861 =item new_password_title\r
862 \r
863 Title for the field where the user enters the password for the account he is\r
864 adding, followed by a colon.\r
865 \r
866 =item repeat_new_password_title\r
867 \r
868 Title for the field where the user enters the password for the account he is\r
869 adding again for confirmation, followed by a colon.\r
870 \r
871 =item new_user_level_title\r
872 \r
873 Title for the field where the user selects the user level for the account he is\r
874 adding, followed by a colon.\r
875 \r
876 =item update_accounts\r
877 \r
878 Label for the button that processes changes to the account overview.\r
879 \r
880 =item remove_account\r
881 \r
882 Label for the button that removes the selected account.\r
883 \r
884 =item no_change\r
885 \r
886 Generic translation of the string I<No Change>.\r
887 \r
888 =item unknown\r
889 \r
890 Generic translation of the string I<Unknown>.\r
891 \r
892 =item account_removal_confirmation\r
893 \r
894 Question confirming that the user is sure he wishes to remove the selected\r
895 account.\r
896 \r
897 =item insufficient_administrative_privileges\r
898 \r
899 Error message displayed when the user attempts to access an administration\r
900 interface he is not allowed to use.\r
901 \r
902 =item update_available\r
903 \r
904 Title for the message indicating that a new version of Chirpy! is available.\r
905 \r
906 =item update_available_text\r
907 \r
908 Text giving basic information about a Chirpy! update. C<%1%> is replaced with\r
909 the version number C<%2%> with the release date.\r
910 \r
911 =item update_link_text\r
912 \r
913 Text for a link to an available update. Usually something along the lines of\r
914 "Click here for more information."\r
915 \r
916 =item update_check_failed\r
917 \r
918 Title for the message indicating that checking for updates has failed.\r
919 \r
920 =item update_check_failed_text\r
921 \r
922 Message explaining that Chirpy! failed to check for updates, and indicating\r
923 that an error report follows.\r
924 \r
925 =item event_100_name\r
926 \r
927 Name of the "Login Success" event.\r
928 \r
929 =item event_101_name\r
930 \r
931 Name of the "Login Failure" event.\r
932 \r
933 =item event_102_name\r
934 \r
935 Name of the "Change Password" event.\r
936 \r
937 =item event_200_name\r
938 \r
939 Name of the "Add Quote" event.\r
940 \r
941 =item event_201_name\r
942 \r
943 Name of the "Edit Quote" event.\r
944 \r
945 =item event_202_name\r
946 \r
947 Name of the "Remove Quote" event.\r
948 \r
949 =item event_203_name\r
950 \r
951 Name of the "Quote Rating Up" event.\r
952 \r
953 =item event_204_name\r
954 \r
955 Name of the "Quote Rating Down" event.\r
956 \r
957 =item event_205_name\r
958 \r
959 Name of the "Report Quote" event.\r
960 \r
961 =item event_206_name\r
962 \r
963 Name of the "Approve Quote" event.\r
964 \r
965 =item event_207_name\r
966 \r
967 Name of the "Unflag Quote" event.\r
968 \r
969 =item event_300_name\r
970 \r
971 Name of the "Add News" event.\r
972 \r
973 =item event_301_name\r
974 \r
975 Name of the "Edit News" event.\r
976 \r
977 =item event_302_name\r
978 \r
979 Name of the "Remove News" event.\r
980 \r
981 =item event_400_name\r
982 \r
983 Name of the "Add Account" event.\r
984 \r
985 =item event_401_name\r
986 \r
987 Name of the "Edit Account" event.\r
988 \r
989 =item event_402_name\r
990 \r
991 Name of the "Remove Account" event.\r
992 \r
993 =item date\r
994 \r
995 =item username\r
996 \r
997 =item event\r
998 \r
999 =item guest\r
1000 \r
1001 =item empty\r
1002 \r
1003 =item ok\r
1004 \r
1005 =item cancel\r
1006 \r
1007 Literal translation of each word; must start with a capital letter.\r
1008 \r
1009 =item sunday\r
1010 \r
1011 =item monday\r
1012 \r
1013 =item tuesday\r
1014 \r
1015 =item wednesday\r
1016 \r
1017 =item thursday\r
1018 \r
1019 =item friday\r
1020 \r
1021 =item saturday\r
1022 \r
1023 The full names of the days of the week.\r
1024 \r
1025 =item january\r
1026 \r
1027 =item february\r
1028 \r
1029 =item march\r
1030 \r
1031 =item april\r
1032 \r
1033 =item may\r
1034 \r
1035 =item june\r
1036 \r
1037 =item july\r
1038 \r
1039 =item august\r
1040 \r
1041 =item september\r
1042 \r
1043 =item october\r
1044 \r
1045 =item november\r
1046 \r
1047 =item december\r
1048 \r
1049 The full names of the months of the year.\r
1050 \r
1051 =item january_short\r
1052 \r
1053 =item february_short\r
1054 \r
1055 =item march_short\r
1056 \r
1057 =item april_short\r
1058 \r
1059 =item may_short\r
1060 \r
1061 =item june_short\r
1062 \r
1063 =item july_short\r
1064 \r
1065 =item august_short\r
1066 \r
1067 =item september_short\r
1068 \r
1069 =item october_short\r
1070 \r
1071 =item november_short\r
1072 \r
1073 =item december_short\r
1074 \r
1075 The names of the months of the year, abbreviated however feels natural.\r
1076 \r
1077 =back\r
1078 \r
1079 =head1 TODO\r
1080 \r
1081 The list of strings needs some organization and some of the identifier names\r
1082 should probably be revised. Sorry for the inconvenience.\r
1083 \r
1084 =head1 AUTHOR\r
1085 \r
1086 Tim De Pauw E<lt>ceetee@users.sourceforge.netE<gt>\r
1087 \r
1088 =head1 SEE ALSO\r
1089 \r
1090 L<Chirpy::Util::IniFile>, L<Chirpy>,\r
1091 L<http://chirpy.sourceforge.net/>\r
1092 \r
1093 =head1 COPYRIGHT\r
1094 \r
1095 Copyright 2005-2007 Tim De Pauw. All rights reserved.\r
1096 \r
1097 This program is free software; you can redistribute it and/or modify it under\r
1098 the terms of the GNU General Public License as published by the Free Software\r
1099 Foundation; either version 2 of the License, or (at your option) any later\r
1100 version.\r
1101 \r
1102 This program is distributed in the hope that it will be useful, but WITHOUT ANY\r
1103 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A\r
1104 PARTICULAR PURPOSE.  See the GNU General Public License for more details.\r
1105 \r
1106 =cut\r
1107 \r
1108 package Chirpy::Locale;\r
1109 \r
1110 use strict;\r
1111 use warnings;\r
1112 \r
1113 use vars qw($VERSION @ISA);\r
1114 \r
1115 $VERSION = '0.3';\r
1116 @ISA = qw(Chirpy::Util::IniFile);\r
1117 \r
1118 use Chirpy 0.3;\r
1119 use Chirpy::Util::IniFile 0.3;\r
1120 \r
1121 sub new {\r
1122         my ($class, $file) = @_;\r
1123         return $class->SUPER::new($file);\r
1124 }\r
1125 \r
1126 sub get_string {\r
1127         my ($self, $name, @vars) = @_;\r
1128         my $string = $self->SUPER::get('strings', $name) or return '';\r
1129         $string =~ s/\%(\d+)\%/$vars[$1 - 1] || ''/eg;\r
1130         return $string;\r
1131 }\r
1132 \r
1133 sub get_target_version {\r
1134         my $self = shift;\r
1135         return $self->get('properties', 'chirpy_version');\r
1136 }\r
1137 \r
1138 sub get_full_name {\r
1139         my $self = shift;\r
1140         return $self->get('properties', 'full_name');\r
1141 }\r
1142 \r
1143 sub get_version {\r
1144         my $self = shift;\r
1145         return $self->get('properties', 'version');\r
1146 }\r
1147 \r
1148 sub     get_author_information {\r
1149         my $self = shift;\r
1150         return {\r
1151                 'name' => $self->get('properties', 'author_name'),\r
1152                 'email' => $self->get('properties', 'author_email'),\r
1153                 'uri' => $self->get('properties', 'author_uri')\r
1154         };\r
1155 }\r
1156 \r
1157 1;\r
1158 \r
1159 ###############################################################################