##// END OF EJS Templates
Merged r1451 to r1454, r1458, r1460 to r1463 from trunk....
Jean-Philippe Lang -
r1460:2074f0ab4144
parent child
Show More
This diff has been collapsed as it changes many lines, (622 lines changed) Show them Hide them
@@ -0,0 +1,622
1 _gloc_rule_default: '|n| n==1 ? "" : "_plural" '
2
3 actionview_datehelper_select_day_prefix:
4 actionview_datehelper_select_month_names: Január,Február,Március,Április,Május,Június,Július,Augusztus,Szeptember,Október,November,December
5 actionview_datehelper_select_month_names_abbr: Jan,Feb,Már,Ápr,Máj,Jún,Júl,Aug,Szept,Okt,Nov,Dec
6 actionview_datehelper_select_month_prefix:
7 actionview_datehelper_select_year_prefix:
8 actionview_datehelper_time_in_words_day: 1 nap
9 actionview_datehelper_time_in_words_day_plural: %d nap
10 actionview_datehelper_time_in_words_hour_about: kb. 1 óra
11 actionview_datehelper_time_in_words_hour_about_plural: kb. %d óra
12 actionview_datehelper_time_in_words_hour_about_single: kb. 1 óra
13 actionview_datehelper_time_in_words_minute: 1 perc
14 actionview_datehelper_time_in_words_minute_half: fél perc
15 actionview_datehelper_time_in_words_minute_less_than: kevesebb, mint 1 perc
16 actionview_datehelper_time_in_words_minute_plural: %d perc
17 actionview_datehelper_time_in_words_minute_single: 1 perc
18 actionview_datehelper_time_in_words_second_less_than: kevesebb, mint 1 másodperc
19 actionview_datehelper_time_in_words_second_less_than_plural: kevesebb, mint %d másodperc
20 actionview_instancetag_blank_option: Kérem válasszon
21
22 activerecord_error_inclusion: nem található a listában
23 activerecord_error_exclusion: foglalt
24 activerecord_error_invalid: érvénytelen
25 activerecord_error_confirmation: jóváhagyás szükséges
26 activerecord_error_accepted: ell kell fogadni
27 activerecord_error_empty: nem lehet üres
28 activerecord_error_blank: nem lehet üres
29 activerecord_error_too_long: túl hosszú
30 activerecord_error_too_short: túl rövid
31 activerecord_error_wrong_length: hibás a hossza
32 activerecord_error_taken: már foglalt
33 activerecord_error_not_a_number: nem egy szám
34 activerecord_error_not_a_date: nem érvényes dátum
35 activerecord_error_greater_than_start_date: nagyobbnak kell lennie, mint az indítás dátuma
36 activerecord_error_not_same_project: nem azonos projekthez tartozik
37 activerecord_error_circular_dependency: Ez a kapcsolat egy körkörös függőséget eredményez
38
39 general_fmt_age: %d év
40 general_fmt_age_plural: %d év
41 general_fmt_date: %%Y.%%m.%%d
42 general_fmt_datetime: %%Y.%%m.%%d %%H:%%M:%%S
43 general_fmt_datetime_short: %%b %%d, %%H:%%M:%%S
44 general_fmt_time: %%H:%%M:%%S
45 general_text_No: 'Nem'
46 general_text_Yes: 'Igen'
47 general_text_no: 'nem'
48 general_text_yes: 'igen'
49 general_lang_name: 'Magyar'
50 general_csv_separator: ','
51 general_csv_encoding: ISO-8859-2
52 general_pdf_encoding: ISO-8859-2
53 general_day_names: Hétfő,Kedd,Szerda,Csütörtök,Péntek,Szombat,Vasárnap
54 general_first_day_of_week: '1'
55
56 notice_account_updated: A fiók adatai sikeresen frissítve.
57 notice_account_invalid_creditentials: Hibás felhasználói név, vagy jelszó
58 notice_account_password_updated: A jelszó módosítása megtörtént.
59 notice_account_wrong_password: Hibás jelszó
60 notice_account_register_done: A fiók sikeresen létrehozva. Aktiválásához kattints az e-mailben kapott linkre
61 notice_account_unknown_email: Ismeretlen felhasználó.
62 notice_can_t_change_password: A fiók külső azonosítási forrást használ. A jelszó megváltoztatása nem lehetséges.
63 notice_account_lost_email_sent: Egy e-mail üzenetben postáztunk Önnek egy leírást az új jelszó beállításáról.
64 notice_account_activated: Fiókját aktiváltuk. Most már be tud jelentkezni a rendszerbe.
65 notice_successful_create: Sikeres létrehozás.
66 notice_successful_update: Sikeres módosítás.
67 notice_successful_delete: Sikeres törlés.
68 notice_successful_connection: Sikeres bejelentkezés.
69 notice_file_not_found: Az oldal, amit meg szeretne nézni nem található, vagy átkerült egy másik helyre.
70 notice_locking_conflict: Az adatot egy másik felhasználó idő közben módosította.
71 notice_not_authorized: Nincs hozzáférési engedélye ehhez az oldalhoz.
72 notice_email_sent: Egy e-mail üzenetet küldtünk a következő címre %s
73 notice_email_error: Hiba történt a levél küldése közben (%s)
74 notice_feeds_access_key_reseted: Az RSS hozzáférési kulcsát újra generáltuk.
75 notice_failed_to_save_issues: "Nem sikerült a %d feladat(ok) mentése a %d -ban kiválasztva: %s."
76 notice_no_issue_selected: "Nincs feladat kiválasztva! Kérem jelölje meg melyik feladatot szeretné szerkeszteni!"
77 notice_account_pending: "A fiókja létrejött, és adminisztrátori jóváhagyásra vár."
78 notice_default_data_loaded: Az alapértelmezett konfiguráció betöltése sikeresen megtörtént.
79
80 error_can_t_load_default_data: "Az alapértelmezett konfiguráció betöltése nem lehetséges: %s"
81 error_scm_not_found: "A bejegyzés, vagy revízió nem található a tárolóban."
82 error_scm_command_failed: "A tároló elérése közben hiba lépett fel: %s"
83 error_scm_annotate: "A bejegyzés nem létezik, vagy nics jegyzetekkel ellátva."
84 error_issue_not_found_in_project: 'A feladat nem található, vagy nem ehhez a projekthez tartozik'
85
86 mail_subject_lost_password: Az Ön Redmine jelszava
87 mail_body_lost_password: 'A Redmine jelszó megváltoztatásához, kattintson a következő linkre:'
88 mail_subject_register: Redmine azonosító aktiválása
89 mail_body_register: 'A Redmine azonosítója aktiválásához, kattintson a következő linkre:'
90 mail_body_account_information_external: A "%s" azonosító használatával bejelentkezhet a Redmineba.
91 mail_body_account_information: Az Ön Redmine azonosítójának információi
92 mail_subject_account_activation_request: Redmine azonosító aktiválási kérelem
93 mail_body_account_activation_request: 'Egy új felhasználó (%s) regisztrált, azonosítója jóváhasgyásra várakozik:'
94
95 gui_validation_error: 1 hiba
96 gui_validation_error_plural: %d hiba
97
98 field_name: Név
99 field_description: Leírás
100 field_summary: Összegzés
101 field_is_required: Kötelező
102 field_firstname: Keresztnév
103 field_lastname: Vezetéknév
104 field_mail: E-mail
105 field_filename: Fájl
106 field_filesize: Méret
107 field_downloads: Letöltések
108 field_author: Szerző
109 field_created_on: Létrehozva
110 field_updated_on: Módosítva
111 field_field_format: Formátum
112 field_is_for_all: Minden projekthez
113 field_possible_values: Lehetséges értékek
114 field_regexp: Reguláris kifejezés
115 field_min_length: Minimum hossz
116 field_max_length: Maximum hossz
117 field_value: Érték
118 field_category: Kategória
119 field_title: Cím
120 field_project: Projekt
121 field_issue: Feladat
122 field_status: Státusz
123 field_notes: Feljegyzések
124 field_is_closed: Feladat lezárva
125 field_is_default: Alapértelmezett érték
126 field_tracker: Típus
127 field_subject: Tárgy
128 field_due_date: Befejezés dátuma
129 field_assigned_to: Felelős
130 field_priority: Prioritás
131 field_fixed_version: Cél verzió
132 field_user: Felhasználó
133 field_role: Szerepkör
134 field_homepage: Weboldal
135 field_is_public: Nyilvános
136 field_parent: Szülő projekt
137 field_is_in_chlog: Feladatok látszanak a változás naplóban
138 field_is_in_roadmap: Feladatok látszanak az életútban
139 field_login: Azonosító
140 field_mail_notification: E-mail értesítések
141 field_admin: Adminisztrátor
142 field_last_login_on: Utolsó bejelentkezés
143 field_language: Nyelv
144 field_effective_date: Dátum
145 field_password: Jelszó
146 field_new_password: Új jelszó
147 field_password_confirmation: Megerősítés
148 field_version: Verzió
149 field_type: Típus
150 field_host: Kiszolgáló
151 field_port: Port
152 field_account: Felhasználói fiók
153 field_base_dn: Base DN
154 field_attr_login: Bejelentkezési tulajdonság
155 field_attr_firstname: Családnév
156 field_attr_lastname: Utónév
157 field_attr_mail: E-mail
158 field_onthefly: On-the-fly felhasználó létrehozás
159 field_start_date: Kezdés dátuma
160 field_done_ratio: Elkészült (%%)
161 field_auth_source: Azonosítási mód
162 field_hide_mail: Rejtse el az e-mail címem
163 field_comments: Megjegyzés
164 field_url: URL
165 field_start_page: Kezdőlap
166 field_subproject: Alprojekt
167 field_hours: Óra
168 field_activity: Aktivitás
169 field_spent_on: Dátum
170 field_identifier: Azonosító
171 field_is_filter: Szűrőként használható
172 field_issue_to_id: Kapcsolódó feladat
173 field_delay: Késés
174 field_assignable: Feladat rendelhető ehhez a szerepkörhöz
175 field_redirect_existing_links: Létező linkek átirányítása
176 field_estimated_hours: Becsült idő
177 field_column_names: Oszlopok
178 field_time_zone: Időzóna
179 field_searchable: Kereshető
180 field_default_value: Alapértelmezett érték
181 field_comments_sorting: Feljegyzések megjelenítése
182
183 setting_app_title: Alkalmazás címe
184 setting_app_subtitle: Alkalmazás alcíme
185 setting_welcome_text: Üdvözlő üzenet
186 setting_default_language: Alapértelmezett nyelv
187 setting_login_required: Azonosítás szükséges
188 setting_self_registration: Regisztráció
189 setting_attachment_max_size: Melléklet max. mérete
190 setting_issues_export_limit: Feladatok exportálásának korlátja
191 setting_mail_from: Kibocsátó e-mail címe
192 setting_bcc_recipients: Titkos másolat címzet (bcc)
193 setting_host_name: Kiszolgáló neve
194 setting_text_formatting: Szöveg formázás
195 setting_wiki_compression: Wiki történet tömörítés
196 setting_feeds_limit: RSS tartalom korlát
197 setting_default_projects_public: Az új projektek alapértelmezés szerint nyilvánosak
198 setting_autofetch_changesets: Commitok automatikus lehúzása
199 setting_sys_api_enabled: WS engedélyezése a tárolók kezeléséhez
200 setting_commit_ref_keywords: Hivatkozó kulcsszavak
201 setting_commit_fix_keywords: Javítások kulcsszavai
202 setting_autologin: Automatikus bejelentkezés
203 setting_date_format: Dátum formátum
204 setting_time_format: Idő formátum
205 setting_cross_project_issue_relations: Kereszt-projekt feladat hivatkozások engedélyezése
206 setting_issue_list_default_columns: Az alapértelmezésként megjelenített oszlopok a feladat listában
207 setting_repositories_encodings: Tárolók kódolása
208 setting_emails_footer: E-mail lábléc
209 setting_protocol: Protokol
210 setting_per_page_options: Objektum / oldal opciók
211 setting_user_format: Felhasználók megjelenítésének formája
212 setting_activity_days_default: Napok megjelenítése a project aktivitásnál
213 setting_display_subprojects_issues: Alapértelmezettként mutassa az alprojektek feladatait is a projekteken
214
215 project_module_issue_tracking: Feladat követés
216 project_module_time_tracking: Idő rögzítés
217 project_module_news: Hírek
218 project_module_documents: Dokumentumok
219 project_module_files: Fájlok
220 project_module_wiki: Wiki
221 project_module_repository: Tároló
222 project_module_boards: Fórumok
223
224 label_user: Felhasználó
225 label_user_plural: Felhasználók
226 label_user_new: Új felhasználó
227 label_project: Projekt
228 label_project_new: Új projekt
229 label_project_plural: Projektek
230 label_project_all: Az összes projekt
231 label_project_latest: Legutóbbi projektek
232 label_issue: Feladat
233 label_issue_new: Új feladat
234 label_issue_plural: Feladatok
235 label_issue_view_all: Minden feladat megtekintése
236 label_issues_by: %s feladatai
237 label_issue_added: Feladat hozzáadva
238 label_issue_updated: Feladat frissítve
239 label_document: Dokumentum
240 label_document_new: Új dokumentum
241 label_document_plural: Dokumentumok
242 label_document_added: Dokumentum hozzáadva
243 label_role: Szerepkör
244 label_role_plural: Szerepkörök
245 label_role_new: Új szerepkör
246 label_role_and_permissions: Szerepkörök, és jogosultságok
247 label_member: Résztvevő
248 label_member_new: Új résztvevő
249 label_member_plural: Résztvevők
250 label_tracker: Feladat típus
251 label_tracker_plural: Feladat típusok
252 label_tracker_new: Új feladat típus
253 label_workflow: Workflow
254 label_issue_status: Feladat státusz
255 label_issue_status_plural: Feladat státuszok
256 label_issue_status_new: Új státusz
257 label_issue_category: Feladat kategória
258 label_issue_category_plural: Feladat kategóriák
259 label_issue_category_new: Új kategória
260 label_custom_field: Egyéni mező
261 label_custom_field_plural: Egyéni mezők
262 label_custom_field_new: Új egyéni mező
263 label_enumerations: Felsorolások
264 label_enumeration_new: Új érték
265 label_information: Információ
266 label_information_plural: Információk
267 label_please_login: Jelentkezzen be
268 label_register: Regisztráljon
269 label_password_lost: Elfelejtett jelszó
270 label_home: Kezdőlap
271 label_my_page: Saját kezdőlapom
272 label_my_account: Fiókom adatai
273 label_my_projects: Saját projektem
274 label_administration: Adminisztráció
275 label_login: Bejelentkezés
276 label_logout: Kijelentkezés
277 label_help: Súgó
278 label_reported_issues: Bejelentett feladatok
279 label_assigned_to_me_issues: A nekem kiosztott feladatok
280 label_last_login: Utolsó bejelentkezés
281 label_last_updates: Utoljára frissítve
282 label_last_updates_plural: Utoljára módosítva %d
283 label_registered_on: Regisztrált
284 label_activity: Tevékenységek
285 label_overall_activity: Teljes aktivitás
286 label_new: Új
287 label_logged_as: Bejelentkezve, mint
288 label_environment: Környezet
289 label_authentication: Azonosítás
290 label_auth_source: Azonosítás módja
291 label_auth_source_new: Új azonosítási mód
292 label_auth_source_plural: Azonosítási módok
293 label_subproject_plural: Alprojektek
294 label_and_its_subprojects: %s és alprojektjei
295 label_min_max_length: Min - Max hossz
296 label_list: Lista
297 label_date: Dátum
298 label_integer: Egész
299 label_float: Lebegőpontos
300 label_boolean: Logikai
301 label_string: Szöveg
302 label_text: Hosszú szöveg
303 label_attribute: Tulajdonság
304 label_attribute_plural: Tulajdonságok
305 label_download: %d Letöltés
306 label_download_plural: %d Letöltések
307 label_no_data: Nincs megjeleníthető adat
308 label_change_status: Státusz módosítása
309 label_history: Történet
310 label_attachment: Fájl
311 label_attachment_new: Új fájl
312 label_attachment_delete: Fájl törlése
313 label_attachment_plural: Fájlok
314 label_file_added: Fájl hozzáadva
315 label_report: Jelentés
316 label_report_plural: Jelentések
317 label_news: Hírek
318 label_news_new: Hír hozzáadása
319 label_news_plural: Hírek
320 label_news_latest: Legutóbbi hírek
321 label_news_view_all: Minden hír megtekintése
322 label_news_added: Hír hozzáadva
323 label_change_log: Változás napló
324 label_settings: Beállítások
325 label_overview: Áttekintés
326 label_version: Verzió
327 label_version_new: Új verzió
328 label_version_plural: Verziók
329 label_confirmation: Jóváhagyás
330 label_export_to: Exportálás
331 label_read: Olvas...
332 label_public_projects: Nyilvános projektek
333 label_open_issues: nyitott
334 label_open_issues_plural: nyitott
335 label_closed_issues: lezárt
336 label_closed_issues_plural: lezárt
337 label_total: Összesen
338 label_permissions: Jogosultságok
339 label_current_status: Jelenlegi státusz
340 label_new_statuses_allowed: Státusz változtatások engedélyei
341 label_all: mind
342 label_none: nincs
343 label_nobody: senki
344 label_next: Következő
345 label_previous: Előző
346 label_used_by: Használja
347 label_details: Részletek
348 label_add_note: Jegyzet hozzáadása
349 label_per_page: Oldalanként
350 label_calendar: Naptár
351 label_months_from: hónap, kezdve
352 label_gantt: Gantt
353 label_internal: Belső
354 label_last_changes: utolsó %d változás
355 label_change_view_all: Minden változás megtekintése
356 label_personalize_page: Az oldal testreszabása
357 label_comment: Megjegyzés
358 label_comment_plural: Megjegyzések
359 label_comment_add: Megjegyzés hozzáadása
360 label_comment_added: Megjegyzés hozzáadva
361 label_comment_delete: Megjegyzések törlése
362 label_query: Egyéni lekérdezés
363 label_query_plural: Egyéni lekérdezések
364 label_query_new: Új lekérdezés
365 label_filter_add: Szűrő hozzáadása
366 label_filter_plural: Szűrők
367 label_equals: egyenlő
368 label_not_equals: nem egyenlő
369 label_in_less_than: kevesebb, mint
370 label_in_more_than: több, mint
371 label_in: in
372 label_today: ma
373 label_all_time: mindenkor
374 label_yesterday: tegnap
375 label_this_week: aktuális hét
376 label_last_week: múlt hét
377 label_last_n_days: az elmúlt %d nap
378 label_this_month: aktuális hónap
379 label_last_month: múlt hónap
380 label_this_year: aktuális év
381 label_date_range: Dátum intervallum
382 label_less_than_ago: kevesebb, mint nappal ezelőtt
383 label_more_than_ago: több, mint nappal ezelőtt
384 label_ago: nappal ezelőtt
385 label_contains: tartalmazza
386 label_not_contains: nem tartalmazza
387 label_day_plural: nap
388 label_repository: Tároló
389 label_repository_plural: Tárolók
390 label_browse: Tallóz
391 label_modification: %d változás
392 label_modification_plural: %d változások
393 label_revision: Revízió
394 label_revision_plural: Revíziók
395 label_associated_revisions: Kapcsolt revíziók
396 label_added: hozzáadva
397 label_modified: módosítva
398 label_deleted: törölve
399 label_latest_revision: Legutolsó revízió
400 label_latest_revision_plural: Legutolsó revíziók
401 label_view_revisions: Revíziók megtekintése
402 label_max_size: Maximális méret
403 label_on: 'összesen'
404 label_sort_highest: Az elejére
405 label_sort_higher: Eggyel feljebb
406 label_sort_lower: Eggyel lejjebb
407 label_sort_lowest: Az aljára
408 label_roadmap: Életút
409 label_roadmap_due_in: Elkészültéig várhatóan még
410 label_roadmap_overdue: %s késésben
411 label_roadmap_no_issues: Nincsenek feladatok ehhez a verzióhoz
412 label_search: Keresés
413 label_result_plural: Találatok
414 label_all_words: Minden szó
415 label_wiki: Wiki
416 label_wiki_edit: Wiki szerkesztés
417 label_wiki_edit_plural: Wiki szerkesztések
418 label_wiki_page: Wiki oldal
419 label_wiki_page_plural: Wiki oldalak
420 label_index_by_title: Cím szerint indexelve
421 label_index_by_date: Dátum szerint indexelve
422 label_current_version: Jelenlegi verzió
423 label_preview: Előnézet
424 label_feed_plural: Visszajelzések
425 label_changes_details: Változások részletei
426 label_issue_tracking: Feladat követés
427 label_spent_time: Ráfordított idő
428 label_f_hour: %.2f óra
429 label_f_hour_plural: %.2f óra
430 label_time_tracking: Idő követés
431 label_change_plural: Változások
432 label_statistics: Statisztikák
433 label_commits_per_month: Commits havonta
434 label_commits_per_author: Commits szerzőnként
435 label_view_diff: Különbségek megtekintése
436 label_diff_inline: inline
437 label_diff_side_by_side: side by side
438 label_options: Opciók
439 label_copy_workflow_from: Workflow másolása innen
440 label_permissions_report: Jogosultsági riport
441 label_watched_issues: Megfigyelt feladatok
442 label_related_issues: Kapcsolódó feladatok
443 label_applied_status: Alkalmazandó státusz
444 label_loading: Betöltés...
445 label_relation_new: Új kapcsolat
446 label_relation_delete: Kapcsolat törlése
447 label_relates_to: kapcsolódik
448 label_duplicates: duplikálja
449 label_blocks: zárolja
450 label_blocked_by: zárolta
451 label_precedes: megelőzi
452 label_follows: követi
453 label_end_to_start: végétől indulásig
454 label_end_to_end: végétől végéig
455 label_start_to_start: indulástól indulásig
456 label_start_to_end: indulástól végéig
457 label_stay_logged_in: Emlékezzen rám
458 label_disabled: kikapcsolva
459 label_show_completed_versions: A kész verziók mutatása
460 label_me: én
461 label_board: Fórum
462 label_board_new: Új fórum
463 label_board_plural: Fórumok
464 label_topic_plural: Témák
465 label_message_plural: Üzenetek
466 label_message_last: Utolsó üzenet
467 label_message_new: Új üzenet
468 label_message_posted: Üzenet hozzáadva
469 label_reply_plural: Válaszok
470 label_send_information: Fiók infomációk küldése a felhasználónak
471 label_year: Év
472 label_month: Hónap
473 label_week: Hét
474 label_date_from: 'Kezdet:'
475 label_date_to: 'Vége:'
476 label_language_based: A felhasználó nyelve alapján
477 label_sort_by: %s szerint rendezve
478 label_send_test_email: Teszt e-mail küldése
479 label_feeds_access_key_created_on: 'RSS hozzáférési kulcs létrehozva ennyivel ezelőtt: %s'
480 label_module_plural: Modulok
481 label_added_time_by: '%s adta hozzá ennyivel ezelőtt: %s'
482 label_updated_time: 'Utolsó módosítás ennyivel ezelőtt: %s'
483 label_jump_to_a_project: Ugrás projekthez...
484 label_file_plural: Fájlok
485 label_changeset_plural: Changesets
486 label_default_columns: Alapértelmezett oszlopok
487 label_no_change_option: (Nincs változás)
488 label_bulk_edit_selected_issues: A kiválasztott feladatok kötegelt szerkesztése
489 label_theme: Téma
490 label_default: Alapértelmezett
491 label_search_titles_only: Keresés csak a címekben
492 label_user_mail_option_all: "Minden eseményről minden saját projektemben"
493 label_user_mail_option_selected: "Minden eseményről a kiválasztott projektekben..."
494 label_user_mail_option_none: "Csak a megfigyelt dolgokról, vagy, amiben részt veszek"
495 label_user_mail_no_self_notified: "Nem kérek értesítést az általam végzett módosításokról"
496 label_registration_activation_by_email: Fiók aktiválása e-mailben
497 label_registration_manual_activation: Manuális fiók aktiválás
498 label_registration_automatic_activation: Automatikus fiók aktiválás
499 label_display_per_page: 'Oldalanként: %s'
500 label_age: Kor
501 label_change_properties: Tulajdonságok változtatása
502 label_general: Általános
503 label_more: továbbiak
504 label_scm: SCM
505 label_plugins: Pluginek
506 label_ldap_authentication: LDAP azonosítás
507 label_downloads_abbr: D/L
508 label_optional_description: Opcionális leírás
509 label_add_another_file: Újabb fájl hozzáadása
510 label_preferences: Tulajdonságok
511 label_chronological_order: Időrendben
512 label_reverse_chronological_order: Fordított időrendben
513 label_planning: Tervezés
514
515 button_login: Bejelentkezés
516 button_submit: Elfogad
517 button_save: Mentés
518 button_check_all: Mindent kijelöl
519 button_uncheck_all: Kijelölés törlése
520 button_delete: Töröl
521 button_create: Létrehoz
522 button_test: Teszt
523 button_edit: Szerkeszt
524 button_add: Hozzáad
525 button_change: Változtat
526 button_apply: Alkalmaz
527 button_clear: Töröl
528 button_lock: Zárol
529 button_unlock: Felold
530 button_download: Letöltés
531 button_list: Lista
532 button_view: Megnéz
533 button_move: Mozgat
534 button_back: Vissza
535 button_cancel: Mégse
536 button_activate: Aktivál
537 button_sort: Rendezés
538 button_log_time: Idő rögzítés
539 button_rollback: Visszaáll erre a verzióra
540 button_watch: Megfigyel
541 button_unwatch: Megfigyelés törlése
542 button_reply: Válasz
543 button_archive: Archivál
544 button_unarchive: Dearchivál
545 button_reset: Reset
546 button_rename: Átnevez
547 button_change_password: Jelszó megváltoztatása
548 button_copy: Másol
549 button_annotate: Jegyzetel
550 button_update: Módosít
551 button_configure: Konfigurál
552
553 status_active: aktív
554 status_registered: regisztrált
555 status_locked: zárolt
556
557 text_select_mail_notifications: Válasszon eseményeket, amelyekről e-mail értesítést kell küldeni.
558 text_regexp_info: eg. ^[A-Z0-9]+$
559 text_min_max_length_info: 0 = nincs korlátozás
560 text_project_destroy_confirmation: Biztosan törölni szeretné a projektet és vele együtt minden kapcsolódó adatot ?
561 text_subprojects_destroy_warning: 'Az alprojekt(ek): %s szintén törlésre kerülnek.'
562 text_workflow_edit: Válasszon egy szerepkört, és egy trackert a workflow szerkesztéséhez
563 text_are_you_sure: Biztos benne ?
564 text_journal_changed: "változás: %s volt, %s lett"
565 text_journal_set_to: "beállítva: %s"
566 text_journal_deleted: törölve
567 text_tip_task_begin_day: a feladat ezen a napon kezdődik
568 text_tip_task_end_day: a feladat ezen a napon ér véget
569 text_tip_task_begin_end_day: a feladat ezen a napon kezdődik és ér véget
570 text_project_identifier_info: 'Kis betűk (a-z), számok és kötőjel megengedett.<br />Mentés után az azonosítót megváltoztatni nem lehet.'
571 text_caracters_maximum: maximum %d karakter.
572 text_caracters_minimum: Legkevesebb %d karakter hosszúnek kell lennie.
573 text_length_between: Legalább %d és legfeljebb %d hosszú karakter.
574 text_tracker_no_workflow: Nincs workflow definiálva ehhez a tracker-hez
575 text_unallowed_characters: Tiltott karakterek
576 text_comma_separated: Több érték megengedett (vesszővel elválasztva)
577 text_issues_ref_in_commit_messages: Hivatkozás feladatokra, feladatok javítása a commit üzenetekben
578 text_issue_added: %s feladat bejelentve.
579 text_issue_updated: %s feladat frissítve.
580 text_wiki_destroy_confirmation: Biztosan törölni szeretné ezt a wiki-t minden tartalmával együtt ?
581 text_issue_category_destroy_question: Néhány feladat (%d) hozzá van rendelve ehhez a kategóriához. Mit szeretne tenni ?
582 text_issue_category_destroy_assignments: Kategória hozzárendelés megszűntetése
583 text_issue_category_reassign_to: Feladatok újra hozzárendelése a kategóriához
584 text_user_mail_option: "A nem kiválasztott projektekről csak akkor kap értesítést, ha figyelést kér rá, vagy részt vesz benne (pl. Ön a létrehozó, vagy a hozzárendelő)"
585 text_no_configuration_data: "Szerepkörök, trackerek, feladat státuszok, és workflow adatok még nincsenek konfigurálva.\nErősen ajánlott, az alapértelmezett konfiguráció betöltése, és utána módosíthatja azt."
586 text_load_default_configuration: Alapértelmezett konfiguráció betöltése
587 text_status_changed_by_changeset: Applied in changeset %s.
588 text_issues_destroy_confirmation: 'Biztos benne, hogy törölni szeretné a kijelölt feladato(ka)t ?'
589 text_select_project_modules: 'Válassza ki az engedélyezett modulokat ehhez a projekthez:'
590 text_default_administrator_account_changed: Alapértelmezett adminisztrátor fiók megváltoztatva
591 text_file_repository_writable: Fájl tároló írható
592 text_rmagick_available: RMagick elérhető (opcionális)
593 text_destroy_time_entries_question: %.02f órányi munka van rögzítve a feladatokon, amiket törölni szeretne. Mit szeretne tenni ?
594 text_destroy_time_entries: A rögzített órák törlése
595 text_assign_time_entries_to_project: A rögzített órák hozzárendelése a projekthez
596 text_reassign_time_entries: 'A rögzített órák újra hozzárendelése ehhez a feladathoz:'
597
598 default_role_manager: Vezető
599 default_role_developper: Fejlesztő
600 default_role_reporter: Bejelentő
601 default_tracker_bug: Hiba
602 default_tracker_feature: Fejlesztés
603 default_tracker_support: Support
604 default_issue_status_new: Új
605 default_issue_status_assigned: Kiosztva
606 default_issue_status_resolved: Megoldva
607 default_issue_status_feedback: Visszajelzés
608 default_issue_status_closed: Lezárt
609 default_issue_status_rejected: Elutasított
610 default_doc_category_user: Felhasználói dokumentáció
611 default_doc_category_tech: Technikai dokumentáció
612 default_priority_low: Alacsony
613 default_priority_normal: Normál
614 default_priority_high: Magas
615 default_priority_urgent: Sürgős
616 default_priority_immediate: Azonnal
617 default_activity_design: Tervezés
618 default_activity_development: Fejlesztés
619
620 enumeration_issue_priorities: Feladat prioritások
621 enumeration_doc_categories: Dokumentum kategóriák
622 enumeration_activities: Tevékenységek (idő rögzítés)
@@ -0,0 +1,127
1 // ** I18N
2
3 // Calendar HU language
4 // Author: Takács Gábor
5 // Encoding: UTF-8
6 // Distributed under the same terms as the calendar itself.
7
8 // For translators: please use UTF-8 if possible. We strongly believe that
9 // Unicode is the answer to a real internationalized world. Also please
10 // include your contact information in the header, as can be seen above.
11
12 // full day names
13 Calendar._DN = new Array
14 ("Vasárnap",
15 "Hétfő",
16 "Kedd",
17 "Szerda",
18 "Csütörtök",
19 "Péntek",
20 "Szombat",
21 "Vasárnap");
22
23 // Please note that the following array of short day names (and the same goes
24 // for short month names, _SMN) isn't absolutely necessary. We give it here
25 // for exemplification on how one can customize the short day names, but if
26 // they are simply the first N letters of the full name you can simply say:
27 //
28 // Calendar._SDN_len = N; // short day name length
29 // Calendar._SMN_len = N; // short month name length
30 //
31 // If N = 3 then this is not needed either since we assume a value of 3 if not
32 // present, to be compatible with translation files that were written before
33 // this feature.
34
35 // short day names
36 Calendar._SDN = new Array
37 ("Vas",
38 "Hét",
39 "Ked",
40 "Sze",
41 "Csü",
42 "Pén",
43 "Szo",
44 "Vas");
45
46 // First day of the week. "0" means display Sunday first, "1" means display
47 // Monday first, etc.
48 Calendar._FD = 1;
49
50 // full month names
51 Calendar._MN = new Array
52 ("Január",
53 "Február",
54 "Március",
55 "Április",
56 "Május",
57 "Június",
58 "Július",
59 "Augusztus",
60 "Szeptember",
61 "Október",
62 "November",
63 "December");
64
65 // short month names
66 Calendar._SMN = new Array
67 ("Jan",
68 "Feb",
69 "Már",
70 "Ápr",
71 "Máj",
72 "Jún",
73 "Júl",
74 "Aug",
75 "Szep",
76 "Okt",
77 "Nov",
78 "Dec");
79
80 // tooltips
81 Calendar._TT = {};
82 Calendar._TT["INFO"] = "A naptár leírása";
83
84 Calendar._TT["ABOUT"] =
85 "DHTML Date/Time Selector\n" +
86 "(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
87 "For latest version visit: http://www.dynarch.com/projects/calendar/\n" +
88 "Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." +
89 "\n\n" +
90 "Date selection:\n" +
91 "- Use the \xab, \xbb buttons to select year\n" +
92 "- Use the " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " buttons to select month\n" +
93 "- Hold mouse button on any of the above buttons for faster selection.";
94 Calendar._TT["ABOUT_TIME"] = "\n\n" +
95 "Time selection:\n" +
96 "- Click on any of the time parts to increase it\n" +
97 "- or Shift-click to decrease it\n" +
98 "- or click and drag for faster selection.";
99
100 Calendar._TT["PREV_YEAR"] = "Előző év (nyomvatart = menü)";
101 Calendar._TT["PREV_MONTH"] = "Előző hónap (nyomvatart = menü)";
102 Calendar._TT["GO_TODAY"] = "Irány a Ma";
103 Calendar._TT["NEXT_MONTH"] = "Következő hónap (nyomvatart = menü)";
104 Calendar._TT["NEXT_YEAR"] = "Következő év (nyomvatart = menü)";
105 Calendar._TT["SEL_DATE"] = "Válasszon dátumot";
106 Calendar._TT["DRAG_TO_MOVE"] = "Fogd és vidd";
107 Calendar._TT["PART_TODAY"] = " (ma)";
108
109 // the following is to inform that "%s" is to be the first day of week
110 // %s will be replaced with the day name.
111 Calendar._TT["DAY_FIRST"] = "%s megjelenítése elsőként";
112
113 // This may be locale-dependent. It specifies the week-end days, as an array
114 // of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1
115 // means Monday, etc.
116 Calendar._TT["WEEKEND"] = "0,6";
117
118 Calendar._TT["CLOSE"] = "Bezár";
119 Calendar._TT["TODAY"] = "Ma";
120 Calendar._TT["TIME_PART"] = "(Shift-)Click vagy húzd az érték változtatásához";
121
122 // date formats
123 Calendar._TT["DEF_DATE_FORMAT"] = "%Y.%m.%d";
124 Calendar._TT["TT_DATE_FORMAT"] = "%B %e, %A";
125
126 Calendar._TT["WK"] = "hét";
127 Calendar._TT["TIME"] = "Idő:";
@@ -0,0 +1,14
1 jsToolBar.strings = {};
2 jsToolBar.strings['Strong'] = 'Félkövér';
3 jsToolBar.strings['Italic'] = 'Dőlt';
4 jsToolBar.strings['Underline'] = 'Aláhúzott';
5 jsToolBar.strings['Deleted'] = 'Törölt';
6 jsToolBar.strings['Code'] = 'Kód sorok';
7 jsToolBar.strings['Heading 1'] = 'Fejléc 1';
8 jsToolBar.strings['Heading 2'] = 'Fejléc 2';
9 jsToolBar.strings['Heading 3'] = 'Fejléc 3';
10 jsToolBar.strings['Unordered list'] = 'Felsorolás';
11 jsToolBar.strings['Ordered list'] = 'Számozott lista';
12 jsToolBar.strings['Preformatted text'] = 'Előreformázott szöveg';
13 jsToolBar.strings['Wiki link'] = 'Link egy Wiki oldalra';
14 jsToolBar.strings['Image'] = 'Kép';
@@ -1,420 +1,421
1 1 # redMine - project management software
2 2 # Copyright (C) 2006-2007 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 class IssuesController < ApplicationController
19 19 layout 'base'
20 20 menu_item :new_issue, :only => :new
21 21
22 22 before_filter :find_issue, :only => [:show, :edit, :destroy_attachment]
23 23 before_filter :find_issues, :only => [:bulk_edit, :move, :destroy]
24 24 before_filter :find_project, :only => [:new, :update_form, :preview]
25 25 before_filter :authorize, :except => [:index, :changes, :preview, :update_form, :context_menu]
26 26 before_filter :find_optional_project, :only => [:index, :changes]
27 27 accept_key_auth :index, :changes
28 28
29 29 helper :journals
30 30 helper :projects
31 31 include ProjectsHelper
32 32 helper :custom_fields
33 33 include CustomFieldsHelper
34 34 helper :ifpdf
35 35 include IfpdfHelper
36 36 helper :issue_relations
37 37 include IssueRelationsHelper
38 38 helper :watchers
39 39 include WatchersHelper
40 40 helper :attachments
41 41 include AttachmentsHelper
42 42 helper :queries
43 43 helper :sort
44 44 include SortHelper
45 45 include IssuesHelper
46 46
47 47 def index
48 48 sort_init "#{Issue.table_name}.id", "desc"
49 49 sort_update
50 50 retrieve_query
51 51 if @query.valid?
52 52 limit = per_page_option
53 53 respond_to do |format|
54 54 format.html { }
55 55 format.atom { }
56 56 format.csv { limit = Setting.issues_export_limit.to_i }
57 57 format.pdf { limit = Setting.issues_export_limit.to_i }
58 58 end
59 59 @issue_count = Issue.count(:include => [:status, :project], :conditions => @query.statement)
60 60 @issue_pages = Paginator.new self, @issue_count, limit, params['page']
61 61 @issues = Issue.find :all, :order => sort_clause,
62 62 :include => [ :assigned_to, :status, :tracker, :project, :priority, :category, :fixed_version ],
63 63 :conditions => @query.statement,
64 64 :limit => limit,
65 65 :offset => @issue_pages.current.offset
66 66 respond_to do |format|
67 67 format.html { render :template => 'issues/index.rhtml', :layout => !request.xhr? }
68 68 format.atom { render_feed(@issues, :title => l(:label_issue_plural)) }
69 69 format.csv { send_data(issues_to_csv(@issues, @project).read, :type => 'text/csv; header=present', :filename => 'export.csv') }
70 70 format.pdf { send_data(render(:template => 'issues/index.rfpdf', :layout => false), :type => 'application/pdf', :filename => 'export.pdf') }
71 71 end
72 72 else
73 73 # Send html if the query is not valid
74 74 render(:template => 'issues/index.rhtml', :layout => !request.xhr?)
75 75 end
76 76 rescue ActiveRecord::RecordNotFound
77 77 render_404
78 78 end
79 79
80 80 def changes
81 81 sort_init "#{Issue.table_name}.id", "desc"
82 82 sort_update
83 83 retrieve_query
84 84 if @query.valid?
85 85 @journals = Journal.find :all, :include => [ :details, :user, {:issue => [:project, :author, :tracker, :status]} ],
86 86 :conditions => @query.statement,
87 87 :limit => 25,
88 88 :order => "#{Journal.table_name}.created_on DESC"
89 89 end
90 90 @title = (@project ? @project.name : Setting.app_title) + ": " + (@query.new_record? ? l(:label_changes_details) : @query.name)
91 91 render :layout => false, :content_type => 'application/atom+xml'
92 92 rescue ActiveRecord::RecordNotFound
93 93 render_404
94 94 end
95 95
96 96 def show
97 97 @custom_values = @project.custom_fields_for_issues(@issue.tracker).collect { |x| @issue.custom_values.find_by_custom_field_id(x.id) || CustomValue.new(:custom_field => x, :customized => @issue) }
98 98 @journals = @issue.journals.find(:all, :include => [:user, :details], :order => "#{Journal.table_name}.created_on ASC")
99 99 @journals.each_with_index {|j,i| j.indice = i+1}
100 100 @journals.reverse! if User.current.wants_comments_in_reverse_order?
101 101 @allowed_statuses = @issue.new_statuses_allowed_to(User.current)
102 102 @edit_allowed = User.current.allowed_to?(:edit_issues, @project)
103 103 @activities = Enumeration::get_values('ACTI')
104 104 @priorities = Enumeration::get_values('IPRI')
105 @time_entry = TimeEntry.new
105 106 respond_to do |format|
106 107 format.html { render :template => 'issues/show.rhtml' }
107 108 format.atom { render :action => 'changes', :layout => false, :content_type => 'application/atom+xml' }
108 109 format.pdf { send_data(render(:template => 'issues/show.rfpdf', :layout => false), :type => 'application/pdf', :filename => "#{@project.identifier}-#{@issue.id}.pdf") }
109 110 end
110 111 end
111 112
112 113 # Add a new issue
113 114 # The new issue will be created from an existing one if copy_from parameter is given
114 115 def new
115 116 @issue = params[:copy_from] ? Issue.new.copy_from(params[:copy_from]) : Issue.new(params[:issue])
116 117 @issue.project = @project
117 118 @issue.author = User.current
118 119 @issue.tracker ||= @project.trackers.find(params[:tracker_id] ? params[:tracker_id] : :first)
119 120 if @issue.tracker.nil?
120 121 flash.now[:error] = 'No tracker is associated to this project. Please check the Project settings.'
121 122 render :nothing => true, :layout => true
122 123 return
123 124 end
124 125
125 126 default_status = IssueStatus.default
126 127 unless default_status
127 128 flash.now[:error] = 'No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").'
128 129 render :nothing => true, :layout => true
129 130 return
130 131 end
131 132 @issue.status = default_status
132 133 @allowed_statuses = ([default_status] + default_status.find_new_statuses_allowed_to(User.current.role_for_project(@project), @issue.tracker)).uniq
133 134
134 135 if request.get? || request.xhr?
135 136 @issue.start_date ||= Date.today
136 137 @custom_values = @issue.custom_values.empty? ?
137 138 @project.custom_fields_for_issues(@issue.tracker).collect { |x| CustomValue.new(:custom_field => x, :customized => @issue) } :
138 139 @issue.custom_values
139 140 else
140 141 requested_status = IssueStatus.find_by_id(params[:issue][:status_id])
141 142 # Check that the user is allowed to apply the requested status
142 143 @issue.status = (@allowed_statuses.include? requested_status) ? requested_status : default_status
143 144 @custom_values = @project.custom_fields_for_issues(@issue.tracker).collect { |x| CustomValue.new(:custom_field => x,
144 145 :customized => @issue,
145 146 :value => (params[:custom_fields] ? params[:custom_fields][x.id.to_s] : nil)) }
146 147 @issue.custom_values = @custom_values
147 148 if @issue.save
148 149 attach_files(@issue, params[:attachments])
149 150 flash[:notice] = l(:notice_successful_create)
150 151 Mailer.deliver_issue_add(@issue) if Setting.notified_events.include?('issue_added')
151 152 redirect_to :controller => 'issues', :action => 'show', :id => @issue, :project_id => @project
152 153 return
153 154 end
154 155 end
155 156 @priorities = Enumeration::get_values('IPRI')
156 157 render :layout => !request.xhr?
157 158 end
158 159
159 160 # Attributes that can be updated on workflow transition (without :edit permission)
160 161 # TODO: make it configurable (at least per role)
161 162 UPDATABLE_ATTRS_ON_TRANSITION = %w(status_id assigned_to_id fixed_version_id done_ratio) unless const_defined?(:UPDATABLE_ATTRS_ON_TRANSITION)
162 163
163 164 def edit
164 165 @allowed_statuses = @issue.new_statuses_allowed_to(User.current)
165 166 @activities = Enumeration::get_values('ACTI')
166 167 @priorities = Enumeration::get_values('IPRI')
167 168 @custom_values = []
168 169 @edit_allowed = User.current.allowed_to?(:edit_issues, @project)
169 170
170 171 @notes = params[:notes]
171 172 journal = @issue.init_journal(User.current, @notes)
172 173 # User can change issue attributes only if he has :edit permission or if a workflow transition is allowed
173 174 if (@edit_allowed || !@allowed_statuses.empty?) && params[:issue]
174 175 attrs = params[:issue].dup
175 176 attrs.delete_if {|k,v| !UPDATABLE_ATTRS_ON_TRANSITION.include?(k) } unless @edit_allowed
176 177 attrs.delete(:status_id) unless @allowed_statuses.detect {|s| s.id.to_s == attrs[:status_id].to_s}
177 178 @issue.attributes = attrs
178 179 end
179 180
180 181 if request.get?
181 182 @custom_values = @project.custom_fields_for_issues(@issue.tracker).collect { |x| @issue.custom_values.find_by_custom_field_id(x.id) || CustomValue.new(:custom_field => x, :customized => @issue) }
182 183 else
183 184 # Update custom fields if user has :edit permission
184 185 if @edit_allowed && params[:custom_fields]
185 186 @custom_values = @project.custom_fields_for_issues(@issue.tracker).collect { |x| CustomValue.new(:custom_field => x, :customized => @issue, :value => params["custom_fields"][x.id.to_s]) }
186 187 @issue.custom_values = @custom_values
187 188 end
188 189 attachments = attach_files(@issue, params[:attachments])
189 190 attachments.each {|a| journal.details << JournalDetail.new(:property => 'attachment', :prop_key => a.id, :value => a.filename)}
190 191 if @issue.save
191 192 # Log spend time
192 193 if current_role.allowed_to?(:log_time)
193 194 @time_entry = TimeEntry.new(:project => @project, :issue => @issue, :user => User.current, :spent_on => Date.today)
194 195 @time_entry.attributes = params[:time_entry]
195 196 @time_entry.save
196 197 end
197 198 if !journal.new_record?
198 199 # Only send notification if something was actually changed
199 200 flash[:notice] = l(:notice_successful_update)
200 201 Mailer.deliver_issue_edit(journal) if Setting.notified_events.include?('issue_updated')
201 202 end
202 203 redirect_to(params[:back_to] || {:action => 'show', :id => @issue})
203 204 end
204 205 end
205 206 rescue ActiveRecord::StaleObjectError
206 207 # Optimistic locking exception
207 208 flash.now[:error] = l(:notice_locking_conflict)
208 209 end
209 210
210 211 # Bulk edit a set of issues
211 212 def bulk_edit
212 213 if request.post?
213 214 status = params[:status_id].blank? ? nil : IssueStatus.find_by_id(params[:status_id])
214 215 priority = params[:priority_id].blank? ? nil : Enumeration.find_by_id(params[:priority_id])
215 216 assigned_to = (params[:assigned_to_id].blank? || params[:assigned_to_id] == 'none') ? nil : User.find_by_id(params[:assigned_to_id])
216 217 category = (params[:category_id].blank? || params[:category_id] == 'none') ? nil : @project.issue_categories.find_by_id(params[:category_id])
217 218 fixed_version = (params[:fixed_version_id].blank? || params[:fixed_version_id] == 'none') ? nil : @project.versions.find_by_id(params[:fixed_version_id])
218 219
219 220 unsaved_issue_ids = []
220 221 @issues.each do |issue|
221 222 journal = issue.init_journal(User.current, params[:notes])
222 223 issue.priority = priority if priority
223 224 issue.assigned_to = assigned_to if assigned_to || params[:assigned_to_id] == 'none'
224 225 issue.category = category if category || params[:category_id] == 'none'
225 226 issue.fixed_version = fixed_version if fixed_version || params[:fixed_version_id] == 'none'
226 227 issue.start_date = params[:start_date] unless params[:start_date].blank?
227 228 issue.due_date = params[:due_date] unless params[:due_date].blank?
228 229 issue.done_ratio = params[:done_ratio] unless params[:done_ratio].blank?
229 230 # Don't save any change to the issue if the user is not authorized to apply the requested status
230 231 if (status.nil? || (issue.status.new_status_allowed_to?(status, current_role, issue.tracker) && issue.status = status)) && issue.save
231 232 # Send notification for each issue (if changed)
232 233 Mailer.deliver_issue_edit(journal) if journal.details.any? && Setting.notified_events.include?('issue_updated')
233 234 else
234 235 # Keep unsaved issue ids to display them in flash error
235 236 unsaved_issue_ids << issue.id
236 237 end
237 238 end
238 239 if unsaved_issue_ids.empty?
239 240 flash[:notice] = l(:notice_successful_update) unless @issues.empty?
240 241 else
241 242 flash[:error] = l(:notice_failed_to_save_issues, unsaved_issue_ids.size, @issues.size, '#' + unsaved_issue_ids.join(', #'))
242 243 end
243 244 redirect_to :controller => 'issues', :action => 'index', :project_id => @project
244 245 return
245 246 end
246 247 # Find potential statuses the user could be allowed to switch issues to
247 248 @available_statuses = Workflow.find(:all, :include => :new_status,
248 249 :conditions => {:role_id => current_role.id}).collect(&:new_status).compact.uniq
249 250 end
250 251
251 252 def move
252 253 @allowed_projects = []
253 254 # find projects to which the user is allowed to move the issue
254 255 if User.current.admin?
255 256 # admin is allowed to move issues to any active (visible) project
256 257 @allowed_projects = Project.find(:all, :conditions => Project.visible_by(User.current), :order => 'name')
257 258 else
258 259 User.current.memberships.each {|m| @allowed_projects << m.project if m.role.allowed_to?(:move_issues)}
259 260 end
260 261 @target_project = @allowed_projects.detect {|p| p.id.to_s == params[:new_project_id]} if params[:new_project_id]
261 262 @target_project ||= @project
262 263 @trackers = @target_project.trackers
263 264 if request.post?
264 265 new_tracker = params[:new_tracker_id].blank? ? nil : @target_project.trackers.find_by_id(params[:new_tracker_id])
265 266 unsaved_issue_ids = []
266 267 @issues.each do |issue|
267 268 unsaved_issue_ids << issue.id unless issue.move_to(@target_project, new_tracker)
268 269 end
269 270 if unsaved_issue_ids.empty?
270 271 flash[:notice] = l(:notice_successful_update) unless @issues.empty?
271 272 else
272 273 flash[:error] = l(:notice_failed_to_save_issues, unsaved_issue_ids.size, @issues.size, '#' + unsaved_issue_ids.join(', #'))
273 274 end
274 275 redirect_to :controller => 'issues', :action => 'index', :project_id => @project
275 276 return
276 277 end
277 278 render :layout => false if request.xhr?
278 279 end
279 280
280 281 def destroy
281 282 @hours = TimeEntry.sum(:hours, :conditions => ['issue_id IN (?)', @issues]).to_f
282 283 if @hours > 0
283 284 case params[:todo]
284 285 when 'destroy'
285 286 # nothing to do
286 287 when 'nullify'
287 288 TimeEntry.update_all('issue_id = NULL', ['issue_id IN (?)', @issues])
288 289 when 'reassign'
289 290 reassign_to = @project.issues.find_by_id(params[:reassign_to_id])
290 291 if reassign_to.nil?
291 292 flash.now[:error] = l(:error_issue_not_found_in_project)
292 293 return
293 294 else
294 295 TimeEntry.update_all("issue_id = #{reassign_to.id}", ['issue_id IN (?)', @issues])
295 296 end
296 297 else
297 298 # display the destroy form
298 299 return
299 300 end
300 301 end
301 302 @issues.each(&:destroy)
302 303 redirect_to :action => 'index', :project_id => @project
303 304 end
304 305
305 306 def destroy_attachment
306 307 a = @issue.attachments.find(params[:attachment_id])
307 308 a.destroy
308 309 journal = @issue.init_journal(User.current)
309 310 journal.details << JournalDetail.new(:property => 'attachment',
310 311 :prop_key => a.id,
311 312 :old_value => a.filename)
312 313 journal.save
313 314 redirect_to :action => 'show', :id => @issue
314 315 end
315 316
316 317 def context_menu
317 318 @issues = Issue.find_all_by_id(params[:ids], :include => :project)
318 319 if (@issues.size == 1)
319 320 @issue = @issues.first
320 321 @allowed_statuses = @issue.new_statuses_allowed_to(User.current)
321 322 @assignables = @issue.assignable_users
322 323 @assignables << @issue.assigned_to if @issue.assigned_to && !@assignables.include?(@issue.assigned_to)
323 324 end
324 325 projects = @issues.collect(&:project).compact.uniq
325 326 @project = projects.first if projects.size == 1
326 327
327 328 @can = {:edit => (@project && User.current.allowed_to?(:edit_issues, @project)),
328 329 :update => (@issue && (User.current.allowed_to?(:edit_issues, @project) || (User.current.allowed_to?(:change_status, @project) && !@allowed_statuses.empty?))),
329 330 :move => (@project && User.current.allowed_to?(:move_issues, @project)),
330 331 :copy => (@issue && @project.trackers.include?(@issue.tracker) && User.current.allowed_to?(:add_issues, @project)),
331 332 :delete => (@project && User.current.allowed_to?(:delete_issues, @project))
332 333 }
333 334
334 335 @priorities = Enumeration.get_values('IPRI').reverse
335 336 @statuses = IssueStatus.find(:all, :order => 'position')
336 337 @back = request.env['HTTP_REFERER']
337 338
338 339 render :layout => false
339 340 end
340 341
341 342 def update_form
342 343 @issue = Issue.new(params[:issue])
343 344 render :action => :new, :layout => false
344 345 end
345 346
346 347 def preview
347 348 @issue = @project.issues.find_by_id(params[:id]) unless params[:id].blank?
348 349 @attachements = @issue.attachments if @issue
349 350 @text = params[:notes] || (params[:issue] ? params[:issue][:description] : nil)
350 351 render :partial => 'common/preview'
351 352 end
352 353
353 354 private
354 355 def find_issue
355 356 @issue = Issue.find(params[:id], :include => [:project, :tracker, :status, :author, :priority, :category])
356 357 @project = @issue.project
357 358 rescue ActiveRecord::RecordNotFound
358 359 render_404
359 360 end
360 361
361 362 # Filter for bulk operations
362 363 def find_issues
363 364 @issues = Issue.find_all_by_id(params[:id] || params[:ids])
364 365 raise ActiveRecord::RecordNotFound if @issues.empty?
365 366 projects = @issues.collect(&:project).compact.uniq
366 367 if projects.size == 1
367 368 @project = projects.first
368 369 else
369 370 # TODO: let users bulk edit/move/destroy issues from different projects
370 371 render_error 'Can not bulk edit/move/destroy issues from different projects' and return false
371 372 end
372 373 rescue ActiveRecord::RecordNotFound
373 374 render_404
374 375 end
375 376
376 377 def find_project
377 378 @project = Project.find(params[:project_id])
378 379 rescue ActiveRecord::RecordNotFound
379 380 render_404
380 381 end
381 382
382 383 def find_optional_project
383 384 return true unless params[:project_id]
384 385 @project = Project.find(params[:project_id])
385 386 authorize
386 387 rescue ActiveRecord::RecordNotFound
387 388 render_404
388 389 end
389 390
390 391 # Retrieve query from session or build a new query
391 392 def retrieve_query
392 393 if !params[:query_id].blank?
393 394 cond = "project_id IS NULL"
394 395 cond << " OR project_id = #{@project.id}" if @project
395 396 @query = Query.find(params[:query_id], :conditions => cond)
396 397 @query.project = @project
397 398 session[:query] = {:id => @query.id, :project_id => @query.project_id}
398 399 else
399 400 if params[:set_filter] || session[:query].nil? || session[:query][:project_id] != (@project ? @project.id : nil)
400 401 # Give it a name, required to be valid
401 402 @query = Query.new(:name => "_")
402 403 @query.project = @project
403 404 if params[:fields] and params[:fields].is_a? Array
404 405 params[:fields].each do |field|
405 406 @query.add_filter(field, params[:operators][field], params[:values][field])
406 407 end
407 408 else
408 409 @query.available_filters.keys.each do |field|
409 410 @query.add_short_filter(field, params[field]) if params[field]
410 411 end
411 412 end
412 413 session[:query] = {:project_id => @query.project_id, :filters => @query.filters}
413 414 else
414 415 @query = Query.find_by_id(session[:query][:id]) if session[:query][:id]
415 416 @query ||= Query.new(:name => "_", :project => @project, :filters => session[:query][:filters])
416 417 @query.project = @project
417 418 end
418 419 end
419 420 end
420 421 end
@@ -1,131 +1,131
1 1 # redMine - project management software
2 2 # Copyright (C) 2006-2007 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 class Changeset < ActiveRecord::Base
19 19 belongs_to :repository
20 20 has_many :changes, :dependent => :delete_all
21 21 has_and_belongs_to_many :issues
22 22
23 23 acts_as_event :title => Proc.new {|o| "#{l(:label_revision)} #{o.revision}" + (o.comments.blank? ? '' : (': ' + o.comments))},
24 24 :description => :comments,
25 25 :datetime => :committed_on,
26 26 :author => :committer,
27 27 :url => Proc.new {|o| {:controller => 'repositories', :action => 'revision', :id => o.repository.project_id, :rev => o.revision}}
28 28
29 29 acts_as_searchable :columns => 'comments',
30 30 :include => :repository,
31 31 :project_key => "#{Repository.table_name}.project_id",
32 32 :date_column => 'committed_on'
33 33
34 34 validates_presence_of :repository_id, :revision, :committed_on, :commit_date
35 35 validates_uniqueness_of :revision, :scope => :repository_id
36 36 validates_uniqueness_of :scmid, :scope => :repository_id, :allow_nil => true
37 37
38 38 def revision=(r)
39 39 write_attribute :revision, (r.nil? ? nil : r.to_s)
40 40 end
41 41
42 42 def comments=(comment)
43 43 write_attribute(:comments, comment.strip)
44 44 end
45 45
46 46 def committed_on=(date)
47 47 self.commit_date = date
48 48 super
49 49 end
50 50
51 51 def project
52 52 repository.project
53 53 end
54 54
55 55 def after_create
56 56 scan_comment_for_issue_ids
57 57 end
58 58 require 'pp'
59 59
60 60 def scan_comment_for_issue_ids
61 61 return if comments.blank?
62 62 # keywords used to reference issues
63 63 ref_keywords = Setting.commit_ref_keywords.downcase.split(",").collect(&:strip)
64 64 # keywords used to fix issues
65 65 fix_keywords = Setting.commit_fix_keywords.downcase.split(",").collect(&:strip)
66 66 # status and optional done ratio applied
67 67 fix_status = IssueStatus.find_by_id(Setting.commit_fix_status_id)
68 68 done_ratio = Setting.commit_fix_done_ratio.blank? ? nil : Setting.commit_fix_done_ratio.to_i
69 69
70 70 kw_regexp = (ref_keywords + fix_keywords).collect{|kw| Regexp.escape(kw)}.join("|")
71 71 return if kw_regexp.blank?
72 72
73 73 referenced_issues = []
74 74
75 75 if ref_keywords.delete('*')
76 76 # find any issue ID in the comments
77 77 target_issue_ids = []
78 comments.scan(%r{([\s\(,-^])#(\d+)(?=[[:punct:]]|\s|<|$)}).each { |m| target_issue_ids << m[1] }
78 comments.scan(%r{([\s\(,-]|^)#(\d+)(?=[[:punct:]]|\s|<|$)}).each { |m| target_issue_ids << m[1] }
79 79 referenced_issues += repository.project.issues.find_all_by_id(target_issue_ids)
80 80 end
81 81
82 82 comments.scan(Regexp.new("(#{kw_regexp})[\s:]+(([\s,;&]*#?\\d+)+)", Regexp::IGNORECASE)).each do |match|
83 83 action = match[0]
84 84 target_issue_ids = match[1].scan(/\d+/)
85 85 target_issues = repository.project.issues.find_all_by_id(target_issue_ids)
86 86 if fix_status && fix_keywords.include?(action.downcase)
87 87 # update status of issues
88 88 logger.debug "Issues fixed by changeset #{self.revision}: #{issue_ids.join(', ')}." if logger && logger.debug?
89 89 target_issues.each do |issue|
90 90 # the issue may have been updated by the closure of another one (eg. duplicate)
91 91 issue.reload
92 92 # don't change the status is the issue is closed
93 93 next if issue.status.is_closed?
94 94 user = committer_user || User.anonymous
95 95 csettext = "r#{self.revision}"
96 96 if self.scmid && (! (csettext =~ /^r[0-9]+$/))
97 97 csettext = "commit:\"#{self.scmid}\""
98 98 end
99 99 journal = issue.init_journal(user, l(:text_status_changed_by_changeset, csettext))
100 100 issue.status = fix_status
101 101 issue.done_ratio = done_ratio if done_ratio
102 102 issue.save
103 103 Mailer.deliver_issue_edit(journal) if Setting.notified_events.include?('issue_updated')
104 104 end
105 105 end
106 106 referenced_issues += target_issues
107 107 end
108 108
109 109 self.issues = referenced_issues.uniq
110 110 end
111 111
112 112 # Returns the Redmine User corresponding to the committer
113 113 def committer_user
114 114 if committer && committer.strip =~ /^([^<]+)(<(.*)>)?$/
115 115 username, email = $1.strip, $3
116 116 u = User.find_by_login(username)
117 117 u ||= User.find_by_mail(email) unless email.blank?
118 118 u
119 119 end
120 120 end
121 121
122 122 # Returns the previous changeset
123 123 def previous
124 124 @previous ||= Changeset.find(:first, :conditions => ['id < ? AND repository_id = ?', self.id, self.repository_id], :order => 'id DESC')
125 125 end
126 126
127 127 # Returns the next changeset
128 128 def next
129 129 @next ||= Changeset.find(:first, :conditions => ['id > ? AND repository_id = ?', self.id, self.repository_id], :order => 'id ASC')
130 130 end
131 131 end
@@ -1,369 +1,369
1 1 # redMine - project management software
2 2 # Copyright (C) 2006-2007 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 class QueryColumn
19 19 attr_accessor :name, :sortable, :default_order
20 20 include GLoc
21 21
22 22 def initialize(name, options={})
23 23 self.name = name
24 24 self.sortable = options[:sortable]
25 25 self.default_order = options[:default_order]
26 26 end
27 27
28 28 def caption
29 29 set_language_if_valid(User.current.language)
30 30 l("field_#{name}")
31 31 end
32 32 end
33 33
34 34 class QueryCustomFieldColumn < QueryColumn
35 35
36 36 def initialize(custom_field)
37 37 self.name = "cf_#{custom_field.id}".to_sym
38 38 self.sortable = false
39 39 @cf = custom_field
40 40 end
41 41
42 42 def caption
43 43 @cf.name
44 44 end
45 45
46 46 def custom_field
47 47 @cf
48 48 end
49 49 end
50 50
51 51 class Query < ActiveRecord::Base
52 52 belongs_to :project
53 53 belongs_to :user
54 54 serialize :filters
55 55 serialize :column_names
56 56
57 57 attr_protected :project_id, :user_id
58 58
59 59 validates_presence_of :name, :on => :save
60 60 validates_length_of :name, :maximum => 255
61 61
62 62 @@operators = { "=" => :label_equals,
63 63 "!" => :label_not_equals,
64 64 "o" => :label_open_issues,
65 65 "c" => :label_closed_issues,
66 66 "!*" => :label_none,
67 67 "*" => :label_all,
68 68 ">=" => '>=',
69 69 "<=" => '<=',
70 70 "<t+" => :label_in_less_than,
71 71 ">t+" => :label_in_more_than,
72 72 "t+" => :label_in,
73 73 "t" => :label_today,
74 74 "w" => :label_this_week,
75 75 ">t-" => :label_less_than_ago,
76 76 "<t-" => :label_more_than_ago,
77 77 "t-" => :label_ago,
78 78 "~" => :label_contains,
79 79 "!~" => :label_not_contains }
80 80
81 81 cattr_reader :operators
82 82
83 83 @@operators_by_filter_type = { :list => [ "=", "!" ],
84 84 :list_status => [ "o", "=", "!", "c", "*" ],
85 85 :list_optional => [ "=", "!", "!*", "*" ],
86 86 :list_subprojects => [ "*", "!*", "=" ],
87 87 :date => [ "<t+", ">t+", "t+", "t", "w", ">t-", "<t-", "t-" ],
88 88 :date_past => [ ">t-", "<t-", "t-", "t", "w" ],
89 89 :string => [ "=", "~", "!", "!~" ],
90 90 :text => [ "~", "!~" ],
91 91 :integer => [ "=", ">=", "<=" ] }
92 92
93 93 cattr_reader :operators_by_filter_type
94 94
95 95 @@available_columns = [
96 96 QueryColumn.new(:tracker, :sortable => "#{Tracker.table_name}.position"),
97 97 QueryColumn.new(:status, :sortable => "#{IssueStatus.table_name}.position"),
98 98 QueryColumn.new(:priority, :sortable => "#{Enumeration.table_name}.position", :default_order => 'desc'),
99 99 QueryColumn.new(:subject, :sortable => "#{Issue.table_name}.subject"),
100 100 QueryColumn.new(:author),
101 101 QueryColumn.new(:assigned_to, :sortable => "#{User.table_name}.lastname"),
102 102 QueryColumn.new(:updated_on, :sortable => "#{Issue.table_name}.updated_on", :default_order => 'desc'),
103 103 QueryColumn.new(:category, :sortable => "#{IssueCategory.table_name}.name"),
104 104 QueryColumn.new(:fixed_version, :sortable => "#{Version.table_name}.effective_date", :default_order => 'desc'),
105 105 QueryColumn.new(:start_date, :sortable => "#{Issue.table_name}.start_date"),
106 106 QueryColumn.new(:due_date, :sortable => "#{Issue.table_name}.due_date"),
107 107 QueryColumn.new(:estimated_hours, :sortable => "#{Issue.table_name}.estimated_hours"),
108 108 QueryColumn.new(:done_ratio, :sortable => "#{Issue.table_name}.done_ratio"),
109 109 QueryColumn.new(:created_on, :sortable => "#{Issue.table_name}.created_on", :default_order => 'desc'),
110 110 ]
111 111 cattr_reader :available_columns
112 112
113 113 def initialize(attributes = nil)
114 114 super attributes
115 115 self.filters ||= { 'status_id' => {:operator => "o", :values => [""]} }
116 116 set_language_if_valid(User.current.language)
117 117 end
118 118
119 119 def after_initialize
120 120 # Store the fact that project is nil (used in #editable_by?)
121 121 @is_for_all = project.nil?
122 122 end
123 123
124 124 def validate
125 125 filters.each_key do |field|
126 126 errors.add label_for(field), :activerecord_error_blank unless
127 127 # filter requires one or more values
128 128 (values_for(field) and !values_for(field).first.blank?) or
129 129 # filter doesn't require any value
130 130 ["o", "c", "!*", "*", "t", "w"].include? operator_for(field)
131 131 end if filters
132 132 end
133 133
134 134 def editable_by?(user)
135 135 return false unless user
136 136 # Admin can edit them all and regular users can edit their private queries
137 137 return true if user.admin? || (!is_public && self.user_id == user.id)
138 138 # Members can not edit public queries that are for all project (only admin is allowed to)
139 139 is_public && !@is_for_all && user.allowed_to?(:manage_public_queries, project)
140 140 end
141 141
142 142 def available_filters
143 143 return @available_filters if @available_filters
144 144
145 145 trackers = project.nil? ? Tracker.find(:all, :order => 'position') : project.rolled_up_trackers
146 146
147 147 @available_filters = { "status_id" => { :type => :list_status, :order => 1, :values => IssueStatus.find(:all, :order => 'position').collect{|s| [s.name, s.id.to_s] } },
148 148 "tracker_id" => { :type => :list, :order => 2, :values => trackers.collect{|s| [s.name, s.id.to_s] } },
149 149 "priority_id" => { :type => :list, :order => 3, :values => Enumeration.find(:all, :conditions => ['opt=?','IPRI'], :order => 'position').collect{|s| [s.name, s.id.to_s] } },
150 150 "subject" => { :type => :text, :order => 8 },
151 151 "created_on" => { :type => :date_past, :order => 9 },
152 152 "updated_on" => { :type => :date_past, :order => 10 },
153 153 "start_date" => { :type => :date, :order => 11 },
154 154 "due_date" => { :type => :date, :order => 12 },
155 155 "done_ratio" => { :type => :integer, :order => 13 }}
156 156
157 157 user_values = []
158 158 user_values << ["<< #{l(:label_me)} >>", "me"] if User.current.logged?
159 159 if project
160 160 user_values += project.users.sort.collect{|s| [s.name, s.id.to_s] }
161 161 else
162 162 # members of the user's projects
163 163 user_values += User.current.projects.collect(&:users).flatten.uniq.sort.collect{|s| [s.name, s.id.to_s] }
164 164 end
165 165 @available_filters["assigned_to_id"] = { :type => :list_optional, :order => 4, :values => user_values } unless user_values.empty?
166 166 @available_filters["author_id"] = { :type => :list, :order => 5, :values => user_values } unless user_values.empty?
167 167
168 168 if project
169 169 # project specific filters
170 170 @available_filters["category_id"] = { :type => :list_optional, :order => 6, :values => @project.issue_categories.collect{|s| [s.name, s.id.to_s] } }
171 171 @available_filters["fixed_version_id"] = { :type => :list_optional, :order => 7, :values => @project.versions.sort.collect{|s| [s.name, s.id.to_s] } }
172 172 unless @project.active_children.empty?
173 173 @available_filters["subproject_id"] = { :type => :list_subprojects, :order => 13, :values => @project.active_children.collect{|s| [s.name, s.id.to_s] } }
174 174 end
175 175 @project.all_custom_fields.select(&:is_filter?).each do |field|
176 176 case field.field_format
177 177 when "text"
178 178 options = { :type => :text, :order => 20 }
179 179 when "list"
180 180 options = { :type => :list_optional, :values => field.possible_values, :order => 20}
181 181 when "date"
182 182 options = { :type => :date, :order => 20 }
183 183 when "bool"
184 184 options = { :type => :list, :values => [[l(:general_text_yes), "1"], [l(:general_text_no), "0"]], :order => 20 }
185 185 else
186 186 options = { :type => :string, :order => 20 }
187 187 end
188 188 @available_filters["cf_#{field.id}"] = options.merge({ :name => field.name })
189 189 end
190 190 # remove category filter if no category defined
191 191 @available_filters.delete "category_id" if @available_filters["category_id"][:values].empty?
192 192 end
193 193 @available_filters
194 194 end
195 195
196 196 def add_filter(field, operator, values)
197 197 # values must be an array
198 198 return unless values and values.is_a? Array # and !values.first.empty?
199 199 # check if field is defined as an available filter
200 200 if available_filters.has_key? field
201 201 filter_options = available_filters[field]
202 202 # check if operator is allowed for that filter
203 203 #if @@operators_by_filter_type[filter_options[:type]].include? operator
204 204 # allowed_values = values & ([""] + (filter_options[:values] || []).collect {|val| val[1]})
205 205 # filters[field] = {:operator => operator, :values => allowed_values } if (allowed_values.first and !allowed_values.first.empty?) or ["o", "c", "!*", "*", "t"].include? operator
206 206 #end
207 207 filters[field] = {:operator => operator, :values => values }
208 208 end
209 209 end
210 210
211 211 def add_short_filter(field, expression)
212 212 return unless expression
213 213 parms = expression.scan(/^(o|c|\!|\*)?(.*)$/).first
214 214 add_filter field, (parms[0] || "="), [parms[1] || ""]
215 215 end
216 216
217 217 def has_filter?(field)
218 218 filters and filters[field]
219 219 end
220 220
221 221 def operator_for(field)
222 222 has_filter?(field) ? filters[field][:operator] : nil
223 223 end
224 224
225 225 def values_for(field)
226 226 has_filter?(field) ? filters[field][:values] : nil
227 227 end
228 228
229 229 def label_for(field)
230 label = @available_filters[field][:name] if @available_filters.has_key?(field)
230 label = available_filters[field][:name] if available_filters.has_key?(field)
231 231 label ||= field.gsub(/\_id$/, "")
232 232 end
233 233
234 234 def available_columns
235 235 return @available_columns if @available_columns
236 236 @available_columns = Query.available_columns
237 237 @available_columns += (project ?
238 238 project.all_custom_fields :
239 239 IssueCustomField.find(:all, :conditions => {:is_for_all => true})
240 240 ).collect {|cf| QueryCustomFieldColumn.new(cf) }
241 241 end
242 242
243 243 def columns
244 244 if has_default_columns?
245 245 available_columns.select {|c| Setting.issue_list_default_columns.include?(c.name.to_s) }
246 246 else
247 247 # preserve the column_names order
248 248 column_names.collect {|name| available_columns.find {|col| col.name == name}}.compact
249 249 end
250 250 end
251 251
252 252 def column_names=(names)
253 253 names = names.select {|n| n.is_a?(Symbol) || !n.blank? } if names
254 254 names = names.collect {|n| n.is_a?(Symbol) ? n : n.to_sym } if names
255 255 write_attribute(:column_names, names)
256 256 end
257 257
258 258 def has_column?(column)
259 259 column_names && column_names.include?(column.name)
260 260 end
261 261
262 262 def has_default_columns?
263 263 column_names.nil? || column_names.empty?
264 264 end
265 265
266 266 def statement
267 267 # project/subprojects clause
268 268 project_clauses = []
269 269 if project && !@project.active_children.empty?
270 270 ids = [project.id]
271 271 if has_filter?("subproject_id")
272 272 case operator_for("subproject_id")
273 273 when '='
274 274 # include the selected subprojects
275 275 ids += values_for("subproject_id").each(&:to_i)
276 276 when '!*'
277 277 # main project only
278 278 else
279 279 # all subprojects
280 280 ids += project.child_ids
281 281 end
282 282 elsif Setting.display_subprojects_issues?
283 283 ids += project.child_ids
284 284 end
285 285 project_clauses << "#{Issue.table_name}.project_id IN (%s)" % ids.join(',')
286 286 elsif project
287 287 project_clauses << "#{Issue.table_name}.project_id = %d" % project.id
288 288 end
289 289 project_clauses << Project.visible_by(User.current)
290 290
291 291 # filters clauses
292 292 filters_clauses = []
293 293 filters.each_key do |field|
294 294 next if field == "subproject_id"
295 295 v = values_for(field).clone
296 296 next unless v and !v.empty?
297 297
298 298 sql = ''
299 299 is_custom_filter = false
300 300 if field =~ /^cf_(\d+)$/
301 301 # custom field
302 302 db_table = CustomValue.table_name
303 303 db_field = 'value'
304 304 is_custom_filter = true
305 305 sql << "#{Issue.table_name}.id IN (SELECT #{Issue.table_name}.id FROM #{Issue.table_name} LEFT OUTER JOIN #{db_table} ON #{db_table}.customized_type='Issue' AND #{db_table}.customized_id=#{Issue.table_name}.id AND #{db_table}.custom_field_id=#{$1} WHERE "
306 306 else
307 307 # regular field
308 308 db_table = Issue.table_name
309 309 db_field = field
310 310 sql << '('
311 311 end
312 312
313 313 # "me" value subsitution
314 314 if %w(assigned_to_id author_id).include?(field)
315 315 v.push(User.current.logged? ? User.current.id.to_s : "0") if v.delete("me")
316 316 end
317 317
318 318 case operator_for field
319 319 when "="
320 320 sql = sql + "#{db_table}.#{db_field} IN (" + v.collect{|val| "'#{connection.quote_string(val)}'"}.join(",") + ")"
321 321 when "!"
322 322 sql = sql + "(#{db_table}.#{db_field} IS NULL OR #{db_table}.#{db_field} NOT IN (" + v.collect{|val| "'#{connection.quote_string(val)}'"}.join(",") + "))"
323 323 when "!*"
324 324 sql = sql + "#{db_table}.#{db_field} IS NULL"
325 325 sql << " OR #{db_table}.#{db_field} = ''" if is_custom_filter
326 326 when "*"
327 327 sql = sql + "#{db_table}.#{db_field} IS NOT NULL"
328 328 sql << " AND #{db_table}.#{db_field} <> ''" if is_custom_filter
329 329 when ">="
330 330 sql = sql + "#{db_table}.#{db_field} >= #{v.first.to_i}"
331 331 when "<="
332 332 sql = sql + "#{db_table}.#{db_field} <= #{v.first.to_i}"
333 333 when "o"
334 334 sql = sql + "#{IssueStatus.table_name}.is_closed=#{connection.quoted_false}" if field == "status_id"
335 335 when "c"
336 336 sql = sql + "#{IssueStatus.table_name}.is_closed=#{connection.quoted_true}" if field == "status_id"
337 337 when ">t-"
338 338 sql = sql + "#{db_table}.#{db_field} BETWEEN '%s' AND '%s'" % [connection.quoted_date((Date.today - v.first.to_i).to_time), connection.quoted_date((Date.today + 1).to_time)]
339 339 when "<t-"
340 340 sql = sql + "#{db_table}.#{db_field} <= '%s'" % connection.quoted_date((Date.today - v.first.to_i).to_time)
341 341 when "t-"
342 342 sql = sql + "#{db_table}.#{db_field} BETWEEN '%s' AND '%s'" % [connection.quoted_date((Date.today - v.first.to_i).to_time), connection.quoted_date((Date.today - v.first.to_i + 1).to_time)]
343 343 when ">t+"
344 344 sql = sql + "#{db_table}.#{db_field} >= '%s'" % connection.quoted_date((Date.today + v.first.to_i).to_time)
345 345 when "<t+"
346 346 sql = sql + "#{db_table}.#{db_field} BETWEEN '%s' AND '%s'" % [connection.quoted_date(Date.today.to_time), connection.quoted_date((Date.today + v.first.to_i + 1).to_time)]
347 347 when "t+"
348 348 sql = sql + "#{db_table}.#{db_field} BETWEEN '%s' AND '%s'" % [connection.quoted_date((Date.today + v.first.to_i).to_time), connection.quoted_date((Date.today + v.first.to_i + 1).to_time)]
349 349 when "t"
350 350 sql = sql + "#{db_table}.#{db_field} BETWEEN '%s' AND '%s'" % [connection.quoted_date(Date.today.to_time), connection.quoted_date((Date.today+1).to_time)]
351 351 when "w"
352 352 from = l(:general_first_day_of_week) == '7' ?
353 353 # week starts on sunday
354 354 ((Date.today.cwday == 7) ? Time.now.at_beginning_of_day : Time.now.at_beginning_of_week - 1.day) :
355 355 # week starts on monday (Rails default)
356 356 Time.now.at_beginning_of_week
357 357 sql = sql + "#{db_table}.#{db_field} BETWEEN '%s' AND '%s'" % [connection.quoted_date(from), connection.quoted_date(from + 7.days)]
358 358 when "~"
359 359 sql = sql + "#{db_table}.#{db_field} LIKE '%#{connection.quote_string(v.first)}%'"
360 360 when "!~"
361 361 sql = sql + "#{db_table}.#{db_field} NOT LIKE '%#{connection.quote_string(v.first)}%'"
362 362 end
363 363 sql << ')'
364 364 filters_clauses << sql
365 365 end if filters and valid?
366 366
367 367 (project_clauses + filters_clauses).join(' AND ')
368 368 end
369 369 end
@@ -1,65 +1,71
1 1 # redMine - project management software
2 2 # Copyright (C) 2006-2008 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 class TimeEntry < ActiveRecord::Base
19 19 # could have used polymorphic association
20 20 # project association here allows easy loading of time entries at project level with one database trip
21 21 belongs_to :project
22 22 belongs_to :issue
23 23 belongs_to :user
24 24 belongs_to :activity, :class_name => 'Enumeration', :foreign_key => :activity_id
25 25
26 26 attr_protected :project_id, :user_id, :tyear, :tmonth, :tweek
27 27
28 28 validates_presence_of :user_id, :activity_id, :project_id, :hours, :spent_on
29 29 validates_numericality_of :hours, :allow_nil => true
30 30 validates_length_of :comments, :maximum => 255
31 31
32 def after_initialize
33 if new_record?
34 self.activity ||= Enumeration.default('ACTI')
35 end
36 end
37
32 38 def before_validation
33 39 self.project = issue.project if issue && project.nil?
34 40 end
35 41
36 42 def validate
37 43 errors.add :hours, :activerecord_error_invalid if hours && (hours < 0 || hours >= 1000)
38 44 errors.add :project_id, :activerecord_error_invalid if project.nil?
39 45 errors.add :issue_id, :activerecord_error_invalid if (issue_id && !issue) || (issue && project!=issue.project)
40 46 end
41 47
42 48 def hours=(h)
43 49 write_attribute :hours, (h.is_a?(String) ? h.to_hours : h)
44 50 end
45 51
46 52 # tyear, tmonth, tweek assigned where setting spent_on attributes
47 53 # these attributes make time aggregations easier
48 54 def spent_on=(date)
49 55 super
50 56 self.tyear = spent_on ? spent_on.year : nil
51 57 self.tmonth = spent_on ? spent_on.month : nil
52 58 self.tweek = spent_on ? Date.civil(spent_on.year, spent_on.month, spent_on.day).cweek : nil
53 59 end
54 60
55 61 # Returns true if the time entry can be edited by usr, otherwise false
56 62 def editable_by?(usr)
57 63 (usr == user && usr.allowed_to?(:edit_own_time_entries, project)) || usr.allowed_to?(:edit_time_entries, project)
58 64 end
59 65
60 66 def self.visible_by(usr)
61 67 with_scope(:find => { :conditions => Project.allowed_to_condition(usr, :view_time_entries) }) do
62 68 yield
63 69 end
64 70 end
65 71 end
@@ -1,54 +1,54
1 1 <ul>
2 2 <% if !@issue.nil? -%>
3 3 <li><%= context_menu_link l(:button_edit), {:controller => 'issues', :action => 'edit', :id => @issue},
4 4 :class => 'icon-edit', :disabled => !@can[:edit] %></li>
5 5 <li class="folder">
6 6 <a href="#" class="submenu" onclick="return false;"><%= l(:field_status) %></a>
7 7 <ul>
8 8 <% @statuses.each do |s| -%>
9 <li><%= context_menu_link s.name, {:controller => 'issues', :action => 'edit', :id => @issue, :issue => {:status_id => s}},
9 <li><%= context_menu_link s.name, {:controller => 'issues', :action => 'edit', :id => @issue, :issue => {:status_id => s}, :back_to => @back}, :method => :post,
10 10 :selected => (s == @issue.status), :disabled => !(@can[:update] && @allowed_statuses.include?(s)) %></li>
11 11 <% end -%>
12 12 </ul>
13 13 </li>
14 14 <li class="folder">
15 15 <a href="#" class="submenu"><%= l(:field_priority) %></a>
16 16 <ul>
17 17 <% @priorities.each do |p| -%>
18 18 <li><%= context_menu_link p.name, {:controller => 'issues', :action => 'edit', :id => @issue, 'issue[priority_id]' => p, :back_to => @back}, :method => :post,
19 19 :selected => (p == @issue.priority), :disabled => !@can[:edit] %></li>
20 20 <% end -%>
21 21 </ul>
22 22 </li>
23 23 <li class="folder">
24 24 <a href="#" class="submenu"><%= l(:field_assigned_to) %></a>
25 25 <ul>
26 26 <% @assignables.each do |u| -%>
27 27 <li><%= context_menu_link u.name, {:controller => 'issues', :action => 'edit', :id => @issue, 'issue[assigned_to_id]' => u, :back_to => @back}, :method => :post,
28 28 :selected => (u == @issue.assigned_to), :disabled => !@can[:update] %></li>
29 29 <% end -%>
30 30 <li><%= context_menu_link l(:label_nobody), {:controller => 'issues', :action => 'edit', :id => @issue, 'issue[assigned_to_id]' => '', :back_to => @back}, :method => :post,
31 31 :selected => @issue.assigned_to.nil?, :disabled => !@can[:update] %></li>
32 32 </ul>
33 33 </li>
34 34 <li class="folder">
35 35 <a href="#" class="submenu"><%= l(:field_done_ratio) %></a>
36 36 <ul>
37 37 <% (0..10).map{|x|x*10}.each do |p| -%>
38 38 <li><%= context_menu_link "#{p}%", {:controller => 'issues', :action => 'edit', :id => @issue, 'issue[done_ratio]' => p, :back_to => @back}, :method => :post,
39 39 :selected => (p == @issue.done_ratio), :disabled => !@can[:edit] %></li>
40 40 <% end -%>
41 41 </ul>
42 42 </li>
43 43 <li><%= context_menu_link l(:button_copy), {:controller => 'issues', :action => 'new', :project_id => @project, :copy_from => @issue},
44 44 :class => 'icon-copy', :disabled => !@can[:copy] %></li>
45 45 <% else -%>
46 46 <li><%= context_menu_link l(:button_edit), {:controller => 'issues', :action => 'bulk_edit', :ids => @issues.collect(&:id)},
47 47 :class => 'icon-edit', :disabled => !@can[:edit] %></li>
48 48 <% end -%>
49 49
50 50 <li><%= context_menu_link l(:button_move), {:controller => 'issues', :action => 'move', :ids => @issues.collect(&:id)},
51 51 :class => 'icon-move', :disabled => !@can[:move] %></li>
52 52 <li><%= context_menu_link l(:button_delete), {:controller => 'issues', :action => 'destroy', :ids => @issues.collect(&:id)},
53 53 :method => :post, :confirm => l(:text_issues_destroy_confirmation), :class => 'icon-del', :disabled => !@can[:delete] %></li>
54 54 </ul>
@@ -1,50 +1,50
1 1 <h2><%=l(:label_roadmap)%></h2>
2 2
3 3 <% if @versions.empty? %>
4 4 <p class="nodata"><%= l(:label_no_data) %></p>
5 5 <% else %>
6 6 <div id="roadmap">
7 7 <% @versions.each do |version| %>
8 8 <%= tag 'a', :name => version.name %>
9 9 <h3 class="icon22 icon22-package"><%= link_to h(version.name), :controller => 'versions', :action => 'show', :id => version %></h3>
10 10 <%= render :partial => 'versions/overview', :locals => {:version => version} %>
11 11 <%= render(:partial => "wiki/content", :locals => {:content => version.wiki_page.content}) if version.wiki_page %>
12 12
13 13 <% issues = version.fixed_issues.find(:all,
14 14 :include => [:status, :tracker],
15 15 :conditions => ["tracker_id in (#{@selected_tracker_ids.join(',')})"],
16 16 :order => "#{Tracker.table_name}.position, #{Issue.table_name}.id") unless @selected_tracker_ids.empty?
17 17 issues ||= []
18 18 %>
19 19 <% if issues.size > 0 %>
20 20 <fieldset class="related-issues"><legend><%= l(:label_related_issues) %></legend>
21 21 <ul>
22 22 <%- issues.each do |issue| -%>
23 23 <li class="issue <%= 'closed' if issue.closed? %>"><%= link_to_issue(issue) %>: <%=h issue.subject %></li>
24 24 <%- end -%>
25 25 </ul>
26 26 </fieldset>
27 27 <% end %>
28 28 <% end %>
29 29 </div>
30 30 <% end %>
31 31
32 32 <% content_for :sidebar do %>
33 33 <% form_tag do %>
34 34 <h3><%= l(:label_roadmap) %></h3>
35 35 <% @trackers.each do |tracker| %>
36 36 <label><%= check_box_tag "tracker_ids[]", tracker.id, (@selected_tracker_ids.include? tracker.id.to_s), :id => nil %>
37 37 <%= tracker.name %></label><br />
38 38 <% end %>
39 39 <br />
40 40 <label for="completed"><%= check_box_tag "completed", 1, params[:completed] %> <%= l(:label_show_completed_versions) %></label>
41 41 <p><%= submit_tag l(:button_apply), :class => 'button-small' %></p>
42 42 <% end %>
43 43
44 44 <h3><%= l(:label_version_plural) %></h3>
45 45 <% @versions.each do |version| %>
46 <%= link_to version.name, :anchor => version.name %><br />
46 <%= link_to version.name, "##{version.name}" %><br />
47 47 <% end %>
48 48 <% end %>
49 49
50 50 <% html_title(l(:label_roadmap)) %>
@@ -1,621 +1,623
1 1 _gloc_rule_default: '|n| n==1 ? "" : "_plural" '
2 2
3 3 actionview_datehelper_select_day_prefix:
4 4 actionview_datehelper_select_month_names: sausis,vasaris,kovas,balandis,gegužė,birželis,liepa,rugpjūtis,rugsėjis,spalis,lapkritis,gruodis
5 5 actionview_datehelper_select_month_names_abbr: Sau,Vas,Kov,Bal,Geg,Brž,Lie,Rgp,Rgs,Spl,Lap,Grd
6 6 actionview_datehelper_select_month_prefix:
7 7 actionview_datehelper_select_year_prefix:
8 8 actionview_datehelper_time_in_words_day: 1 diena
9 9 actionview_datehelper_time_in_words_day_plural: %d dienų
10 10 actionview_datehelper_time_in_words_hour_about: apytiksliai valanda
11 11 actionview_datehelper_time_in_words_hour_about_plural: apie %d valandas
12 12 actionview_datehelper_time_in_words_hour_about_single: apytiksliai valanda
13 13 actionview_datehelper_time_in_words_minute: 1 minutė
14 14 actionview_datehelper_time_in_words_minute_half: pusė minutės
15 15 actionview_datehelper_time_in_words_minute_less_than: mažiau kaip minutė
16 16 actionview_datehelper_time_in_words_minute_plural: %d minutės
17 17 actionview_datehelper_time_in_words_minute_single: 1 minutė
18 18 actionview_datehelper_time_in_words_second_less_than: mažiau kaip sekundė
19 19 actionview_datehelper_time_in_words_second_less_than_plural: mažiau, negu %d sekundės
20 20 actionview_instancetag_blank_option: prašom išrinkti
21 21
22 22 activerecord_error_inclusion: nėra įtrauktas į sąrašą
23 23 activerecord_error_exclusion: yra rezervuota(as)
24 24 activerecord_error_invalid: yra negaliojanti(is)
25 25 activerecord_error_confirmation: neatitinka patvirtinimo
26 26 activerecord_error_accepted: turi būti priimtas
27 27 activerecord_error_empty: negali būti tuščiu
28 28 activerecord_error_blank: negali būti tuščiu
29 29 activerecord_error_too_long: yra per ilgas
30 30 activerecord_error_too_short: yra per trumpas
31 31 activerecord_error_wrong_length: neteisingas ilgis
32 32 activerecord_error_taken: buvo jau paimtas
33 33 activerecord_error_not_a_number: nėra skaičius
34 34 activerecord_error_not_a_date: data nėra galiojanti
35 35 activerecord_error_greater_than_start_date: turi būti didesnė negu pradžios data
36 36 activerecord_error_not_same_project: nepriklauso tam pačiam projektui
37 37 activerecord_error_circular_dependency: Šis ryšys sukurtų ciklinę priklausomybę
38 38
39 39 general_fmt_age: %d m.
40 40 general_fmt_age_plural: %d metų(ai)
41 41 general_fmt_date: %%Y-%%m-%%d
42 42 general_fmt_datetime: %%Y-%%m-%%d %%I:%%M %%p
43 43 general_fmt_datetime_short: %%b %%d, %%I:%%M %%p
44 44 general_fmt_time: %%I:%%M %%p
45 45 general_text_No: 'Ne'
46 46 general_text_Yes: 'Taip'
47 47 general_text_no: 'ne'
48 48 general_text_yes: 'taip'
49 49 general_lang_name: 'Lithuanian (lietuvių)'
50 50 general_csv_separator: ','
51 51 general_csv_encoding: UTF-8
52 52 general_pdf_encoding: UTF-8
53 53 general_day_names: pirmadienis,antradienis,trečiadienis,ketvirtadienis,penktadienis,šeštadienis,sekmadienis
54 54 general_first_day_of_week: '1'
55 55
56 56 notice_account_updated: Paskyra buvo sėkmingai atnaujinta.
57 57 notice_account_invalid_creditentials: Negaliojantis vartotojo vardas ar slaptažodis
58 58 notice_account_password_updated: Slaptažodis buvo sėkmingai atnaujintas.
59 59 notice_account_wrong_password: Neteisingas slaptažodis
60 60 notice_account_register_done: Paskyra buvo sėkmingai sukurta. Kad aktyvintumėte savo paskyrą, paspauskite sąsają, kuri jums buvo siųsta elektroniniu paštu.
61 61 notice_account_unknown_email: Nežinomas vartotojas.
62 62 notice_can_t_change_password: Šis pranešimas naudoja išorinį autentiškumo nustatymo šaltinį. Neįmanoma pakeisti slaptažodį.
63 63 notice_account_lost_email_sent: Į Jūsų pašą išsiūstas laiškas su naujo slaptažodžio pasirinkimo instrukcija.
64 64 notice_account_activated: Jūsų paskyra aktyvuota. Galite prisijungti.
65 65 notice_successful_create: Sėkmingas sukūrimas.
66 66 notice_successful_update: Sėkmingas atnaujinimas.
67 67 notice_successful_delete: Sėkmingas panaikinimas.
68 68 notice_successful_connection: Sėkmingas susijungimas.
69 69 notice_file_not_found: Puslapis, į kurį ketinate įeiti, neegzistuoja arba pašalintas.
70 70 notice_locking_conflict: Duomenys atnaujinti kito vartotojo.
71 71 notice_scm_error: Duomenys ir/ar pakeitimai saugykloje(repozitorojoje) neegzistuoja.
72 72 notice_not_authorized: Jūs neturite teisių gauti prieigą prie šio puslapio.
73 73 notice_email_sent: Laiškas išsiųstas %s
74 74 notice_email_error: Laiško siųntimo metu įvyko klaida (%s)
75 75 notice_feeds_access_key_reseted: Jūsų RSS raktas buvo atnaujintas.
76 76 notice_failed_to_save_issues: "Nepavyko išsaugoti %d problemos(ų) %d pasirinkto: %s."
77 77 notice_no_issue_selected: "Nepasirinkta viena problema! Prašom pažymėti problemą, kurią norite redaguoti."
78 78 notice_account_pending: "Jūsų paskyra buvo sukūrta ir dabar laukiama administratoriaus patvirtinimo."
79 79
80 80 error_scm_not_found: "Duomenys ir/ar pakeitimai saugykloje(repozitorojoje) neegzistuoja."
81 81 error_scm_command_failed: "Įvyko klaida jungiantis prie saugyklos: %s"
82 82
83 83 mail_subject_lost_password: Jūsų %s slaptažodis
84 84 mail_body_lost_password: 'Norėdami pakeisti slaptažodį, spauskite nuorodą:'
85 85 mail_subject_register: '%s paskyros aktyvavymas'
86 86 mail_body_register: 'Norėdami aktyvuoti paskyrą, spauskite nuorodą:'
87 87 mail_body_account_information_external: Jūs galite naudoti Jūsų "%s" paskyrą, norėdami prisijungti.
88 88 mail_body_account_information: Informacija apie Jūsų paskyrą
89 89 mail_subject_account_activation_request: %s paskyros aktyvavimo prašymas
90 90 mail_body_account_activation_request: 'Užsiregistravo naujas vartotojas (%s). Jo paskyra laukia jūsų patvirtinimo:'
91 91
92 92 gui_validation_error: 1 klaida
93 93 gui_validation_error_plural: %d klaidų(os)
94 94
95 95 field_name: Pavadinimas
96 96 field_description: Aprašas
97 97 field_summary: Santrauka
98 98 field_is_required: Reikalaujama
99 99 field_firstname: Vardas
100 100 field_lastname: Pavardė
101 101 field_mail: Email
102 102 field_filename: Byla
103 103 field_filesize: Dydis
104 104 field_downloads: Atsiuntimai
105 105 field_author: Autorius
106 106 field_created_on: Sukūrta
107 107 field_updated_on: Atnaujinta
108 108 field_field_format: Formatas
109 109 field_is_for_all: Visiems projektams
110 110 field_possible_values: Galimos reikšmės
111 111 field_regexp: Pastovi išraiška
112 112 field_min_length: Minimalus ilgis
113 113 field_max_length: Maksimalus ilgis
114 114 field_value: Vertė
115 115 field_category: Kategorija
116 116 field_title: Pavadinimas
117 117 field_project: Projektas
118 118 field_issue: Darbas
119 119 field_status: Būsena
120 120 field_notes: Pastabos
121 121 field_is_closed: Darbas uždarytas
122 122 field_is_default: Numatytoji vertė
123 123 field_tracker: Pėdsekys
124 124 field_subject: Tema
125 125 field_due_date: Užbaigimo data
126 126 field_assigned_to: Paskirtas
127 127 field_priority: Prioritetas
128 128 field_fixed_version: Target version
129 129 field_user: Vartotojas
130 130 field_role: Vaidmuo
131 131 field_homepage: Pagrindinis puslapis
132 132 field_is_public: Viešas
133 133 field_parent: Priklauso projektui
134 134 field_is_in_chlog: Darbai rodomi pokyčių žurnale
135 135 field_is_in_roadmap: Darbai rodomi veiklos grafike
136 136 field_login: Registracijos vardas
137 137 field_mail_notification: Elektroninio pašto pranešimai
138 138 field_admin: Administratorius
139 139 field_last_login_on: Paskutinis ryšys
140 140 field_language: Kalba
141 141 field_effective_date: Data
142 142 field_password: Slaptažodis
143 143 field_new_password: Naujas slaptažodis
144 144 field_password_confirmation: Patvirtinimas
145 145 field_version: Versija
146 146 field_type: Tipas
147 147 field_host: Pagrindinis kompiuteris
148 148 field_port: Jungtis
149 149 field_account: Paskyra
150 150 field_base_dn: Bazinis skiriamasis vardas
151 151 field_attr_login: Registracijos vardo požymis
152 152 field_attr_firstname: Vardo priskiria
153 153 field_attr_lastname: Pavardės priskiria
154 154 field_attr_mail: Elektroninio pašto požymis
155 155 field_onthefly: Vartotojų sukūrimas paskubomis
156 156 field_start_date: Pradėti
157 157 field_done_ratio: %% Atlikta
158 158 field_auth_source: Autentiškumo nustatymo būdas
159 159 field_hide_mail: Paslėpkite mano elektroninio pašto adresą
160 160 field_comments: Komentaras
161 161 field_url: URL
162 162 field_start_page: Pradžios puslapis
163 163 field_subproject: Subprojektas
164 164 field_hours: Valandos
165 165 field_activity: Veikla
166 166 field_spent_on: Data
167 167 field_identifier: Identifikuotojas
168 168 field_is_filter: Panaudotas kaip filtras
169 169 field_issue_to_id: Susijęs darbas
170 170 field_delay: Užlaikymas
171 171 field_assignable: Darbai gali būti paskirti šiam vaidmeniui
172 172 field_redirect_existing_links: Peradresuokite egzistuojančias sąsajas
173 173 field_estimated_hours: Numatyta trukmė
174 174 field_column_names: Skiltys
175 175 field_time_zone: Laiko juosta
176 176 field_searchable: Randamas
177 177 field_default_value: Numatytoji vertė
178 178 setting_app_title: Programos pavadinimas
179 179 setting_app_subtitle: Programos paantraštė
180 180 setting_welcome_text: Pasveikinimas
181 181 setting_default_language: Numatytoji kalba
182 182 setting_login_required: Reikalingas autentiškumo nustatymas
183 183 setting_self_registration: Saviregistracija
184 184 setting_attachment_max_size: Priedo maks. dydis
185 185 setting_issues_export_limit pagal dydį: Darbų eksportavimo riba
186 186 setting_mail_from: Emisijos elektroninio pašto adresas
187 187 setting_bcc_recipients: Akli tikslios kopijos gavėjai (bcc)
188 188 setting_host_name: Pagrindinio kompiuterio vardas
189 189 setting_text_formatting: Teksto apipavidalinimas
190 190 setting_wiki_compression: Wiki istorijos suspaudimas
191 191 setting_feeds_limit: Perdavimo turinio riba
192 192 setting_autofetch_changesets: Automatinis pakeitimų siuntimas
193 193 setting_sys_api_enabled: Įgalinkite WS sandėlio vadybai
194 194 setting_commit_ref_keywords: Nurodymo reikšminiai žodžiai
195 195 setting_commit_fix_keywords: Fiksavimo reikšminiai žodžiai
196 196 setting_autologin: Autoregistracija
197 197 setting_date_format: Datos formatas
198 198 setting_time_format: Laiko formatas
199 199 setting_cross_project_issue_relations: Leisti tarprojektinius darbų ryšius
200 200 setting_issue_list_default_columns: Numatytosios skiltys darbų sąraše
201 201 setting_repositories_encodings: Saugyklos enkodingas
202 202 setting_emails_footer: elektroninio pašto puslapinė poraštė
203 203 setting_protocol: Protokolas
204 204
205 205 label_user: Vartotojas
206 206 label_user_plural: Vartotojai
207 207 label_user_new: Naujas vartotojas
208 208 label_project: Projektas
209 209 label_project_new: Naujas projektas
210 210 label_project_plural: Projektai
211 211 label_project_all: Visi Projektai
212 212 label_project_latest: Paskutiniai projektai
213 213 label_issue: Darbas
214 214 label_issue_new: Naujas darbas
215 215 label_issue_plural: Darbai
216 216 label_issue_view_all: Peržiūrėti visus darbus
217 217 label_issues_by: Darbai pagal %s
218 218 label_document: Dokumentas
219 219 label_document_new: Naujas dokumentas
220 220 label_document_plural: Dokumentai
221 221 label_role: Vaidmuo
222 222 label_role_plural: Vaidmenys
223 223 label_role_new: Naujas vaidmuo
224 224 label_role_and_permissions: Vaidmenys ir leidimai
225 225 label_member: Narys
226 226 label_member_new: Naujas narys
227 227 label_member_plural: Nariai
228 228 label_tracker: Pėdsekys
229 229 label_tracker_plural: Pėdsekiai
230 230 label_tracker_new: Naujas pėdsekys
231 231 label_workflow: Darbų eiga
232 232 label_issue_status: Darbo padėtis
233 233 label_issue_status_plural: Darbų padėtys
234 234 label_issue_status_new: Nauja padėtis
235 235 label_issue_category: Darbo kategorija
236 236 label_issue_category_plural: Darbo kategorijos
237 237 label_issue_category_new: Nauja kategorija
238 238 label_custom_field: Kliento laukas
239 239 label_custom_field_plural: Kliento laukai
240 240 label_custom_field_new: Naujas kliento laukas
241 241 label_enumerations: Išvardinimai
242 242 label_enumeration_new: Nauja vertė
243 243 label_information: Informacija
244 244 label_information_plural: Informacija
245 245 label_please_login: Prašom prisijungti
246 246 label_register: Užsiregistruoti
247 247 label_password_lost: Prarastas slaptažodis
248 248 label_home: Pagrindinis
249 249 label_my_page: Mano puslapis
250 250 label_my_account: Mano paskyra
251 251 label_my_projects: Mano projektai
252 252 label_administration: Administravimas
253 253 label_login: Prisijungti
254 254 label_logout: Atsijungti
255 255 label_help: Pagalba
256 256 label_reported_issues: Pranešti darbai
257 257 label_assigned_to_me_issues: Darbai, priskirti man
258 258 label_last_login: Paskutinis ryšys
259 259 label_last_updates: Paskutinis atnaujinimas
260 260 label_last_updates_plural: %d paskutinis atnaujinimas
261 261 label_registered_on: Užregistruota
262 262 label_activity: Veikla
263 263 label_new: Naujas
264 264 label_logged_as: Prisijungęs kaip
265 265 label_environment: Aplinka
266 266 label_authentication: Autentiškumo nustatymas
267 267 label_auth_source: Autentiškumo nustatymo būdas
268 268 label_auth_source_new: Naujas autentiškumo nustatymo būdas
269 269 label_auth_source_plural: Autentiškumo nustatymo būdai
270 270 label_subproject_plural: Subprojektai
271 271 label_min_max_length: Min - Maks ilgis
272 272 label_list: Sąrašas
273 273 label_date: Data
274 274 label_integer: Sveikasis skaičius
275 275 label_float: Float
276 276 label_boolean: Boolean
277 277 label_string: Tekstas
278 278 label_text: Ilgas tekstas
279 279 label_attribute: Požymis
280 280 label_attribute_plural: Požymiai
281 281 label_download: %d Persiuntimas
282 282 label_download_plural: %d Persiuntimai
283 283 label_no_data: Nėra ką atvaizduoti
284 284 label_change_status: Pakeitimo padėtis
285 285 label_history: Istorija
286 286 label_attachment: Rinkmena
287 287 label_attachment_new: Nauja rinkmena
288 288 label_attachment_delete: Pašalinkite rinkmeną
289 289 label_attachment_plural: Rinkmenos
290 290 label_report: Ataskaita
291 291 label_report_plural: Ataskaitos
292 292 label_news: Žinia
293 293 label_news_new: Pridėkite žinią
294 294 label_news_plural: Žinios
295 295 label_news_latest: Paskutinės naujienos
296 296 label_news_view_all: Peržiūrėti visas žinias
297 297 label_change_log: Pakeitimų žurnalas
298 298 label_settings: Nustatymai
299 299 label_overview: Apžvalga
300 300 label_version: Versija
301 301 label_version_new: Nauja versija
302 302 label_version_plural: Versijos
303 303 label_confirmation: Patvirtinimas
304 304 label_export_to: Eksportuoti į
305 305 label_read: Skaitykite...
306 306 label_public_projects: Vieši projektai
307 307 label_open_issues: atidaryta
308 308 label_open_issues_plural: atidarytos
309 309 label_closed_issues: uždaryta
310 310 label_closed_issues_plural: uždarytos
311 311 label_total: Bendra suma
312 312 label_permissions: Leidimai
313 313 label_current_status: Einamoji padėtis
314 314 label_new_statuses_allowed: Naujos padėtys galimos
315 315 label_all: visi
316 316 label_none: niekas
317 317 label_nobody: niekas
318 318 label_next: Kitas
319 319 label_previous: Ankstesnis
320 320 label_used_by: Naudotas
321 321 label_details: Detalės
322 322 label_add_note: Pridėkite pastabą
323 323 label_per_page: Per puslapį
324 324 label_calendar: Kalendorius
325 325 label_months_from: mėnesiai nuo
326 326 label_gantt: Gantt
327 327 label_internal: Vidinis
328 328 label_last_changes: paskutiniai %d, pokyčiai
329 329 label_change_view_all: Peržiūrėti visus pakeitimus
330 330 label_personalize_page: Suasmeninti šį puslapį
331 331 label_comment: Komentaras
332 332 label_comment_plural: Komentarai
333 333 label_comment_add: Pridėkite komentarą
334 334 label_comment_added: Komentaras pridėtas
335 335 label_comment_delete: Pašalinkite komentarus
336 336 label_query: Užklausa
337 337 label_query_plural: Užklausos
338 338 label_query_new: Nauja užklausa
339 339 label_filter_add: Pridėti filtrą
340 340 label_filter_plural: Filtrai
341 341 label_equals: yra
342 342 label_not_equals: nėra
343 343 label_in_less_than: mažiau negu
344 344 label_in_more_than: daugiau negu
345 345 label_in: in
346 346 label_today: šiandien
347 347 label_this_week: šią savaitę
348 348 label_less_than_ago: mažiau negu dienomis prieš
349 349 label_more_than_ago: daugiau negu dienomis prieš
350 350 label_ago: dienomis prieš
351 351 label_contains: turi savyje
352 352 label_not_contains: neturi savyje
353 353 label_day_plural: dienos
354 354 label_repository: Saugykla
355 355 label_browse: Naršyti
356 356 label_modification: %d pakeitimas
357 357 label_modification_plural: %d pakeitimai
358 358 label_revision: Revizija
359 359 label_revision_plural: Revizijos
360 360 label_added: pridėtas
361 361 label_modified: pakeistas
362 362 label_deleted: pašalintas
363 363 label_latest_revision: Paskutinė revizija
364 364 label_latest_revision_plural: Paskutinės revizijos
365 365 label_view_revisions: Pežiūrėti revizijas
366 366 label_max_size: Maksimalus dydis
367 367 label_on: 'iš'
368 368 label_sort_highest: Perkelti į viršūnę
369 369 label_sort_higher: Perkelti į viršų
370 370 label_sort_lower: Perkelti žemyn
371 371 label_sort_lowest: Perkelti į apačią
372 372 label_roadmap: Veiklos grafikas
373 373 label_roadmap_due_in: Baigiasi po
374 374 label_roadmap_overdue: %s vėluojama
375 375 label_roadmap_no_issues: Jokio darbo šiai versijai nėra
376 376 label_search: Ieškoti
377 377 label_result_plural: Rezultatai
378 378 label_all_words: Visi žodžiai
379 379 label_wiki: Wiki
380 380 label_wiki_edit: Wiki redakcija
381 381 label_wiki_edit_plural: Wiki redakcijos
382 382 label_wiki_page: Wiki puslapis
383 383 label_wiki_page_plural: Wiki puslapiai
384 384 label_index_by_title: Indeksas prie pavadinimo
385 385 label_index_by_date: Indeksas prie datos
386 386 label_current_version: Einamoji versija
387 387 label_preview: Peržiūra
388 388 label_feed_plural: Įeitys(Feeds)
389 389 label_changes_details: Visų pakeitimų detalės
390 390 label_issue_tracking: Darbų sekimas
391 391 label_spent_time: Sugaištas laikas
392 392 label_f_hour: %.2f valanda
393 393 label_f_hour_plural: %.2f valandų
394 394 label_time_tracking: Laiko sekimas
395 395 label_change_plural: Pakeitimai
396 396 label_statistics: Statistika
397 397 label_commits_per_month: Paveda(commit) per mėnesį
398 398 label_commits_per_author: Autoriaus pavedos(commit)
399 399 label_view_diff: Skirtumų peržiūra
400 400 label_diff_inline: įterptas
401 401 label_diff_side_by_side: šalia
402 402 label_options: Pasirinkimai
403 403 label_copy_workflow_from: Kopijuoti darbų eiga iš
404 404 label_permissions_report: Leidimų pranešimas
405 405 label_watched_issues: Stebimi darbai
406 406 label_related_issues: Susiję darbai
407 407 label_applied_status: Taikomoji padėtis
408 408 label_loading: Kraunama...
409 409 label_relation_new: Naujas ryšys
410 410 label_relation_delete: Pašalinkite ryšį
411 411 label_relates_to: susietas su
412 412 label_duplicates: dublikatai
413 413 label_blocks: blokai
414 414 label_blocked_by: blokuotas
415 415 label_precedes: įvyksta pirma
416 416 label_follows: seka
417 417 label_end_to_start: užbaigti, kad pradėti
418 418 label_end_to_end: užbaigti, kad pabaigti
419 419 label_start_to_start: pradėkite pradėti
420 420 label_start_to_end: pradėkite užbaigti
421 421 label_stay_logged_in: Likti prisijungus
422 422 label_disabled: išjungta(as)
423 423 label_show_completed_versions: Parodyti užbaigtas versijas
424 424 label_me:
425 425 label_board: Forumas
426 426 label_board_new: Naujas forumas
427 427 label_board_plural: Forumai
428 428 label_topic_plural: Temos
429 429 label_message_plural: Pranešimai
430 430 label_message_last: Paskutinis pranešimas
431 431 label_message_new: Naujas pranešimas
432 432 label_reply_plural: Atsakymai
433 433 label_send_information: Nusiųsti paskyros informaciją vartotojui
434 434 label_year: Metai
435 435 label_month: Mėnuo
436 436 label_week: Savaitė
437 437 label_date_from: Nuo
438 438 label_date_to: Iki
439 439 label_language_based: Pagrįsta vartotojo kalba
440 440 label_sort_by: Rūšiuoti pagal %s
441 441 label_send_test_email: Nusiųsti bandomąjį elektroninį laišką
442 442 label_feeds_access_key_created_on: RSS prieigos raktas sukūrtas prieš %s
443 443 label_module_plural: Moduliai
444 444 label_added_time_by: Pridėjo %s prieš %s
445 445 label_updated_time: Atnaujinta prieš %s
446 446 label_jump_to_a_project: Šuolis į projektą...
447 447 label_file_plural: Bylos
448 448 label_changeset_plural: Changesets
449 449 label_default_columns: Numatytosios skiltys
450 450 label_no_change_option: (Jokio pakeitimo)
451 451 label_bulk_edit_selected_issues: Masinis pasirinktų darbų(issues) redagavimas
452 452 label_theme: Tema
453 453 label_default: Numatyta(as)
454 454 label_search_titles_only: Ieškoti pavadinimų tiktai
455 455 label_user_mail_option_all: "Bet kokiam įvykiui visuose mano projektuose"
456 456 label_user_mail_option_selected: "Bet kokiam įvykiui tiktai pasirinktuose projektuose ..."
457 457 label_user_mail_option_none: "Tiktai dalykai kuriuos stebiu ar esu įtrauktas į"
458 458 label_user_mail_no_self_notified: "Nenoriu būti informuotas apie pakeitimus, kuriuos pats atlieku"
459 459 label_registration_activation_by_email: "paskyros aktyvacija per e-paštą"
460 460 label_registration_manual_activation: "rankinė paskyros aktyvacija"
461 461 label_registration_automatic_activation: "automatinė paskyros aktyvacija"
462 462
463 463 button_login: Registruotis
464 464 button_submit: Pateikti
465 465 button_save: Išsaugoti
466 466 button_check_all: Žymėti visus
467 467 button_uncheck_all: Atžymėti visus
468 468 button_delete: Trinti
469 469 button_create: Sukurti
470 470 button_test: Testas
471 471 button_edit: Redaguoti
472 472 button_add: Pridėti
473 473 button_change: Keisti
474 474 button_apply: Pritaikyti
475 475 button_clear: Išvalyti
476 476 button_lock: Rakinti
477 477 button_unlock: Atrakinti
478 478 button_download: Atsisiųsti
479 479 button_list: Sąrašas
480 480 button_view: Žiūrėti
481 481 button_move: Perkelti
482 482 button_back: Atgal
483 483 button_cancel: Atšaukti
484 484 button_activate: Aktyvinti
485 485 button_sort: Rūšiuoti
486 486 button_log_time: Praleistas laikas
487 487 button_rollback: Grįžti į šią versiją
488 488 button_watch: Stebėti
489 489 button_unwatch: Nestebėti
490 490 button_reply: Atsakyti
491 491 button_archive: Archyvuoti
492 492 button_unarchive: Išpakuoti
493 493 button_reset: Reset
494 494 button_rename: Pervadinti
495 495 button_change_password: Pakeisti slaptažodį
496 496 button_copy: Kopijuoti
497 497 button_annotate: Rašyti pastabą
498 498
499 499 status_active: aktyvus
500 500 status_registered: užregistruotas
501 501 status_locked: užrakintas
502 502
503 503 text_select_mail_notifications: Išrinkite veiksmus, apie kuriuos būtų pranešta elektroniniu paštu.
504 504 text_regexp_info: pvz. ^[A-Z0-9]+$
505 505 text_min_max_length_info: 0 reiškia jokių apribojimų
506 506 text_project_destroy_confirmation: Ar esate įsitikinęs, kad jūs norite pašalinti šį projektą ir visus susijusius duomenis?
507 507 text_workflow_edit: Išrinkite vaidmenį ir pėdsekį, kad redaguotumėte darbų eigą
508 508 text_are_you_sure: Ar esate įsitikinęs?
509 509 text_journal_changed: pakeistas iš %s į %s
510 510 text_journal_set_to: nustatyta į %s
511 511 text_journal_deleted: ištrintas
512 512 text_tip_task_begin_day: užduotis, prasidedanti šią dieną
513 513 text_tip_task_end_day: užduotis, pasibaigianti šią dieną
514 514 text_tip_task_begin_end_day: užduotis, prasidedanti ir pasibaigianti šią dieną
515 515 text_project_identifier_info: 'Mažosios raidės (a-z), skaičiai ir brūkšniai galimi.<br/>Išsaugojus, identifikuotojas negali būti keičiamas.'
516 516 text_caracters_maximum: %d simbolių maksimumas.
517 517 text_caracters_minimum: Turi būti mažiausiai %d simbolių ilgio.
518 518 text_length_between: Ilgis tarp %d ir %d simbolių.
519 519 text_tracker_no_workflow: Jokia darbų eiga neapibrėžta šiam pėdsekiui
520 520 text_unallowed_characters: Neleistini simboliai
521 521 text_comma_separated: Leistinos kelios reikšmės (atskirtos kableliu).
522 522 text_issues_ref_in_commit_messages: Darbų pavedimų(commit) nurodymas ir fiksavimas pranešimuose
523 523 text_issue_added: Darbas %s buvo praneštas (by %s).
524 524 text_issue_updated: Darbas %s buvo atnaujintas (by %s).
525 525 text_wiki_destroy_confirmation: Ar esate įsitikinęs, kad jūs norite pašalinti wiki ir visą jos turinį?
526 526 text_issue_category_destroy_question: Kai kurie darbai (%d) yra paskirti šiai kategorijai. Ką jūs norite daryti?
527 527 text_issue_category_destroy_assignments: Pašalinti kategorijos užduotis
528 528 text_issue_category_reassign_to: Iš naujo priskirti darbus šiai kategorijai
529 529 text_user_mail_option: "neišrinktiems projektams, jūs tiktai gausite pranešimus apie įvykius, kuriuos jūs stebite, arba į kuriuos esate įtrauktas (pvz. darbai, jūs esate autorius ar įgaliotinis)."
530 530
531 531 default_role_manager: Vadovas
532 532 default_role_developper: Projektuotojas
533 533 default_role_reporter: Pranešėjas
534 534 default_tracker_bug: Klaida
535 535 default_tracker_feature: Ypatybė
536 536 default_tracker_support: Palaikymas
537 537 default_issue_status_new: Nauja
538 538 default_issue_status_assigned: Priskirta
539 539 default_issue_status_resolved: Išspręsta
540 540 default_issue_status_feedback: Grįžtamasis ryšys
541 541 default_issue_status_closed: Uždaryta
542 542 default_issue_status_rejected: Atmesta
543 543 default_doc_category_user: Vartotojo dokumentacija
544 544 default_doc_category_tech: Techniniai dokumentacija
545 545 default_priority_low: Žemas
546 546 default_priority_normal: Normalus
547 547 default_priority_high: Aukštas
548 548 default_priority_urgent: Skubus
549 549 default_priority_immediate: Neatidėliotinas
550 550 default_activity_design: Projektavimas
551 551 default_activity_development: Vystymas
552 552
553 553 enumeration_issue_priorities: Darbo prioritetai
554 554 enumeration_doc_categories: Dokumento kategorijos
555 555 enumeration_activities: Veiklos (laiko sekimas)
556 556 label_display_per_page: '%s įrašų puslapyje'
557 setting_per_page_options: Objects per page options
557 setting_per_page_options: Įrašų puslapyje nustatimas
558 558 notice_default_data_loaded: Numatytoji konfiguracija sėkmingai užkrauta.
559 559 label_age: Amžius
560 560 label_general: Bendri
561 561 button_update: Atnaujinti
562 562 setting_issues_export_limit: Darbų eksportavimo limitas
563 563 label_change_properties: Pakeisti nustatymus
564 564 text_load_default_configuration: Užkrauti numatytąj konfiguraciją
565 565 text_no_configuration_data: "Vaidmenys, pėdsekiai, darbų būsenos ir darbų eiga dar nebuvo konfigūruoti.\nGriežtai rekomenduojam užkrauti numatytąją(default)konfiguraciją. Užkrovus, galėsite modifikuoti."
566 566 label_repository_plural: Saugiklos
567 567 error_can_t_load_default_data: "Numatytoji konfiguracija negali būti užkrauta: %s"
568 568 label_associated_revisions: susijusios revizijos
569 569 setting_user_format: Vartotojo atvaizdavimo formatas
570 570 text_status_changed_by_changeset: Pakeista %s revizijoi.
571 571 label_more: Daugiau
572 572 text_issues_destroy_confirmation: 'Ar jūs tikrai norite panaikinti pažimėtą(us) darbą(us)?'
573 573 label_scm: SCM
574 574 text_select_project_modules: 'Parinkite modulius, kuriuos norite naudoti šiame projekte:'
575 575 label_issue_added: Darbas pridėtas
576 576 label_issue_updated: Darbas atnaujintas
577 577 label_document_added: Dokumentas pridėtas
578 578 label_message_posted: Pranešimas pridėtas
579 579 label_file_added: Byla pridėta
580 580 label_news_added: Naujiena pridėta
581 project_module_boards: Boards
582 project_module_issue_tracking: Issue tracking
581 project_module_boards: Forumai
582 project_module_issue_tracking: Darbu pėdsekys
583 583 project_module_wiki: Wiki
584 project_module_files: Files
585 project_module_documents: Documents
586 project_module_repository: Repository
587 project_module_news: News
588 project_module_time_tracking: Time tracking
589 text_file_repository_writable: File repository writable
590 text_default_administrator_account_changed: Default administrator account changed
591 text_rmagick_available: RMagick available (optional)
592 button_configure: Configure
584 project_module_files: Rinkmenos
585 project_module_documents: Dokumentai
586 project_module_repository: Saugykla
587 project_module_news: Žinios
588 project_module_time_tracking: Laiko pėdsekys
589 text_file_repository_writable: Į rinkmenu saugyklą galima saugoti (RW)
590 text_default_administrator_account_changed: Administratoriaus numatyta paskyra pakeista
591 text_rmagick_available: RMagick pasiekiamas (pasirinktinai)
592 button_configure: Konfiguruoti
593 593 label_plugins: Plugins
594 label_ldap_authentication: LDAP authentication
595 label_downloads_abbr: D/L
596 label_this_month: this month
597 label_last_n_days: last %d days
598 label_all_time: all time
599 label_this_year: this year
600 label_date_range: Date range
601 label_last_week: last week
602 label_yesterday: yesterday
603 label_last_month: last month
604 label_add_another_file: Add another file
605 label_optional_description: Optional description
606 text_destroy_time_entries_question: %.02f hours were reported on the issues you are about to delete. What do you want to do ?
607 error_issue_not_found_in_project: 'The issue was not found or does not belong to this project'
608 text_assign_time_entries_to_project: Assign reported hours to the project
609 text_destroy_time_entries: Delete reported hours
610 text_reassign_time_entries: 'Reassign reported hours to this issue:'
611 setting_activity_days_default: Days displayed on project activity
612 label_chronological_order: In chronological order
613 field_comments_sorting: Display comments
614 label_reverse_chronological_order: In reverse chronological order
615 label_preferences: Preferences
616 setting_display_subprojects_issues: Display subprojects issues on main projects by default
617 label_overall_activity: Overall activity
618 setting_default_projects_public: New projects are public by default
619 error_scm_annotate: "The entry does not exist or can not be annotated."
620 label_planning: Planning
621 text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
594 label_ldap_authentication: LDAP autentifikacija
595 label_downloads_abbr: siunt.
596 label_this_month: šis menuo
597 label_last_n_days: paskutinių %d dienų
598 label_all_time: visas laikas
599 label_this_year: šiemet
600 label_date_range: Dienų diapazonas
601 label_last_week: paskutinė savaitė
602 label_yesterday: vakar
603 label_last_month: paskutinis menuo
604 label_add_another_file: Pridėti kitą bylą
605 label_optional_description: Apibūdinimas (laisvai pasirenkamas)
606 text_destroy_time_entries_question: Naikinamam darbui paskelbta %.02f valandų. Ką jūs noryte su jomis daryti?
607 error_issue_not_found_in_project: 'Darbas nerastas arba nesurištas su šiuo projektu'
608 text_assign_time_entries_to_project: Priskirti valandas prie projekto
609 text_destroy_time_entries: Ištrinti paskelbtas valandas
610 text_reassign_time_entries: 'Priskirti paskelbtas valandas šiam darbui:'
611 setting_activity_days_default: Atvaizduojamos dienos projekto veikloje
612 label_chronological_order: Chronologine tvarka
613 field_comments_sorting: rodyti komentarus
614 label_reverse_chronological_order: Atbuline chronologine tvarka
615 label_preferences: Savybės
616 setting_display_subprojects_issues: Pagal nutylėjimą rodyti subprojektų darbus pagrindiniame projekte
617 label_overall_activity: Visa veikla
618 setting_default_projects_public: Naujas projektas viešas pagal nutylėjimą
619 error_scm_annotate: "Įrašas neegzituoja arba negalima jo atvaizduoti."
620 label_planning: Planavimas
621 text_subprojects_destroy_warning: 'Šis(ie) subprojektas(ai): %s taip pat bus ištrintas(i).'
622 label_and_its_subprojects: %s projektas ir jo subprojektai
623
@@ -1,621 +1,622
1 1 _gloc_rule_default: '|n| n==1 ? "" : "_plural" '
2 2
3 3 actionview_datehelper_select_day_prefix:
4 4 actionview_datehelper_select_month_names: Januar,Februar,Mars,April,Mai,Juni,Juli,August,September,Oktober,November,Desember
5 5 actionview_datehelper_select_month_names_abbr: Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Des
6 6 actionview_datehelper_select_month_prefix:
7 7 actionview_datehelper_select_year_prefix:
8 8 actionview_datehelper_time_in_words_day: 1 dag
9 9 actionview_datehelper_time_in_words_day_plural: %d dager
10 10 actionview_datehelper_time_in_words_hour_about: ca. en time
11 11 actionview_datehelper_time_in_words_hour_about_plural: ca. %d timer
12 12 actionview_datehelper_time_in_words_hour_about_single: ca. en time
13 13 actionview_datehelper_time_in_words_minute: 1 minutt
14 14 actionview_datehelper_time_in_words_minute_half: et halvt minutt
15 15 actionview_datehelper_time_in_words_minute_less_than: mindre enn et minutt
16 16 actionview_datehelper_time_in_words_minute_plural: %d minutter
17 17 actionview_datehelper_time_in_words_minute_single: 1 minutt
18 18 actionview_datehelper_time_in_words_second_less_than: mindre enn et sekund
19 19 actionview_datehelper_time_in_words_second_less_than_plural: mindre enn %d sekunder
20 20 actionview_instancetag_blank_option: Vennligst velg
21 21
22 22 activerecord_error_inclusion: finnes ikke i listen
23 23 activerecord_error_exclusion: er reservert
24 24 activerecord_error_invalid: er ugyldig
25 25 activerecord_error_confirmation: stemmer ikke med bekreftelsen
26 26 activerecord_error_accepted: må aksepteres
27 27 activerecord_error_empty: kan ikke være tom
28 28 activerecord_error_blank: kan ikke være blank
29 29 activerecord_error_too_long: er for langt
30 30 activerecord_error_too_short: er for kort
31 31 activerecord_error_wrong_length: har feil lengde
32 32 activerecord_error_taken: er opptatt
33 33 activerecord_error_not_a_number: er ikke et nummer
34 34 activerecord_error_not_a_date: er ikke en gyldig dato
35 35 activerecord_error_greater_than_start_date: må være større enn startdato
36 36 activerecord_error_not_same_project: hører ikke til samme prosjekt
37 37 activerecord_error_circular_dependency: Denne relasjonen ville lagd en sirkulær avhengighet
38 38
39 39 general_fmt_age: %d år
40 40 general_fmt_age_plural: %d år
41 41 general_fmt_date: %%d. %%B %%Y
42 42 general_fmt_datetime: %%d. %%B %%H:%%M
43 43 general_fmt_datetime_short: %%d.%%m.%%Y, %%H:%%M
44 44 general_fmt_time: %%H:%%M
45 45 general_text_No: 'Nei'
46 46 general_text_Yes: 'Ja'
47 47 general_text_no: 'nei'
48 48 general_text_yes: 'ja'
49 49 general_lang_name: 'Norwegian (Norsk bokmål)'
50 50 general_csv_separator: ','
51 51 general_csv_encoding: ISO-8859-1
52 52 general_pdf_encoding: ISO-8859-1
53 53 general_day_names: Mandag,Tirsdag,Onsdag,Torsdag,Fredag,Lørdag,Søndag
54 54 general_first_day_of_week: '1'
55 55
56 56 notice_account_updated: Kontoen er oppdatert.
57 57 notice_account_invalid_creditentials: Feil brukernavn eller passord
58 58 notice_account_password_updated: Passordet er oppdatert.
59 59 notice_account_wrong_password: Feil passord
60 60 notice_account_register_done: Kontoen er opprettet. Klikk lenken som er sendt deg i e-post for å aktivere kontoen.
61 61 notice_account_unknown_email: Ukjent bruker.
62 62 notice_can_t_change_password: Denne kontoen bruker ekstern godkjenning. Passordet kan ikke endres.
63 63 notice_account_lost_email_sent: En e-post med instruksjoner for å velge et nytt passord er sendt til deg.
64 64 notice_account_activated: Din konto er aktivert. Du kan nå logge inn.
65 65 notice_successful_create: Opprettet.
66 66 notice_successful_update: Oppdatert.
67 67 notice_successful_delete: Slettet.
68 68 notice_successful_connection: Koblet opp.
69 69 notice_file_not_found: Siden du forsøkte å vise eksisterer ikke, eller er slettet.
70 70 notice_locking_conflict: Data har blitt oppdatert av en annen bruker.
71 71 notice_not_authorized: Du har ikke adgang til denne siden.
72 72 notice_email_sent: En e-post er sendt til %s
73 73 notice_email_error: En feil oppstod under sending av e-post (%s)
74 74 notice_feeds_access_key_reseted: Din RSS-tilgangsnøkkel er nullstilt.
75 75 notice_failed_to_save_issues: "Lykkes ikke å lagre %d sak(er) %d valgt: %s."
76 76 notice_no_issue_selected: "Ingen sak valgt! Vennligst merk sakene du vil endre."
77 77 notice_account_pending: "Din konto ble opprettet og avventer administrativ godkjenning."
78 78 notice_default_data_loaded: Standardkonfigurasjonen lastet inn.
79 79
80 80 error_can_t_load_default_data: "Standardkonfigurasjonen kunne ikke lastes inn: %s"
81 81 error_scm_not_found: "Elementet og/eller revisjonen eksisterer ikke i depoet."
82 82 error_scm_command_failed: "En feil oppstod under tilkobling til depoet: %s"
83 83 error_scm_annotate: "Elementet eksisterer ikke, eller kan ikke noteres."
84 84 error_issue_not_found_in_project: 'Saken eksisterer ikke, eller hører ikke til dette prosjektet'
85 85
86 86 mail_subject_lost_password: Ditt %s passord
87 87 mail_body_lost_password: 'Klikk følgende lenke for å endre ditt passord:'
88 88 mail_subject_register: %s kontoaktivering
89 89 mail_body_register: 'Klikk følgende lenke for å aktivere din konto:'
90 90 mail_body_account_information_external: Du kan bruke din "%s"-konto for å logge inn.
91 91 mail_body_account_information: Informasjon om din konto
92 92 mail_subject_account_activation_request: %s kontoaktivering
93 93 mail_body_account_activation_request: 'En ny bruker (%s) er registrert, og avventer din godkjenning:'
94 94
95 95 gui_validation_error: 1 feil
96 96 gui_validation_error_plural: %d feil
97 97
98 98 field_name: Navn
99 99 field_description: Beskrivelse
100 100 field_summary: Oppsummering
101 101 field_is_required: Kreves
102 102 field_firstname: Fornavn
103 103 field_lastname: Etternavn
104 104 field_mail: E-post
105 105 field_filename: Fil
106 106 field_filesize: Størrelse
107 107 field_downloads: Nedlastinger
108 108 field_author: Forfatter
109 109 field_created_on: Opprettet
110 110 field_updated_on: Oppdatert
111 111 field_field_format: Format
112 112 field_is_for_all: For alle prosjekter
113 113 field_possible_values: Lovlige verdier
114 114 field_regexp: Regular expression
115 115 field_min_length: Minimum lengde
116 116 field_max_length: Maksimum lengde
117 117 field_value: Verdi
118 118 field_category: Kategori
119 119 field_title: Tittel
120 120 field_project: Prosjekt
121 121 field_issue: Sak
122 122 field_status: Status
123 123 field_notes: Notater
124 124 field_is_closed: Lukker saken
125 125 field_is_default: Standardverdi
126 126 field_tracker: Sakstype
127 127 field_subject: Emne
128 128 field_due_date: Frist
129 129 field_assigned_to: Tildelt til
130 130 field_priority: Prioritet
131 131 field_fixed_version: Mål-versjon
132 132 field_user: Bruker
133 133 field_role: Rolle
134 134 field_homepage: Hjemmeside
135 135 field_is_public: Offentlig
136 136 field_parent: Underprosjekt til
137 137 field_is_in_chlog: Vises i endringslogg
138 138 field_is_in_roadmap: Vises i veikart
139 139 field_login: Brukernavn
140 140 field_mail_notification: E-post-varsling
141 141 field_admin: Administrator
142 142 field_last_login_on: Sist innlogget
143 143 field_language: Språk
144 144 field_effective_date: Dato
145 145 field_password: Passord
146 146 field_new_password: Nytt passord
147 147 field_password_confirmation: Bekreft passord
148 148 field_version: Versjon
149 149 field_type: Type
150 150 field_host: Vert
151 151 field_port: Port
152 152 field_account: Konto
153 153 field_base_dn: Base DN
154 154 field_attr_login: Brukernavnsattributt
155 155 field_attr_firstname: Fornavnsattributt
156 156 field_attr_lastname: Etternavnsattributt
157 157 field_attr_mail: E-post-attributt
158 158 field_onthefly: On-the-fly brukeropprettelse
159 159 field_start_date: Start
160 160 field_done_ratio: %% Ferdig
161 161 field_auth_source: Autentifikasjonsmodus
162 162 field_hide_mail: Skjul min e-post-adresse
163 163 field_comments: Kommentarer
164 164 field_url: URL
165 165 field_start_page: Startside
166 166 field_subproject: Underprosjekt
167 167 field_hours: Timer
168 168 field_activity: Aktivitet
169 169 field_spent_on: Dato
170 170 field_identifier: Identifikasjon
171 171 field_is_filter: Brukes som filter
172 172 field_issue_to_id: Relatert saker
173 173 field_delay: Forsinkelse
174 174 field_assignable: Saker kan tildeles denne rollen
175 175 field_redirect_existing_links: Viderekoble eksisterende lenker
176 176 field_estimated_hours: Estimert tid
177 177 field_column_names: Kolonner
178 178 field_time_zone: Tidssone
179 179 field_searchable: Søkbar
180 180 field_default_value: Standardverdi
181 181 field_comments_sorting: Vis kommentarer
182 182
183 183 setting_app_title: Applikasjonstittel
184 184 setting_app_subtitle: Applikasjonens undertittel
185 185 setting_welcome_text: Velkomsttekst
186 186 setting_default_language: Standardspråk
187 187 setting_login_required: Krever innlogging
188 188 setting_self_registration: Selvregistrering
189 189 setting_attachment_max_size: Maks. størrelse vedlegg
190 190 setting_issues_export_limit: Eksportgrense for saker
191 191 setting_mail_from: Avsenders e-post
192 192 setting_bcc_recipients: Blindkopi (bcc) til mottakere
193 193 setting_host_name: Vertsnavn
194 194 setting_text_formatting: Tekstformattering
195 195 setting_wiki_compression: Komprimering av Wiki-historikk
196 196 setting_feeds_limit: Innholdsgrense for Feed
197 197 setting_default_projects_public: Nye prosjekter er offentlige som standard
198 198 setting_autofetch_changesets: Autohenting av innsendinger
199 199 setting_sys_api_enabled: Aktiver webservice for depot-administrasjon
200 200 setting_commit_ref_keywords: Nøkkelord for referanse
201 201 setting_commit_fix_keywords: Nøkkelord for retting
202 202 setting_autologin: Autoinnlogging
203 203 setting_date_format: Datoformat
204 204 setting_time_format: Tidsformat
205 205 setting_cross_project_issue_relations: Tillat saksrelasjoner mellom prosjekter
206 206 setting_issue_list_default_columns: Standardkolonner vist i sakslisten
207 207 setting_repositories_encodings: Depot-tegnsett
208 208 setting_emails_footer: E-post-signatur
209 209 setting_protocol: Protokoll
210 210 setting_per_page_options: Alternativer, objekter pr. side
211 211 setting_user_format: Visningsformat, brukere
212 212 setting_activity_days_default: Dager vist på prosjektaktivitet
213 213 setting_display_subprojects_issues: Vis saker fra underprosjekter på hovedprosjekt som standard
214 214
215 215 project_module_issue_tracking: Sakssporing
216 216 project_module_time_tracking: Tidssporing
217 217 project_module_news: Nyheter
218 218 project_module_documents: Dokumenter
219 219 project_module_files: Filer
220 220 project_module_wiki: Wiki
221 221 project_module_repository: Depot
222 222 project_module_boards: Forumer
223 223
224 224 label_user: Bruker
225 225 label_user_plural: Brukere
226 226 label_user_new: Ny bruker
227 227 label_project: Prosjekt
228 228 label_project_new: Nytt prosjekt
229 229 label_project_plural: Prosjekter
230 230 label_project_all: Alle prosjekter
231 231 label_project_latest: Siste prosjekter
232 232 label_issue: Sak
233 233 label_issue_new: Ny sak
234 234 label_issue_plural: Saker
235 235 label_issue_view_all: Vis alle saker
236 236 label_issues_by: Saker etter %s
237 237 label_issue_added: Sak lagt til
238 238 label_issue_updated: Sak oppdatert
239 239 label_document: Dokument
240 240 label_document_new: Nytt dokument
241 241 label_document_plural: Dokumenter
242 242 label_document_added: Dokument lagt til
243 243 label_role: Rolle
244 244 label_role_plural: Roller
245 245 label_role_new: Ny rolle
246 246 label_role_and_permissions: Roller og tillatelser
247 247 label_member: Medlem
248 248 label_member_new: Nytt medlem
249 249 label_member_plural: Medlemmer
250 250 label_tracker: Sakstype
251 251 label_tracker_plural: Sakstyper
252 252 label_tracker_new: Ny sakstype
253 253 label_workflow: Arbeidsflyt
254 254 label_issue_status: Saksstatus
255 255 label_issue_status_plural: Saksstatuser
256 256 label_issue_status_new: Ny status
257 257 label_issue_category: Sakskategori
258 258 label_issue_category_plural: Sakskategorier
259 259 label_issue_category_new: Ny kategori
260 260 label_custom_field: Eget felt
261 261 label_custom_field_plural: Egne felt
262 262 label_custom_field_new: Nytt eget felt
263 263 label_enumerations: Kodelister
264 264 label_enumeration_new: Ny verdi
265 265 label_information: Informasjon
266 266 label_information_plural: Informasjon
267 267 label_please_login: Vennlist logg inn
268 268 label_register: Registrer
269 269 label_password_lost: Mistet passord
270 270 label_home: Hjem
271 271 label_my_page: Min side
272 272 label_my_account: Min konto
273 273 label_my_projects: Mine prosjekter
274 274 label_administration: Administrasjon
275 275 label_login: Logg inn
276 276 label_logout: Logg ut
277 277 label_help: Hjelp
278 278 label_reported_issues: Rapporterte saker
279 279 label_assigned_to_me_issues: Saker tildelt meg
280 280 label_last_login: Sist innlogget
281 281 label_last_updates: Sist oppdatert
282 282 label_last_updates_plural: %d siste oppdaterte
283 283 label_registered_on: Registrert
284 284 label_activity: Aktivitet
285 285 label_overall_activity: All aktivitet
286 286 label_new: Ny
287 287 label_logged_as: Innlogget som
288 288 label_environment: Miljø
289 289 label_authentication: Autentifikasjon
290 290 label_auth_source: Autentifikasjonsmodus
291 291 label_auth_source_new: Ny autentifikasjonmodus
292 292 label_auth_source_plural: Autentifikasjonsmoduser
293 293 label_subproject_plural: Underprosjekter
294 label_and_its_subprojects: %s og dets underprosjekter
294 295 label_min_max_length: Min.-maks. lengde
295 296 label_list: Liste
296 297 label_date: Dato
297 298 label_integer: Heltall
298 299 label_float: Kommatall
299 300 label_boolean: Sann/usann
300 301 label_string: Tekst
301 302 label_text: Lang tekst
302 303 label_attribute: Attributt
303 304 label_attribute_plural: Attributter
304 305 label_download: %d Nedlasting
305 306 label_download_plural: %d Nedlastinger
306 307 label_no_data: Ingen data å vise
307 308 label_change_status: Endre status
308 309 label_history: Historikk
309 310 label_attachment: Fil
310 311 label_attachment_new: Ny fil
311 312 label_attachment_delete: Slett fil
312 313 label_attachment_plural: Filer
313 314 label_file_added: Fil lagt til
314 315 label_report: Rapport
315 316 label_report_plural: Rapporter
316 317 label_news: Nyheter
317 318 label_news_new: Legg til nyhet
318 319 label_news_plural: Nyheter
319 320 label_news_latest: Siste nyheter
320 321 label_news_view_all: Vis alle nyheter
321 322 label_news_added: Nyhet lagt til
322 323 label_change_log: Endringslogg
323 324 label_settings: Innstillinger
324 325 label_overview: Oversikt
325 326 label_version: Versjon
326 327 label_version_new: Ny versjon
327 328 label_version_plural: Versjoner
328 329 label_confirmation: Bekreftelse
329 330 label_export_to: Eksporter til
330 331 label_read: Leser...
331 332 label_public_projects: Offentlige prosjekt
332 333 label_open_issues: åpen
333 334 label_open_issues_plural: åpne
334 335 label_closed_issues: lukket
335 336 label_closed_issues_plural: lukkede
336 337 label_total: Total
337 338 label_permissions: Godkjenninger
338 339 label_current_status: Nåværende status
339 340 label_new_statuses_allowed: Tillatte nye statuser
340 341 label_all: alle
341 342 label_none: ingen
342 343 label_nobody: ingen
343 344 label_next: Neste
344 345 label_previous: Forrige
345 346 label_used_by: Brukt av
346 347 label_details: Detaljer
347 348 label_add_note: Legg til notis
348 349 label_per_page: Pr. side
349 350 label_calendar: Kalender
350 351 label_months_from: måneder fra
351 352 label_gantt: Gantt
352 353 label_internal: Intern
353 354 label_last_changes: siste %d endringer
354 355 label_change_view_all: Vis alle endringer
355 356 label_personalize_page: Tilpass denne siden
356 357 label_comment: Kommentar
357 358 label_comment_plural: Kommentarer
358 359 label_comment_add: Legg til kommentar
359 360 label_comment_added: Kommentar lagt til
360 361 label_comment_delete: Slett kommentar
361 362 label_query: Egen spørring
362 363 label_query_plural: Egne spørringer
363 364 label_query_new: Ny spørring
364 365 label_filter_add: Legg til filter
365 366 label_filter_plural: Filtre
366 367 label_equals: er
367 368 label_not_equals: er ikke
368 369 label_in_less_than: er mindre enn
369 370 label_in_more_than: in mer enn
370 371 label_in: i
371 372 label_today: idag
372 373 label_all_time: all tid
373 374 label_yesterday: i går
374 375 label_this_week: denne uken
375 376 label_last_week: sist uke
376 377 label_last_n_days: siste %d dager
377 378 label_this_month: denne måneden
378 379 label_last_month: siste måned
379 380 label_this_year: dette året
380 381 label_date_range: Dato-spenn
381 382 label_less_than_ago: mindre enn dager siden
382 383 label_more_than_ago: mer enn dager siden
383 384 label_ago: dager siden
384 385 label_contains: inneholder
385 386 label_not_contains: ikke inneholder
386 387 label_day_plural: dager
387 388 label_repository: Depot
388 389 label_repository_plural: Depoter
389 390 label_browse: Utforsk
390 391 label_modification: %d endring
391 392 label_modification_plural: %d endringer
392 393 label_revision: Revisjon
393 394 label_revision_plural: Revisjoner
394 395 label_associated_revisions: Assosierte revisjoner
395 396 label_added: lagt til
396 397 label_modified: endret
397 398 label_deleted: slettet
398 399 label_latest_revision: Siste revisjon
399 400 label_latest_revision_plural: Siste revisjoner
400 401 label_view_revisions: Vis revisjoner
401 402 label_max_size: Maksimum størrelse
402 403 label_on: 'av'
403 404 label_sort_highest: Flytt til toppen
404 405 label_sort_higher: Flytt opp
405 406 label_sort_lower: Flytt ned
406 407 label_sort_lowest: Flytt til bunnen
407 408 label_roadmap: Veikart
408 409 label_roadmap_due_in: Frist om
409 410 label_roadmap_overdue: %s over fristen
410 411 label_roadmap_no_issues: Ingen saker for denne versjonen
411 412 label_search: Søk
412 413 label_result_plural: Resultater
413 414 label_all_words: Alle ord
414 415 label_wiki: Wiki
415 416 label_wiki_edit: Wiki endring
416 417 label_wiki_edit_plural: Wiki endringer
417 418 label_wiki_page: Wiki-side
418 419 label_wiki_page_plural: Wiki-sider
419 420 label_index_by_title: Indekser etter tittel
420 421 label_index_by_date: Indekser etter dato
421 422 label_current_version: Gjeldende versjon
422 423 label_preview: Forhåndsvis
423 424 label_feed_plural: Feeder
424 425 label_changes_details: Detaljer om alle endringer
425 426 label_issue_tracking: Sakssporing
426 427 label_spent_time: Brukt tid
427 428 label_f_hour: %.2f time
428 429 label_f_hour_plural: %.2f timer
429 430 label_time_tracking: Tidssporing
430 431 label_change_plural: Endringer
431 432 label_statistics: Statistikk
432 433 label_commits_per_month: Innsendinger pr. måned
433 434 label_commits_per_author: Innsendinger pr. forfatter
434 435 label_view_diff: Vis forskjeller
435 436 label_diff_inline: i teksten
436 437 label_diff_side_by_side: side ved side
437 438 label_options: Alternativer
438 439 label_copy_workflow_from: Kopier arbeidsflyt fra
439 440 label_permissions_report: Godkjenningsrapport
440 441 label_watched_issues: Overvåkede saker
441 442 label_related_issues: Relaterte saker
442 443 label_applied_status: Gitt status
443 444 label_loading: Laster...
444 445 label_relation_new: Ny relasjon
445 446 label_relation_delete: Slett relasjon
446 447 label_relates_to: relatert til
447 448 label_duplicates: duplikater
448 449 label_blocks: blokkerer
449 450 label_blocked_by: blokkert av
450 451 label_precedes: kommer før
451 452 label_follows: følger
452 453 label_end_to_start: slutt til start
453 454 label_end_to_end: slutt til slutt
454 455 label_start_to_start: start til start
455 456 label_start_to_end: start til slutt
456 457 label_stay_logged_in: Hold meg innlogget
457 458 label_disabled: avslått
458 459 label_show_completed_versions: Vis ferdige versjoner
459 460 label_me: meg
460 461 label_board: Forum
461 462 label_board_new: Nytt forum
462 463 label_board_plural: Forumer
463 464 label_topic_plural: Emner
464 465 label_message_plural: Meldinger
465 466 label_message_last: Siste melding
466 467 label_message_new: Ny melding
467 468 label_message_posted: Melding lagt til
468 469 label_reply_plural: Svar
469 470 label_send_information: Send kontoinformasjon til brukeren
470 471 label_year: År
471 472 label_month: Måned
472 473 label_week: Uke
473 474 label_date_from: Fra
474 475 label_date_to: Til
475 476 label_language_based: Basert på brukerens språk
476 477 label_sort_by: Sorter etter %s
477 478 label_send_test_email: Send en e-post-test
478 479 label_feeds_access_key_created_on: RSS tilgangsnøkkel opprettet for %s siden
479 480 label_module_plural: Moduler
480 481 label_added_time_by: Lagt til av %s for %s siden
481 482 label_updated_time: Oppdatert for %s siden
482 483 label_jump_to_a_project: Gå til et prosjekt...
483 484 label_file_plural: Filer
484 485 label_changeset_plural: Endringssett
485 486 label_default_columns: Standardkolonner
486 487 label_no_change_option: (Ingen endring)
487 488 label_bulk_edit_selected_issues: Samlet endring av valgte saker
488 489 label_theme: Tema
489 490 label_default: Standard
490 491 label_search_titles_only: Søk bare i titler
491 492 label_user_mail_option_all: "For alle hendelser mine prosjekter"
492 493 label_user_mail_option_selected: "For alle hendelser valgte prosjekt..."
493 494 label_user_mail_option_none: "Bare for ting jeg overvåker eller er involvert i"
494 495 label_user_mail_no_self_notified: "Jeg vil ikke bli varslet om endringer jeg selv gjør"
495 496 label_registration_activation_by_email: kontoaktivering pr. e-post
496 497 label_registration_manual_activation: manuell kontoaktivering
497 498 label_registration_automatic_activation: automatisk kontoaktivering
498 499 label_display_per_page: 'Pr. side: %s'
499 500 label_age: Alder
500 501 label_change_properties: Endre egenskaper
501 502 label_general: Generell
502 503 label_more: Mer
503 504 label_scm: SCM
504 505 label_plugins: Tillegg
505 506 label_ldap_authentication: LDAP-autentifikasjon
506 507 label_downloads_abbr: Nedl.
507 508 label_optional_description: Valgfri beskrivelse
508 509 label_add_another_file: Legg til en fil til
509 510 label_preferences: Brukerinnstillinger
510 511 label_chronological_order: I kronologisk rekkefølge
511 512 label_reverse_chronological_order: I omvendt kronologisk rekkefølge
512 513 label_planning: Planlegging
513 514
514 515 button_login: Logg inn
515 516 button_submit: Send
516 517 button_save: Lagre
517 518 button_check_all: Merk alle
518 519 button_uncheck_all: Avmerk alle
519 520 button_delete: Slett
520 521 button_create: Opprett
521 522 button_test: Test
522 523 button_edit: Endre
523 524 button_add: Legg til
524 525 button_change: Endre
525 526 button_apply: Bruk
526 527 button_clear: Nullstill
527 528 button_lock: Lås
528 529 button_unlock: Lås opp
529 530 button_download: Last ned
530 531 button_list: Liste
531 532 button_view: Vis
532 533 button_move: Flytt
533 534 button_back: Tilbake
534 535 button_cancel: Avbryt
535 536 button_activate: Aktiver
536 537 button_sort: Sorter
537 538 button_log_time: Logg tid
538 539 button_rollback: Rull tilbake til denne versjonen
539 540 button_watch: Overvåk
540 541 button_unwatch: Stopp overvåkning
541 542 button_reply: Svar
542 543 button_archive: Arkiver
543 544 button_unarchive: Gjør om arkivering
544 545 button_reset: Nullstill
545 546 button_rename: Endre navn
546 547 button_change_password: Endre passord
547 548 button_copy: Kopier
548 549 button_annotate: Notér
549 550 button_update: Oppdater
550 551 button_configure: Konfigurer
551 552
552 553 status_active: aktiv
553 554 status_registered: registrert
554 555 status_locked: låst
555 556
556 557 text_select_mail_notifications: Velg hendelser som skal varsles med e-post.
557 558 text_regexp_info: eg. ^[A-Z0-9]+$
558 559 text_min_max_length_info: 0 betyr ingen begrensning
559 560 text_project_destroy_confirmation: Er du sikker på at du vil slette dette prosjekter og alle relatert data ?
560 561 text_subprojects_destroy_warning: 'Underprojekt(ene): %s vil også bli slettet.'
561 562 text_workflow_edit: Velg en rolle og en sakstype for å endre arbeidsflyten
562 563 text_are_you_sure: Er du sikker ?
563 564 text_journal_changed: endret fra %s til %s
564 565 text_journal_set_to: satt til %s
565 566 text_journal_deleted: slettet
566 567 text_tip_task_begin_day: oppgaven starter denne dagen
567 568 text_tip_task_end_day: oppgaven avsluttes denne dagen
568 569 text_tip_task_begin_end_day: oppgaven starter og avsluttes denne dagen
569 570 text_project_identifier_info: 'Små bokstaver (a-z), nummer og bindestrek tillatt.<br />Identifikatoren kan ikke endres etter den er lagret.'
570 571 text_caracters_maximum: %d tegn maksimum.
571 572 text_caracters_minimum: Må være minst %d tegn langt.
572 573 text_length_between: Lengde mellom %d og %d tegn.
573 574 text_tracker_no_workflow: Ingen arbeidsflyt definert for denne sakstypen
574 575 text_unallowed_characters: Ugyldige tegn
575 576 text_comma_separated: Flere verdier tillat (kommaseparert).
576 577 text_issues_ref_in_commit_messages: Referering og retting av saker i innsendingsmelding
577 578 text_issue_added: Sak %s er rapportert.
578 579 text_issue_updated: Sak %s er oppdatert.
579 580 text_wiki_destroy_confirmation: Er du sikker på at du vil slette denne wikien og alt innholdet ?
580 581 text_issue_category_destroy_question: Noen saker (%d) er lagt til i denne kategorien. Hva vil du gjøre ?
581 582 text_issue_category_destroy_assignments: Fjern bruk av kategorier
582 583 text_issue_category_reassign_to: Overfør sakene til denne kategorien
583 584 text_user_mail_option: "For ikke-valgte prosjekter vil du bare motta varsling om ting du overvåker eller er involveret i (eks. saker du er forfatter av eller er tildelt)."
584 585 text_no_configuration_data: "Roller, arbeidsflyt, sakstyper og -statuser er ikke konfigurert enda.\nDet anbefales sterkt å laste inn standardkonfigurasjonen. Du vil kunne endre denne etter den er innlastet."
585 586 text_load_default_configuration: Last inn standardkonfigurasjonen
586 587 text_status_changed_by_changeset: Brukt i endringssett %s.
587 588 text_issues_destroy_confirmation: 'Er du sikker at du vil slette valgte sak(er) ?'
588 589 text_select_project_modules: 'Velg moduler du vil aktivere for dette prosjektet:'
589 590 text_default_administrator_account_changed: Standard administrator-konto er endret
590 591 text_file_repository_writable: Fil-arkivet er skrivbart
591 592 text_rmagick_available: RMagick er tilgjengelig (valgfritt)
592 593 text_destroy_time_entries_question: %.02f timer er ført på sakene du er i ferd med å slette. Hva vil du gjøre ?
593 594 text_destroy_time_entries: Slett førte timer
594 595 text_assign_time_entries_to_project: Overfør førte timer til prosjektet
595 596 text_reassign_time_entries: 'Overfør førte timer til denne saken:'
596 597
597 598 default_role_manager: Leder
598 599 default_role_developper: Utvikler
599 600 default_role_reporter: Rapportør
600 601 default_tracker_bug: Feil
601 602 default_tracker_feature: Funksjon
602 603 default_tracker_support: Support
603 604 default_issue_status_new: Ny
604 605 default_issue_status_assigned: Tildelt
605 606 default_issue_status_resolved: Avklart
606 607 default_issue_status_feedback: Tilbakemelding
607 608 default_issue_status_closed: Lukket
608 609 default_issue_status_rejected: Avvist
609 610 default_doc_category_user: Bruker-dokumentasjon
610 611 default_doc_category_tech: Teknisk dokumentasjon
611 612 default_priority_low: Lav
612 613 default_priority_normal: Normal
613 614 default_priority_high: Høy
614 615 default_priority_urgent: Haster
615 616 default_priority_immediate: Omgående
616 617 default_activity_design: Design
617 618 default_activity_development: Utvikling
618 619
619 620 enumeration_issue_priorities: Sakssprioriteringer
620 621 enumeration_doc_categories: Dokument-kategorier
621 622 enumeration_activities: Aktiviteter (tidssporing)
@@ -1,620 +1,620
1 1 _gloc_rule_default: '|n| n==1 ? "" : "_plural" '
2 2
3 3 actionview_datehelper_select_day_prefix:
4 4 actionview_datehelper_select_month_names: Styczeń,Luty,Marzec,Kwiecień,Maj,Czerwiec,Lipiec,Sierpień,Wrzesień,Październik,Listopad,Grudzień
5 5 actionview_datehelper_select_month_names_abbr: Sty,Lut,Mar,Kwi,Maj,Cze,Lip,Sie,Wrz,Paź,Lis,Gru
6 6 actionview_datehelper_select_month_prefix:
7 7 actionview_datehelper_select_year_prefix:
8 8 actionview_datehelper_time_in_words_day: 1 dzień
9 9 actionview_datehelper_time_in_words_day_plural: %d dni
10 10 actionview_datehelper_time_in_words_hour_about: około godziny
11 11 actionview_datehelper_time_in_words_hour_about_plural: około %d godzin
12 12 actionview_datehelper_time_in_words_hour_about_single: około godziny
13 13 actionview_datehelper_time_in_words_minute: 1 minuta
14 14 actionview_datehelper_time_in_words_minute_half: pół minuty
15 15 actionview_datehelper_time_in_words_minute_less_than: mniej niż minuta
16 16 actionview_datehelper_time_in_words_minute_plural: %d minut
17 17 actionview_datehelper_time_in_words_minute_single: 1 minuta
18 18 actionview_datehelper_time_in_words_second_less_than: mniej niż sekunda
19 19 actionview_datehelper_time_in_words_second_less_than_plural: mniej niż %d sekund
20 20 actionview_instancetag_blank_option: Proszę wybierz
21 21
22 22 activerecord_error_inclusion: nie jest zawarte na liście
23 23 activerecord_error_exclusion: jest zarezerwowane
24 24 activerecord_error_invalid: jest nieprawidłowe
25 25 activerecord_error_confirmation: nie pasuje do potwierdzenia
26 26 activerecord_error_accepted: musi być zaakceptowane
27 27 activerecord_error_empty: nie może być puste
28 28 activerecord_error_blank: nie może być czyste
29 29 activerecord_error_too_long: jest za długie
30 30 activerecord_error_too_short: jest za krótkie
31 31 activerecord_error_wrong_length: ma złą długość
32 32 activerecord_error_taken: jest już wybrane
33 33 activerecord_error_not_a_number: nie jest numerem
34 34 activerecord_error_not_a_date: nie jest prawidłową datą
35 35 activerecord_error_greater_than_start_date: musi być większe niż początkowa data
36 36 activerecord_error_not_same_project: nie należy do tego samego projektu
37 37 activerecord_error_circular_dependency: Ta relacja może wytworzyć kołową zależność
38 38
39 39 general_fmt_age: %d lat
40 40 general_fmt_age_plural: %d lat
41 41 general_fmt_date: %%m/%%d/%%Y
42 42 general_fmt_datetime: %%m/%%d/%%Y %%I:%%M %%p
43 43 general_fmt_datetime_short: %%b %%d, %%I:%%M %%p
44 44 general_fmt_time: %%I:%%M %%p
45 45 general_text_No: 'Nie'
46 46 general_text_Yes: 'Tak'
47 47 general_text_no: 'nie'
48 48 general_text_yes: 'tak'
49 49 general_lang_name: 'Polski'
50 50 general_csv_separator: ','
51 51 general_csv_encoding: ISO-8859-2
52 52 general_pdf_encoding: ISO-8859-2
53 53 general_day_names: Poniedziałek,Wtorek,Środa,Czwartek,Piątek,Sobota,Niedziela
54 54 general_first_day_of_week: '1'
55 55
56 56 notice_account_updated: Konto prawidłowo zaktualizowane.
57 57 notice_account_invalid_creditentials: Zły użytkownik lub hasło
58 58 notice_account_password_updated: Hasło prawidłowo zmienione.
59 59 notice_account_wrong_password: Złe hasło
60 60 notice_account_register_done: Konto prawidłowo stworzone.
61 61 notice_account_unknown_email: Nieznany użytkownik.
62 62 notice_can_t_change_password: To konto ma zewnętrzne źródło identyfikacji. Nie możesz zmienić hasła.
63 63 notice_account_lost_email_sent: Email z instrukcjami zmiany hasła został wysłany do Ciebie.
64 64 notice_account_activated: Twoje konto zostało aktywowane. Możesz się zalogować.
65 65 notice_successful_create: Udane stworzenie.
66 66 notice_successful_update: Udane poprawienie.
67 67 notice_successful_delete: Udane usunięcie.
68 68 notice_successful_connection: Udane nawiązanie połączenia.
69 69 notice_file_not_found: Strona do której próbujesz się dostać nie istnieje lub została usunięta.
70 70 notice_locking_conflict: Dane poprawione przez innego użytkownika.
71 71 notice_not_authorized: Nie jesteś autoryzowany by zobaczyć stronę.
72 72
73 error_scm_not_found: "Wejście i/lub zmiana nie istnieje w repozytorium."
73 error_scm_not_found: "Obiekt lub wersja nie zostały znalezione w repozytorium."
74 74 error_scm_command_failed: "An error occurred when trying to access the repository: %s"
75 75
76 76 mail_subject_lost_password: Twoje hasło do %s
77 77 mail_body_lost_password: 'W celu zmiany swojego hasła użyj poniższego odnośnika:'
78 78 mail_subject_register: Aktywacja konta w %s
79 79 mail_body_register: 'W celu aktywacji Twojego konta, użyj poniższego odnośnika:'
80 80
81 81 gui_validation_error: 1 błąd
82 82 gui_validation_error_plural: %d błędów
83 83
84 84 field_name: Nazwa
85 85 field_description: Opis
86 86 field_summary: Podsumowanie
87 87 field_is_required: Wymagane
88 88 field_firstname: Imię
89 89 field_lastname: Nazwisko
90 90 field_mail: Email
91 91 field_filename: Plik
92 92 field_filesize: Rozmiar
93 93 field_downloads: Pobrań
94 94 field_author: Autor
95 95 field_created_on: Stworzone
96 96 field_updated_on: Zmienione
97 97 field_field_format: Format
98 98 field_is_for_all: Dla wszystkich projektów
99 99 field_possible_values: Możliwe wartości
100 100 field_regexp: Wyrażenie regularne
101 101 field_min_length: Minimalna długość
102 102 field_max_length: Maksymalna długość
103 103 field_value: Wartość
104 104 field_category: Kategoria
105 105 field_title: Tytuł
106 106 field_project: Projekt
107 107 field_issue: Zagadnienie
108 108 field_status: Status
109 109 field_notes: Notatki
110 110 field_is_closed: Zagadnienie zamknięte
111 111 field_is_default: Domyślny status
112 112 field_tracker: Typ zagadnienia
113 113 field_subject: Temat
114 114 field_due_date: Data oddania
115 115 field_assigned_to: Przydzielony do
116 116 field_priority: Priorytet
117 117 field_fixed_version: Wersja docelowa
118 118 field_user: Użytkownik
119 119 field_role: Rola
120 120 field_homepage: Strona www
121 121 field_is_public: Publiczny
122 field_parent: Podprojekt
122 field_parent: Nadprojekt
123 123 field_is_in_chlog: Zagadnienie pokazywane w zapisie zmian
124 124 field_is_in_roadmap: Zagadnienie pokazywane na mapie
125 125 field_login: Login
126 126 field_mail_notification: Powiadomienia Email
127 127 field_admin: Administrator
128 128 field_last_login_on: Ostatnie połączenie
129 129 field_language: Język
130 130 field_effective_date: Data
131 131 field_password: Hasło
132 132 field_new_password: Nowe hasło
133 133 field_password_confirmation: Potwierdzenie
134 134 field_version: Wersja
135 135 field_type: Typ
136 136 field_host: Host
137 137 field_port: Port
138 138 field_account: Konto
139 139 field_base_dn: Base DN
140 140 field_attr_login: Login atrybut
141 141 field_attr_firstname: Imię atrybut
142 142 field_attr_lastname: Nazwisko atrybut
143 143 field_attr_mail: Email atrybut
144 144 field_onthefly: Tworzenie użytkownika w locie
145 145 field_start_date: Start
146 146 field_done_ratio: %% Wykonane
147 147 field_auth_source: Tryb identyfikacji
148 148 field_hide_mail: Ukryj mój adres email
149 149 field_comments: Komentarz
150 150 field_url: URL
151 151 field_start_page: Strona startowa
152 152 field_subproject: Podprojekt
153 153 field_hours: Godzin
154 154 field_activity: Aktywność
155 155 field_spent_on: Data
156 156 field_identifier: Identifikator
157 157 field_is_filter: Atrybut filtrowania
158 158 field_issue_to_id: Powiązania zagadnienia
159 159 field_delay: Opóźnienie
160 160 field_default_value: Domyślny
161 161
162 162 setting_app_title: Tytuł aplikacji
163 163 setting_app_subtitle: Podtytuł aplikacji
164 164 setting_welcome_text: Tekst powitalny
165 165 setting_default_language: Domyślny język
166 166 setting_login_required: Identyfikacja wymagana
167 167 setting_self_registration: Własna rejestracja umożliwiona
168 168 setting_attachment_max_size: Maks. rozm. załącznika
169 169 setting_issues_export_limit: Limit eksportu zagadnień
170 170 setting_mail_from: Adres email wysyłki
171 171 setting_host_name: Nazwa hosta
172 172 setting_text_formatting: Formatowanie tekstu
173 173 setting_wiki_compression: Kompresja historii Wiki
174 174 setting_feeds_limit: Limit danych RSS
175 setting_autofetch_changesets: Auto-odświeżanie CVS
175 setting_autofetch_changesets: Automatyczne pobieranie zmian
176 176 setting_sys_api_enabled: Włączenie WS do zarządzania repozytorium
177 setting_commit_ref_keywords: Terminy odnoszące (CVS)
178 setting_commit_fix_keywords: Terminy ustalające (CVS)
177 setting_commit_ref_keywords: Słowa tworzące powiązania
178 setting_commit_fix_keywords: Słowa zmieniające status
179 179 setting_autologin: Auto logowanie
180 180 setting_date_format: Format daty
181 181
182 182 label_user: Użytkownik
183 183 label_user_plural: Użytkownicy
184 184 label_user_new: Nowy użytkownik
185 185 label_project: Projekt
186 186 label_project_new: Nowy projekt
187 187 label_project_plural: Projekty
188 188 label_project_all: Wszystkie projekty
189 189 label_project_latest: Ostatnie projekty
190 190 label_issue: Zagadnienie
191 191 label_issue_new: Nowe zagadnienie
192 192 label_issue_plural: Zagadnienia
193 193 label_issue_view_all: Zobacz wszystkie zagadnienia
194 194 label_document: Dokument
195 195 label_document_new: Nowy dokument
196 196 label_document_plural: Dokumenty
197 197 label_role: Rola
198 198 label_role_plural: Role
199 199 label_role_new: Nowa rola
200 200 label_role_and_permissions: Role i Uprawnienia
201 201 label_member: Uczestnik
202 202 label_member_new: Nowy uczestnik
203 203 label_member_plural: Uczestnicy
204 204 label_tracker: Typ zagadnienia
205 205 label_tracker_plural: Typy zagadnień
206 206 label_tracker_new: Nowy typ zagadnienia
207 207 label_workflow: Przepływ
208 208 label_issue_status: Status zagadnienia
209 209 label_issue_status_plural: Statusy zagadnień
210 210 label_issue_status_new: Nowy status
211 211 label_issue_category: Kategoria zagadnienia
212 212 label_issue_category_plural: Kategorie zagadnień
213 213 label_issue_category_new: Nowa kategoria
214 214 label_custom_field: Dowolne pole
215 215 label_custom_field_plural: Dowolne pola
216 216 label_custom_field_new: Nowe dowolne pole
217 217 label_enumerations: Wyliczenia
218 218 label_enumeration_new: Nowa wartość
219 219 label_information: Informacja
220 220 label_information_plural: Informacje
221 221 label_please_login: Zaloguj się
222 222 label_register: Rejestracja
223 223 label_password_lost: Zapomniane hasło
224 224 label_home: Główna
225 225 label_my_page: Moja strona
226 226 label_my_account: Moje konto
227 227 label_my_projects: Moje projekty
228 228 label_administration: Administracja
229 229 label_login: Login
230 230 label_logout: Wylogowanie
231 231 label_help: Pomoc
232 232 label_reported_issues: Wprowadzone zagadnienia
233 233 label_assigned_to_me_issues: Zagadnienia przypisane do mnie
234 234 label_last_login: Ostatnie połączenie
235 235 label_last_updates: Ostatnia zmieniana
236 236 label_last_updates_plural: %d ostatnie zmiany
237 237 label_registered_on: Zarejestrowany
238 238 label_activity: Aktywność
239 239 label_new: Nowy
240 240 label_logged_as: Zalogowany jako
241 241 label_environment: Środowisko
242 242 label_authentication: Identyfikacja
243 243 label_auth_source: Tryb identyfikacji
244 244 label_auth_source_new: Nowy tryb identyfikacji
245 245 label_auth_source_plural: Tryby identyfikacji
246 246 label_subproject_plural: Podprojekty
247 247 label_min_max_length: Min - Maks długość
248 248 label_list: Lista
249 249 label_date: Data
250 250 label_integer: Liczba całkowita
251 251 label_boolean: Wartość logiczna
252 252 label_string: Tekst
253 253 label_text: Długi tekst
254 254 label_attribute: Atrybut
255 255 label_attribute_plural: Atrybuty
256 256 label_download: %d Pobranie
257 257 label_download_plural: %d Pobrania
258 258 label_no_data: Brak danych do pokazania
259 259 label_change_status: Status zmian
260 260 label_history: Historia
261 261 label_attachment: Plik
262 262 label_attachment_new: Nowy plik
263 263 label_attachment_delete: Skasuj plik
264 264 label_attachment_plural: Pliki
265 265 label_report: Raport
266 266 label_report_plural: Raporty
267 267 label_news: Wiadomość
268 268 label_news_new: Dodaj wiadomość
269 269 label_news_plural: Wiadomości
270 270 label_news_latest: Ostatnie wiadomości
271 271 label_news_view_all: Pokaż wszystkie wiadomości
272 272 label_change_log: Lista zmian
273 273 label_settings: Ustawienia
274 274 label_overview: Przegląd
275 275 label_version: Wersja
276 276 label_version_new: Nowa wersja
277 277 label_version_plural: Wersje
278 278 label_confirmation: Potwierdzenie
279 279 label_export_to: Eksportuj do
280 280 label_read: Czytanie...
281 281 label_public_projects: Projekty publiczne
282 282 label_open_issues: otwarte
283 283 label_open_issues_plural: otwarte
284 284 label_closed_issues: zamknięte
285 285 label_closed_issues_plural: zamknięte
286 286 label_total: Ogółem
287 287 label_permissions: Uprawnienia
288 288 label_current_status: Obecny status
289 289 label_new_statuses_allowed: Uprawnione nowe statusy
290 290 label_all: wszystko
291 291 label_none: brak
292 292 label_next: Następne
293 293 label_previous: Poprzednie
294 294 label_used_by: Używane przez
295 295 label_details: Szczegóły
296 296 label_add_note: Dodaj notatkę
297 297 label_per_page: Na stronę
298 298 label_calendar: Kalendarz
299 299 label_months_from: miesiące od
300 300 label_gantt: Gantt
301 301 label_internal: Wewnętrzny
302 302 label_last_changes: ostatnie %d zmian
303 303 label_change_view_all: Pokaż wszystkie zmiany
304 304 label_personalize_page: Personalizuj tą stronę
305 305 label_comment: Komentarz
306 306 label_comment_plural: Komentarze
307 307 label_comment_add: Dodaj komentarz
308 308 label_comment_added: Komentarz dodany
309 309 label_comment_delete: Usuń komentarze
310 310 label_query: Dowolne zapytanie
311 311 label_query_plural: Dowolne zapytania
312 312 label_query_new: Nowe zapytanie
313 313 label_filter_add: Dodaj filtr
314 314 label_filter_plural: Filtry
315 315 label_equals: jest
316 316 label_not_equals: nie jest
317 317 label_in_less_than: w mniejszych od
318 318 label_in_more_than: w większych niż
319 319 label_in: w
320 320 label_today: dzisiaj
321 321 label_less_than_ago: dni mniej
322 322 label_more_than_ago: dni więcej
323 323 label_ago: dni temu
324 324 label_contains: zawiera
325 325 label_not_contains: nie zawiera
326 326 label_day_plural: dni
327 327 label_repository: Repozytorium
328 328 label_browse: Przegląd
329 329 label_modification: %d modyfikacja
330 330 label_modification_plural: %d modyfikacja
331 label_revision: Zmiana
332 label_revision_plural: Zmiany
331 label_revision: Rewizja
332 label_revision_plural: Rewizje
333 333 label_added: dodane
334 334 label_modified: zmodyfikowane
335 335 label_deleted: usunięte
336 label_latest_revision: Ostatnia zmiana
337 label_latest_revision_plural: Ostatnie zmiany
338 label_view_revisions: Pokaż zmiany
336 label_latest_revision: Najnowsza rewizja
337 label_latest_revision_plural: Najnowsze rewizje
338 label_view_revisions: Pokaż rewizje
339 339 label_max_size: Maksymalny rozmiar
340 340 label_on: 'z'
341 341 label_sort_highest: Przesuń na górę
342 342 label_sort_higher: Do góry
343 343 label_sort_lower: Do dołu
344 344 label_sort_lowest: Przesuń na dół
345 345 label_roadmap: Mapa
346 346 label_roadmap_due_in: W czasie
347 347 label_roadmap_no_issues: Brak zagadnień do tej wersji
348 348 label_search: Szukaj
349 349 label_result_plural: Rezultatów
350 350 label_all_words: Wszystkie słowa
351 351 label_wiki: Wiki
352 352 label_wiki_edit: Edycja wiki
353 353 label_wiki_edit_plural: Edycje wiki
354 354 label_wiki_page: Strona wiki
355 355 label_wiki_page_plural: Strony wiki
356 356 label_index_by_title: Indeks
357 357 label_index_by_date: Index by date
358 358 label_current_version: Obecna wersja
359 359 label_preview: Podgląd
360 360 label_feed_plural: Ilość RSS
361 361 label_changes_details: Szczegóły wszystkich zmian
362 362 label_issue_tracking: Śledzenie zagadnień
363 363 label_spent_time: Spędzony czas
364 364 label_f_hour: %.2f godzina
365 365 label_f_hour_plural: %.2f godzin
366 366 label_time_tracking: Śledzenie czasu
367 367 label_change_plural: Zmiany
368 368 label_statistics: Statystyki
369 label_commits_per_month: Wrzutek CVS w miesiącu
370 label_commits_per_author: Wrzutek CVS przez autora
369 label_commits_per_month: Zatwierdzenia według miesięcy
370 label_commits_per_author: Zatwierdzenia według autorów
371 371 label_view_diff: Pokaż różnice
372 372 label_diff_inline: w linii
373 373 label_diff_side_by_side: obok siebie
374 374 label_options: Opcje
375 375 label_copy_workflow_from: Kopiuj przepływ z
376 376 label_permissions_report: Raport uprawnień
377 377 label_watched_issues: Obserwowane zagadnienia
378 378 label_related_issues: Powiązane zagadnienia
379 379 label_applied_status: Stosowany status
380 380 label_loading: Ładowanie...
381 381 label_relation_new: Nowe powiązanie
382 382 label_relation_delete: Usuń powiązanie
383 383 label_relates_to: powiązane z
384 384 label_duplicates: duplikaty
385 385 label_blocks: blokady
386 386 label_blocked_by: zablokowane przez
387 387 label_precedes: poprzedza
388 388 label_follows: podąża
389 389 label_end_to_start: koniec do początku
390 390 label_end_to_end: koniec do końca
391 391 label_start_to_start: początek do początku
392 392 label_start_to_end: początek do końca
393 393 label_stay_logged_in: Pozostań zalogowany
394 394 label_disabled: zablokowany
395 395 label_show_completed_versions: Pokaż kompletne wersje
396 396 label_me: ja
397 397 label_board: Forum
398 398 label_board_new: Nowe forum
399 399 label_board_plural: Fora
400 400 label_topic_plural: Tematy
401 401 label_message_plural: Wiadomości
402 402 label_message_last: Ostatnia wiadomość
403 403 label_message_new: Nowa wiadomość
404 404 label_reply_plural: Odpowiedzi
405 405 label_send_information: Wyślij informację użytkownikowi
406 406 label_year: Rok
407 407 label_month: Miesiąc
408 408 label_week: Tydzień
409 409 label_date_from: Z
410 410 label_date_to: Do
411 411 label_language_based: Na podstawie języka
412 412
413 413 button_login: Login
414 414 button_submit: Wyślij
415 415 button_save: Zapisz
416 416 button_check_all: Zaznacz wszystko
417 417 button_uncheck_all: Odznacz wszystko
418 418 button_delete: Usuń
419 419 button_create: Stwórz
420 420 button_test: Testuj
421 421 button_edit: Edytuj
422 422 button_add: Dodaj
423 423 button_change: Zmień
424 424 button_apply: Ustaw
425 425 button_clear: Wyczyść
426 426 button_lock: Zablokuj
427 427 button_unlock: Odblokuj
428 428 button_download: Pobierz
429 429 button_list: Lista
430 430 button_view: Pokaż
431 431 button_move: Przenieś
432 432 button_back: Wstecz
433 433 button_cancel: Anuluj
434 434 button_activate: Aktywuj
435 435 button_sort: Sortuj
436 436 button_log_time: Log czasu
437 437 button_rollback: Przywróc do tej wersji
438 438 button_watch: Obserwuj
439 439 button_unwatch: Nie obserwuj
440 440 button_reply: Odpowiedz
441 441 button_archive: Archiwizuj
442 442 button_unarchive: Przywróc z archiwum
443 443
444 444 status_active: aktywny
445 445 status_registered: zarejestrowany
446 446 status_locked: zablokowany
447 447
448 448 text_select_mail_notifications: Zaznacz czynności przy których użytkownik powinien być powiadomiony mailem.
449 449 text_regexp_info: np. ^[A-Z0-9]+$
450 450 text_min_max_length_info: 0 oznacza brak restrykcji
451 451 text_project_destroy_confirmation: Jesteś pewien, że chcesz usunąć ten projekt i wszyskie powiązane dane?
452 452 text_workflow_edit: Zaznacz rolę i typ zagadnienia do edycji przepływu
453 453 text_are_you_sure: Jesteś pewien ?
454 454 text_journal_changed: zmienione %s do %s
455 455 text_journal_set_to: ustawione na %s
456 456 text_journal_deleted: usunięte
457 457 text_tip_task_begin_day: zadanie zaczynające się dzisiaj
458 458 text_tip_task_end_day: zadanie kończące się dzisiaj
459 459 text_tip_task_begin_end_day: zadanie zaczynające i kończące się dzisiaj
460 460 text_project_identifier_info: 'Małe litery (a-z), liczby i myślniki dozwolone.<br />Raz zapisany, identyfikator nie może być zmieniony.'
461 461 text_caracters_maximum: %d znaków maksymalnie.
462 462 text_length_between: Długość pomiędzy %d i %d znaków.
463 463 text_tracker_no_workflow: Brak przepływu zefiniowanego dla tego typu zagadnienia
464 464 text_unallowed_characters: Niedozwolone znaki
465 465 text_comma_separated: Wielokrotne wartości dozwolone (rozdzielone przecinkami).
466 text_issues_ref_in_commit_messages: Zagadnienia odnoszące i ustalające we wrzutkach CVS
466 text_issues_ref_in_commit_messages: Odwołania do zagadni w komentarzach zatwierdzeń
467 467
468 468 default_role_manager: Kierownik
469 469 default_role_developper: Programista
470 470 default_role_reporter: Wprowadzajacy
471 471 default_tracker_bug: Błąd
472 472 default_tracker_feature: Zadanie
473 473 default_tracker_support: Wsparcie
474 474 default_issue_status_new: Nowy
475 475 default_issue_status_assigned: Przypisany
476 476 default_issue_status_resolved: Rozwiązany
477 477 default_issue_status_feedback: Odpowiedź
478 478 default_issue_status_closed: Zamknięty
479 479 default_issue_status_rejected: Odrzucony
480 480 default_doc_category_user: Dokumentacja użytkownika
481 481 default_doc_category_tech: Dokumentacja techniczna
482 482 default_priority_low: Niski
483 483 default_priority_normal: Normalny
484 484 default_priority_high: Wysoki
485 485 default_priority_urgent: Pilny
486 486 default_priority_immediate: Natychmiastowy
487 487 default_activity_design: Projektowanie
488 488 default_activity_development: Rozwój
489 489
490 490 enumeration_issue_priorities: Priorytety zagadnień
491 491 enumeration_doc_categories: Kategorie dokumentów
492 492 enumeration_activities: Działania (śledzenie czasu)
493 493 button_rename: Zmień nazwę
494 494 text_issue_category_destroy_question: Zagadnienia (%d) są przypisane do tej kategorii. Co chcesz uczynić?
495 495 label_feeds_access_key_created_on: Klucz dostępu RSS stworzony %s dni temu
496 496 setting_cross_project_issue_relations: Zezwól na powiązania zagadnień między projektami
497 497 label_roadmap_overdue: %s spóźnienia
498 498 label_module_plural: Moduły
499 499 label_this_week: ten tydzień
500 500 label_jump_to_a_project: Skocz do projektu...
501 501 field_assignable: Zagadnienia mogą być przypisane do tej roli
502 502 label_sort_by: Sortuj po %s
503 503 text_issue_updated: Zagadnienie %s zostało zaktualizowane (by %s).
504 504 notice_feeds_access_key_reseted: Twój klucz dostępu RSS został zrestetowany.
505 505 field_redirect_existing_links: Przekierowanie istniejących odnośników
506 506 text_issue_category_reassign_to: Przydziel zagadnienie do tej kategorii
507 507 notice_email_sent: Email został wysłany do %s
508 508 text_issue_added: Zagadnienie %s zostało wprowadzone (by %s).
509 509 text_wiki_destroy_confirmation: Jesteś pewien, że chcesz usunąć to wiki i całą jego zawartość ?
510 510 notice_email_error: Wystąpił błąd w trakcie wysyłania maila (%s)
511 511 label_updated_time: Zaktualizowane %s temu
512 512 text_issue_category_destroy_assignments: Usuń przydziały kategorii
513 513 label_send_test_email: Wyślij próbny email
514 514 button_reset: Resetuj
515 515 label_added_time_by: Dodane przez %s %s temu
516 516 field_estimated_hours: Szacowany czas
517 517 label_file_plural: Pliki
518 518 label_changeset_plural: Zestawienia zmian
519 519 field_column_names: Nazwy kolumn
520 520 label_default_columns: Domyślne kolumny
521 521 setting_issue_list_default_columns: Domyślne kolumny wiświetlane na liście zagadnień
522 522 setting_repositories_encodings: Kodowanie repozytoriów
523 523 notice_no_issue_selected: "Nie wybrano zagadnienia! Zaznacz zagadnienie, które chcesz edytować."
524 524 label_bulk_edit_selected_issues: Zbiorowa edycja zagadnień
525 525 label_no_change_option: (Bez zmian)
526 526 notice_failed_to_save_issues: "Błąd podczas zapisu zagadnień %d z %d zaznaczonych: %s."
527 527 label_theme: Temat
528 528 label_default: Domyślne
529 529 label_search_titles_only: Przeszukuj tylko tytuły
530 530 label_nobody: nikt
531 531 button_change_password: Zmień hasło
532 532 text_user_mail_option: "W przypadku niezaznaczonych projektów, będziesz otrzymywał powiadomienia tylko na temat zagadnien, które obserwujesz, lub w których bierzesz udział (np. jesteś autorem lub adresatem)."
533 533 label_user_mail_option_selected: "Tylko dla każdego zdarzenia w wybranych projektach..."
534 534 label_user_mail_option_all: "Dla każdego zdarzenia w każdym moim projekcie"
535 535 label_user_mail_option_none: "Tylko to co obserwuje lub w czym biorę udział"
536 536 setting_emails_footer: Stopka e-mail
537 537 label_float: Liczba rzeczywista
538 538 button_copy: Kopia
539 539 mail_body_account_information_external: Możesz użyć twojego "%s" konta do zalogowania.
540 540 mail_body_account_information: Twoje konto
541 541 setting_protocol: Protokoł
542 542 label_user_mail_no_self_notified: "Nie chcę powiadomień o zmianach, które sam wprowadzam."
543 543 setting_time_format: Format czasu
544 544 label_registration_activation_by_email: aktywacja konta przez e-mail
545 545 mail_subject_account_activation_request: Zapytanie aktywacyjne konta %s
546 546 mail_body_account_activation_request: 'Zarejestrowano nowego użytkownika: (%s). Konto oczekuje na twoje zatwierdzenie:'
547 547 label_registration_automatic_activation: automatyczna aktywacja kont
548 548 label_registration_manual_activation: manualna aktywacja kont
549 549 notice_account_pending: "Twoje konto zostało utworzone i oczekuje na zatwierdzenie administratora."
550 550 field_time_zone: Strefa czasowa
551 551 text_caracters_minimum: Musi być nie krótsze niż %d znaków.
552 552 setting_bcc_recipients: Odbiorcy kopii tajnej (kt/bcc)
553 553 button_annotate: Adnotuj
554 554 label_issues_by: Zagadnienia wprowadzone przez %s
555 555 field_searchable: Przeszukiwalne
556 556 label_display_per_page: 'Na stronę: %s'
557 557 setting_per_page_options: Opcje ilości obiektów na stronie
558 558 label_age: Wiek
559 559 notice_default_data_loaded: Domyślna konfiguracja została pomyślnie załadowana.
560 560 text_load_default_configuration: Załaduj domyślną konfigurację
561 561 text_no_configuration_data: "Role użytkowników, typy zagadnień, statusy zagadnień oraz przepływ pracy nie zostały jeszcze skonfigurowane.\nJest wysoce rekomendowane by załadować domyślną konfigurację. Po załadowaniu będzie możliwość edycji tych danych."
562 562 error_can_t_load_default_data: "Domyślna konfiguracja nie może być załadowana: %s"
563 563 button_update: Uaktualnij
564 564 label_change_properties: Zmień właściwości
565 565 label_general: Ogólne
566 566 label_repository_plural: Repozytoria
567 567 label_associated_revisions: Skojarzone rewizje
568 568 setting_user_format: Personalny format wyświetlania
569 569 text_status_changed_by_changeset: Zastosowane w zmianach %s.
570 570 label_more: Więcej
571 571 text_issues_destroy_confirmation: 'Czy jestes pewien, że chcesz usunąć wskazane zagadnienia?'
572 572 label_scm: SCM
573 573 text_select_project_modules: 'Wybierz moduły do aktywacji w tym projekcie:'
574 574 label_issue_added: Dodano zagadnienie
575 575 label_issue_updated: Uaktualniono zagadnienie
576 576 label_document_added: Dodano dokument
577 577 label_message_posted: Dodano wiadomość
578 578 label_file_added: Dodano plik
579 579 label_news_added: Dodano wiadomość
580 580 project_module_boards: Fora
581 581 project_module_issue_tracking: Śledzenie zagadnień
582 582 project_module_wiki: Wiki
583 583 project_module_files: Pliki
584 584 project_module_documents: Dokumenty
585 585 project_module_repository: Repozytorium
586 586 project_module_news: Wiadomości
587 587 project_module_time_tracking: Śledzenie czasu
588 588 text_file_repository_writable: Zapisywalne repozytorium plików
589 589 text_default_administrator_account_changed: Zmieniono domyślne hasło administratora
590 590 text_rmagick_available: RMagick dostępne (opcjonalnie)
591 591 button_configure: Konfiguruj
592 592 label_plugins: Wtyczki
593 593 label_ldap_authentication: Autoryzacja LDAP
594 594 label_downloads_abbr: Pobieranie
595 595 label_this_month: ten miesiąc
596 596 label_last_n_days: ostatnie %d dni
597 597 label_all_time: cały czas
598 598 label_this_year: ten rok
599 599 label_date_range: Zakres datowy
600 600 label_last_week: ostatni tydzień
601 601 label_yesterday: wczoraj
602 602 label_last_month: ostatni miesiąc
603 603 label_add_another_file: Dodaj kolejny plik
604 604 label_optional_description: Opcjonalny opis
605 605 text_destroy_time_entries_question: Zalogowano %.02f godzin przy zagadnieniu, które chcesz usunąć. Co chcesz zrobić?
606 606 error_issue_not_found_in_project: 'Zaganienie nie zostało znalezione lub nie należy do tego projektu'
607 607 text_assign_time_entries_to_project: Przypisz logowany czas do projektu
608 608 text_destroy_time_entries: Usuń zalogowany czas
609 609 text_reassign_time_entries: 'Przepnij zalogowany czas do tego zagadnienia:'
610 610 label_chronological_order: W kolejności chronologicznej
611 611 setting_activity_days_default: Dni wyświetlane w aktywności projektu
612 612 setting_display_subprojects_issues: Domyślnie pokazuj zagadnienia podprojektów w głównym projekcie
613 613 field_comments_sorting: Pokazuj komentarze
614 614 label_reverse_chronological_order: W kolejności odwrotnej do chronologicznej
615 615 label_preferences: Preferencje
616 616 label_overall_activity: Ogólna aktywność
617 617 setting_default_projects_public: Nowe projekty są domyślnie publiczne
618 618 error_scm_annotate: "Wpis nie istnieje lub nie można do niego dodawać adnotacji."
619 619 label_planning: Planning
620 620 text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
This diff has been collapsed as it changes many lines, (794 lines changed) Show them Hide them
@@ -1,620 +1,620
1 1 _gloc_rule_default: '|n| n==1 ? "" : "_plural" '
2 2
3 3 actionview_datehelper_select_day_prefix:
4 actionview_datehelper_select_month_names: Janeiro,Fevereiro,Marco,Abrill,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro
4 actionview_datehelper_select_month_names: Janeiro,Fevereiro,Março,Abrill,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro
5 5 actionview_datehelper_select_month_names_abbr: Jan,Fev,Mar,Abr,Mai,Jun,Jul,Ago,Set,Out,Nov,Dez
6 6 actionview_datehelper_select_month_prefix:
7 7 actionview_datehelper_select_year_prefix:
8 8 actionview_datehelper_time_in_words_day: 1 dia
9 9 actionview_datehelper_time_in_words_day_plural: %d dias
10 actionview_datehelper_time_in_words_hour_about: sobre uma hora
11 actionview_datehelper_time_in_words_hour_about_plural: sobra %d horas
12 actionview_datehelper_time_in_words_hour_about_single: sobre uma hora
10 actionview_datehelper_time_in_words_hour_about: aproximadamente uma hora
11 actionview_datehelper_time_in_words_hour_about_plural: aproximadamente %d horas
12 actionview_datehelper_time_in_words_hour_about_single: aproximadamente uma hora
13 13 actionview_datehelper_time_in_words_minute: 1 minuto
14 14 actionview_datehelper_time_in_words_minute_half: meio minuto
15 actionview_datehelper_time_in_words_minute_less_than: menos que um minuto
15 actionview_datehelper_time_in_words_minute_less_than: menos de um minuto
16 16 actionview_datehelper_time_in_words_minute_plural: %d minutos
17 17 actionview_datehelper_time_in_words_minute_single: 1 minuto
18 actionview_datehelper_time_in_words_second_less_than: menos que um segundo
19 actionview_datehelper_time_in_words_second_less_than_plural: menos que %d segundos
18 actionview_datehelper_time_in_words_second_less_than: menos de um segundo
19 actionview_datehelper_time_in_words_second_less_than_plural: menos de %d segundos
20 20 actionview_instancetag_blank_option: Selecione
21 21
22 activerecord_error_inclusion: nao esta incluido na lista
23 activerecord_error_exclusion: esta reservado
24 activerecord_error_invalid: e invalido
25 activerecord_error_confirmation: confirmacao nao confere
22 activerecord_error_inclusion: não está incluso na lista
23 activerecord_error_exclusion: está reservado
24 activerecord_error_invalid: é inválido
25 activerecord_error_confirmation: confirmação não confere
26 26 activerecord_error_accepted: deve ser aceito
27 activerecord_error_empty: nao pode ser vazio
28 activerecord_error_blank: nao pode estar em branco
29 activerecord_error_too_long: e muito longo
30 activerecord_error_too_short: e muito comprido
31 activerecord_error_wrong_length: esta com o comprimento errado
32 activerecord_error_taken: ja esta examinado
33 activerecord_error_not_a_number: nao e um numero
34 activerecord_error_not_a_date: nao e uma data valida
27 activerecord_error_empty: não pode ser vazio
28 activerecord_error_blank: não pode estar em branco
29 activerecord_error_too_long: é muito longo
30 activerecord_error_too_short: é muito curto
31 activerecord_error_wrong_length: esta com o tamanho errado
32 activerecord_error_taken: já foi obtido
33 activerecord_error_not_a_number: não é um numero
34 activerecord_error_not_a_date: não é uma data valida
35 35 activerecord_error_greater_than_start_date: deve ser maior que a data inicial
36 activerecord_error_not_same_project: doesn't belong to the same project
37 activerecord_error_circular_dependency: This relation would create a circular dependency
36 activerecord_error_not_same_project: não pode pertencer ao mesmo projeto
37 activerecord_error_circular_dependency: Esta relação geraria uma dependência circular
38 38
39 general_fmt_age: %d yr
40 general_fmt_age_plural: %d yrs
41 general_fmt_date: %%m/%%d/%%Y
42 general_fmt_datetime: %%m/%%d/%%Y %%I:%%M %%p
39 general_fmt_age: %d ano
40 general_fmt_age_plural: %d anos
41 general_fmt_date: %%d/%%m/%%Y
42 general_fmt_datetime: %%d/%%m/%%Y %%I:%%M %%p
43 43 general_fmt_datetime_short: %%b %%d, %%I:%%M %%p
44 44 general_fmt_time: %%I:%%M %%p
45 general_text_No: 'Nao'
45 general_text_No: 'Não'
46 46 general_text_Yes: 'Sim'
47 general_text_no: 'nao'
47 general_text_no: 'não'
48 48 general_text_yes: 'sim'
49 general_lang_name: 'Portugues Brasileiro'
49 general_lang_name: 'Português(Brasil)'
50 50 general_csv_separator: ','
51 51 general_csv_encoding: ISO-8859-1
52 52 general_pdf_encoding: ISO-8859-1
53 general_day_names: Segunda,Terca,Quarta,Quinta,Sexta,Sabado,Domingo
53 general_day_names: Segunda,Terça,Quarta,Quinta,Sexta,Sabado,Domingo
54 54 general_first_day_of_week: '1'
55 55
56 56 notice_account_updated: Conta foi alterada com sucesso.
57 notice_account_invalid_creditentials: Usuario ou senha invalido.
58 notice_account_password_updated: Senha foi alterada com sucesso.
59 notice_account_wrong_password: Senha errada.
60 notice_account_register_done: Conta foi criada com sucesso.
61 notice_account_unknown_email: Usuario desconhecido.
62 notice_can_t_change_password: Esta conta usa autenticacao externa. E impossivel trocar a senha.
63 notice_account_lost_email_sent: Um email com instrucoes para escolher uma nova senha foi enviado para voce.
64 notice_account_activated: Sua conta foi ativada. Voce pode logar agora
57 notice_account_invalid_creditentials: Usuário ou senha inválido.
58 notice_account_password_updated: Senha alterada com sucesso.
59 notice_account_wrong_password: Senha inválida.
60 notice_account_register_done: Conta criada com sucesso.
61 notice_account_unknown_email: Usuário desconhecido.
62 notice_can_t_change_password: Esta conta usa autenticação externa. E impossível alterar a senha.
63 notice_account_lost_email_sent: Um email com instruções para escolher uma nova senha foi enviado para você.
64 notice_account_activated: Sua conta foi ativada. Você pode acessá-la agora.
65 65 notice_successful_create: Criado com sucesso.
66 66 notice_successful_update: Alterado com sucesso.
67 notice_successful_delete: Apagado com sucesso.
67 notice_successful_delete: Excluído com sucesso.
68 68 notice_successful_connection: Conectado com sucesso.
69 notice_file_not_found: A pagina que voce esta tentando acessar nao existe ou foi excluida.
70 notice_locking_conflict: Os dados foram atualizados por um outro usuario.
71 notice_not_authorized: You are not authorized to access this page.
72 notice_email_sent: An email was sent to %s
73 notice_email_error: An error occurred while sending mail (%s)
74 notice_feeds_access_key_reseted: Your RSS access key was reseted.
69 notice_file_not_found: A página que você está tentando acessar não existe ou foi excluída.
70 notice_locking_conflict: Os dados foram atualizados por outro usuário.
71 notice_not_authorized: Você não está autorizado a acessar esta página.
72 notice_email_sent: Um email foi enviado para %s
73 notice_email_error: Um erro ocorreu ao enviar o email (%s)
74 notice_feeds_access_key_reseted: Sua chave RSS foi reconfigurada.
75 75
76 error_scm_not_found: "A entrada e/ou a revisao nao existem no repositorio."
77 error_scm_command_failed: "An error occurred when trying to access the repository: %s"
76 error_scm_not_found: "A entrada e/ou a revisão não existe no repositório."
77 error_scm_command_failed: "Ocorreu um erro ao tentar acessar o repositório: %s"
78 78
79 79 mail_subject_lost_password: Sua senha do %s.
80 80 mail_body_lost_password: 'Para mudar sua senha, clique no link abaixo:'
81 mail_subject_register: Ativacao de conta do %s.
81 mail_subject_register: Ativação de conta do %s.
82 82 mail_body_register: 'Para ativar sua conta, clique no link abaixo:'
83 83
84 84 gui_validation_error: 1 erro
85 85 gui_validation_error_plural: %d erros
86 86
87 87 field_name: Nome
88 field_description: Descricao
89 field_summary: Sumario
90 field_is_required: Obrigatorio
88 field_description: Descrição
89 field_summary: Resumo
90 field_is_required: Obrigatório
91 91 field_firstname: Primeiro nome
92 field_lastname: Ultimo nome
92 field_lastname: Último nome
93 93 field_mail: Email
94 94 field_filename: Arquivo
95 95 field_filesize: Tamanho
96 96 field_downloads: Downloads
97 97 field_author: Autor
98 field_created_on: Criado
99 field_updated_on: Alterado
98 field_created_on: Criado em
99 field_updated_on: Alterado em
100 100 field_field_format: Formato
101 101 field_is_for_all: Para todos os projetos
102 field_possible_values: Possiveis valores
103 field_regexp: Expressao regular
104 field_min_length: Tamanho minimo
105 field_max_length: Tamanho maximo
102 field_possible_values: Possíveis valores
103 field_regexp: Expressão regular
104 field_min_length: Tamanho mínimo
105 field_max_length: Tamanho máximo
106 106 field_value: Valor
107 107 field_category: Categoria
108 field_title: Titulo
108 field_title: Título
109 109 field_project: Projeto
110 field_issue: Tarefa
110 field_issue: Ticket
111 111 field_status: Status
112 112 field_notes: Notas
113 field_is_closed: Tarefa fechada
114 field_is_default: Status padrao
113 field_is_closed: Ticket fechado
114 field_is_default: Status padrão
115 115 field_tracker: Tipo
116 field_subject: Titulo
117 field_due_date: Data devida
118 field_assigned_to: Atribuido para
116 field_subject: Título
117 field_due_date: Data prevista
118 field_assigned_to: Atribuído para
119 119 field_priority: Prioridade
120 field_fixed_version: Target version
121 field_user: Usuario
122 field_role: Regra
123 field_homepage: Pagina inicial
124 field_is_public: Publico
120 field_fixed_version: Versão
121 field_user: Usuário
122 field_role: Papel
123 field_homepage: Página inicial
124 field_is_public: Público
125 125 field_parent: Sub-projeto de
126 field_is_in_chlog: Tarefas mostradas no changelog
127 field_is_in_roadmap: Tarefas mostradas no roadmap
126 field_is_in_chlog: Tarefas exibidas no registro de alterações
127 field_is_in_roadmap: Tarefas exibidas no planejamento
128 128 field_login: Login
129 field_mail_notification: Notificacoes por email
129 field_mail_notification: Notificações por email
130 130 field_admin: Administrador
131 field_last_login_on: Ultima conexao
132 field_language: Lingua
131 field_last_login_on: Última conexão
132 field_language: Idioma
133 133 field_effective_date: Data
134 134 field_password: Senha
135 135 field_new_password: Nova senha
136 field_password_confirmation: Confirmacao
137 field_version: Versao
136 field_password_confirmation: Confirmação
137 field_version: Versão
138 138 field_type: Tipo
139 139 field_host: Servidor
140 140 field_port: Porta
141 141 field_account: Conta
142 142 field_base_dn: Base DN
143 143 field_attr_login: Atributo login
144 144 field_attr_firstname: Atributo primeiro nome
145 field_attr_lastname: Atributo ultimo nome
145 field_attr_lastname: Atributo último nome
146 146 field_attr_mail: Atributo email
147 field_onthefly: Criacao de usuario on-the-fly
148 field_start_date: Inicio
147 field_onthefly: Criação automática de usuário
148 field_start_date: Início
149 149 field_done_ratio: %% Terminado
150 field_auth_source: Modo de autenticacao
151 field_hide_mail: Esconder meu email
152 field_comments: Comentario
150 field_auth_source: Modo de autenticação
151 field_hide_mail: Ocultar meu email
152 field_comments: Comentário
153 153 field_url: URL
154 field_start_page: Pagina inicial
154 field_start_page: Página inicial
155 155 field_subproject: Sub-projeto
156 156 field_hours: Horas
157 157 field_activity: Atividade
158 158 field_spent_on: Data
159 159 field_identifier: Identificador
160 field_is_filter: Used as a filter
161 field_issue_to_id: Related issue
162 field_delay: Delay
163 field_assignable: Issues can be assigned to this role
164 field_redirect_existing_links: Redirect existing links
165 field_estimated_hours: Estimated time
166 field_default_value: Padrao
160 field_is_filter: É um filtro
161 field_issue_to_id: Ticket relacionado
162 field_delay: Espera
163 field_assignable: Tickets podem ser atribuídos para este papel
164 field_redirect_existing_links: Redirecionar links existentes
165 field_estimated_hours: Tempo estimado
166 field_default_value: Padrão
167 167
168 setting_app_title: Titulo da aplicacao
169 setting_app_subtitle: Sub-titulo da aplicacao
170 setting_welcome_text: Texto de boa-vinda
171 setting_default_language: Lingua padrao
172 setting_login_required: Autenticacao obrigatoria
173 setting_self_registration: Registro de si mesmo permitido
174 setting_attachment_max_size: Tamanho maximo do anexo
175 setting_issues_export_limit: Limite de exportacao das tarefas
168 setting_app_title: Título da aplicação
169 setting_app_subtitle: Sub-título da aplicação
170 setting_welcome_text: Texto de boas-vindas
171 setting_default_language: Idioma padrão
172 setting_login_required: Autenticação obrigatória
173 setting_self_registration: Permitido Auto-registro
174 setting_attachment_max_size: Tamanho máximo do anexo
175 setting_issues_export_limit: Limite de exportação das tarefas
176 176 setting_mail_from: Email enviado de
177 177 setting_host_name: Servidor
178 178 setting_text_formatting: Formato do texto
179 setting_wiki_compression: Compactacao do historio do Wiki
179 setting_wiki_compression: Compactação de histórico do Wiki
180 180 setting_feeds_limit: Limite do Feed
181 setting_autofetch_changesets: Autofetch commits
182 setting_sys_api_enabled: Ativa WS para gerenciamento do repositorio
183 setting_commit_ref_keywords: Referencing keywords
184 setting_commit_fix_keywords: Fixing keywords
185 setting_autologin: Autologin
186 setting_date_format: Date format
187 setting_cross_project_issue_relations: Allow cross-project issue relations
181 setting_autofetch_changesets: Auto-obter commits
182 setting_sys_api_enabled: Ativa WS para gerenciamento do repositório
183 setting_commit_ref_keywords: Palavras de referência
184 setting_commit_fix_keywords: Palavras de fechamento
185 setting_autologin: Auto-login
186 setting_date_format: Formato da data
187 setting_cross_project_issue_relations: Permitir relacionar tickets entre projetos
188 188
189 label_user: Usuario
190 label_user_plural: Usuarios
191 label_user_new: Novo usuario
189 label_user: Usuário
190 label_user_plural: Usuários
191 label_user_new: Novo usuário
192 192 label_project: Projeto
193 193 label_project_new: Novo projeto
194 194 label_project_plural: Projetos
195 label_project_all: All Projects
196 label_project_latest: Ultimos projetos
197 label_issue: Tarefa
198 label_issue_new: Nova tarefa
199 label_issue_plural: Tarefas
200 label_issue_view_all: Ver todas as tarefas
195 label_project_all: Todos os projetos
196 label_project_latest: Últimos projetos
197 label_issue: Ticket
198 label_issue_new: Novo ticket
199 label_issue_plural: Tickets
200 label_issue_view_all: Ver todos os tickets
201 201 label_document: Documento
202 202 label_document_new: Novo documento
203 203 label_document_plural: Documentos
204 label_role: Regra
205 label_role_plural: Regras
206 label_role_new: Nova regra
207 label_role_and_permissions: Regras e permissoes
204 label_role: Papel
205 label_role_plural: Papéis
206 label_role_new: Novo papel
207 label_role_and_permissions: Papéis e permissões
208 208 label_member: Membro
209 209 label_member_new: Novo membro
210 210 label_member_plural: Membros
211 label_tracker: Tipo
212 label_tracker_plural: Tipos
211 label_tracker: Tipo de ticket
212 label_tracker_plural: Tipos de ticket
213 213 label_tracker_new: Novo tipo
214 214 label_workflow: Workflow
215 label_issue_status: Status da tarefa
216 label_issue_status_plural: Status das tarefas
215 label_issue_status: Status do ticket
216 label_issue_status_plural: Status dos tickets
217 217 label_issue_status_new: Novo status
218 label_issue_category: Categoria de tarefa
219 label_issue_category_plural: Categorias de tarefa
218 label_issue_category: Categoria de ticket
219 label_issue_category_plural: Categorias de tickets
220 220 label_issue_category_new: Nova categoria
221 221 label_custom_field: Campo personalizado
222 label_custom_field_plural: Campos personalizado
222 label_custom_field_plural: Campos personalizados
223 223 label_custom_field_new: Novo campo personalizado
224 label_enumerations: Enumeracao
225 label_enumeration_new: Novo valor
226 label_information: Informacao
227 label_information_plural: Informacoes
228 label_please_login: Efetue login
224 label_enumerations: 'Tipos & Categorias'
225 label_enumeration_new: Novo
226 label_information: Informação
227 label_information_plural: Informações
228 label_please_login: Efetue o login
229 229 label_register: Registre-se
230 label_password_lost: Perdi a senha
231 label_home: Pagina inicial
232 label_my_page: Minha pagina
230 label_password_lost: Perdi minha senha
231 label_home: Página inicial
232 label_my_page: Minha página
233 233 label_my_account: Minha conta
234 234 label_my_projects: Meus projetos
235 label_administration: Administracao
236 label_login: Login
237 label_logout: Logout
235 label_administration: Administração
236 label_login: Entrar
237 label_logout: Sair
238 238 label_help: Ajuda
239 label_reported_issues: Tarefas reportadas
240 label_assigned_to_me_issues: Tarefas atribuidas a mim
241 label_last_login: Utima conexao
242 label_last_updates: Ultima alteracao
243 label_last_updates_plural: %d Ultimas alteracoes
239 label_reported_issues: Tickets reportados
240 label_assigned_to_me_issues: Meus tickets
241 label_last_login: Última conexao
242 label_last_updates: Última alteração
243 label_last_updates_plural: %d Últimas alterações
244 244 label_registered_on: Registrado em
245 245 label_activity: Atividade
246 246 label_new: Novo
247 label_logged_as: Logado como
247 label_logged_as: "Acessando como:"
248 248 label_environment: Ambiente
249 label_authentication: Autenticacao
250 label_auth_source: Modo de autenticacao
251 label_auth_source_new: Novo modo de autenticacao
252 label_auth_source_plural: Modos de autenticacao
249 label_authentication: Autenticação
250 label_auth_source: Modo de autenticação
251 label_auth_source_new: Novo modo de autenticação
252 label_auth_source_plural: Modos de autenticação
253 253 label_subproject_plural: Sub-projetos
254 label_min_max_length: Tamanho min-max
254 label_min_max_length: Tamanho mín-máx
255 255 label_list: Lista
256 256 label_date: Data
257 257 label_integer: Inteiro
258 258 label_boolean: Boleano
259 259 label_string: Texto
260 260 label_text: Texto longo
261 261 label_attribute: Atributo
262 262 label_attribute_plural: Atributos
263 263 label_download: %d Download
264 264 label_download_plural: %d Downloads
265 label_no_data: Sem dados para mostrar
266 label_change_status: Mudar status
267 label_history: Historico
265 label_no_data: Nenhuma informação disponível
266 label_change_status: Alterar status
267 label_history: Histórico
268 268 label_attachment: Arquivo
269 269 label_attachment_new: Novo arquivo
270 270 label_attachment_delete: Apagar arquivo
271 271 label_attachment_plural: Arquivos
272 label_report: Relatorio
273 label_report_plural: Relatorio
274 label_news: Noticias
275 label_news_new: Adicionar noticias
276 label_news_plural: Noticias
277 label_news_latest: Ultimas noticias
278 label_news_view_all: Ver todas as noticias
279 label_change_log: Change log
280 label_settings: Ajustes
281 label_overview: Visao geral
282 label_version: Versao
283 label_version_new: Nova versao
284 label_version_plural: Versoes
285 label_confirmation: Confirmacao
272 label_report: Relatório
273 label_report_plural: Relatório
274 label_news: Notícia
275 label_news_new: Adicionar notícias
276 label_news_plural: Notícias
277 label_news_latest: Últimas notícias
278 label_news_view_all: Ver todas as notícias
279 label_change_log: Registro de alterações
280 label_settings: Configurações
281 label_overview: Visão geral
282 label_version: Versão
283 label_version_new: Nova versão
284 label_version_plural: Versões
285 label_confirmation: Confirmação
286 286 label_export_to: Exportar para
287 287 label_read: Ler...
288 label_public_projects: Projetos publicos
288 label_public_projects: Projetos públicos
289 289 label_open_issues: Aberto
290 290 label_open_issues_plural: Abertos
291 291 label_closed_issues: Fechado
292 292 label_closed_issues_plural: Fechados
293 293 label_total: Total
294 label_permissions: Permissoes
294 label_permissions: Permissões
295 295 label_current_status: Status atual
296 296 label_new_statuses_allowed: Novo status permitido
297 297 label_all: todos
298 298 label_none: nenhum
299 label_next: Proximo
299 label_next: Próximo
300 300 label_previous: Anterior
301 301 label_used_by: Usado por
302 302 label_details: Detalhes
303 303 label_add_note: Adicionar nota
304 label_per_page: Por pagina
305 label_calendar: Calendario
306 label_months_from: Meses de
304 label_per_page: Por página
305 label_calendar: Calendário
306 label_months_from: meses a partir de
307 307 label_gantt: Gantt
308 308 label_internal: Interno
309 label_last_changes: utlimas %d mudancas
310 label_change_view_all: Mostrar todas as mudancas
311 label_personalize_page: Personalizar esta pagina
312 label_comment: Comentario
313 label_comment_plural: Comentarios
314 label_comment_add: Adicionar comentario
315 label_comment_added: Comentario adicionado
316 label_comment_delete: Apagar comentario
309 label_last_changes: últimas %d alteraçoes
310 label_change_view_all: Mostrar todas as alteraçoes
311 label_personalize_page: Personalizar esta página
312 label_comment: Comentário
313 label_comment_plural: Comentários
314 label_comment_add: Adicionar comentário
315 label_comment_added: Comentário adicionado
316 label_comment_delete: Apagar comentário
317 317 label_query: Consulta personalizada
318 318 label_query_plural: Consultas personalizadas
319 319 label_query_new: Nova consulta
320 320 label_filter_add: Adicionar filtro
321 321 label_filter_plural: Filtros
322 label_equals: e
323 label_not_equals: nao e
324 label_in_less_than: e maior que
325 label_in_more_than: e menor que
322 label_equals: é
323 label_not_equals: não é
324 label_in_less_than: é maior que
325 label_in_more_than: é menor que
326 326 label_in: em
327 327 label_today: hoje
328 label_this_week: this week
328 label_this_week: esta semana
329 329 label_less_than_ago: faz menos de
330 330 label_more_than_ago: faz mais de
331 label_ago: dias atras
332 label_contains: contem
333 label_not_contains: nao contem
331 label_ago: dias atrás
332 label_contains: contém
333 label_not_contains: não contem
334 334 label_day_plural: dias
335 label_repository: Repository
336 label_browse: Browse
337 label_modification: %d change
338 label_modification_plural: %d changes
339 label_revision: Revision
340 label_revision_plural: Revisions
341 label_added: added
342 label_modified: modified
343 label_deleted: deleted
344 label_latest_revision: Latest revision
345 label_latest_revision_plural: Latest revisions
346 label_view_revisions: View revisions
347 label_max_size: Maximum size
335 label_repository: Repositório
336 label_browse: Procurar
337 label_modification: %d alteração
338 label_modification_plural: %d alterações
339 label_revision: Revisão
340 label_revision_plural: Revisões
341 label_added: adicionado
342 label_modified: modificado
343 label_deleted: excluído
344 label_latest_revision: Última revisão
345 label_latest_revision_plural: Últimas revisões
346 label_view_revisions: Visualizar revisões
347 label_max_size: Tamanho máximo
348 348 label_on: 'em'
349 label_sort_highest: Mover para o inicio
349 label_sort_highest: Mover para o início
350 350 label_sort_higher: Mover para cima
351 351 label_sort_lower: Mover para baixo
352 352 label_sort_lowest: Mover para o fim
353 label_roadmap: Roadmap
354 label_roadmap_due_in: Due in
355 label_roadmap_overdue: %s late
356 label_roadmap_no_issues: Sem tarefas para essa versao
353 label_roadmap: Planejamento
354 label_roadmap_due_in: Previsão em
355 label_roadmap_overdue: %s atrasado
356 label_roadmap_no_issues: Sem tickets para esta versão
357 357 label_search: Busca
358 358 label_result_plural: Resultados
359 359 label_all_words: Todas as palavras
360 360 label_wiki: Wiki
361 label_wiki_edit: Wiki edit
362 label_wiki_edit_plural: Wiki edits
363 label_wiki_page: Wiki page
364 label_wiki_page_plural: Wiki pages
365 label_index_by_title: Index by title
366 label_index_by_date: Index by date
367 label_current_version: Versao atual
368 label_preview: Previa
361 label_wiki_edit: Editar Wiki
362 label_wiki_edit_plural: Edições Wiki
363 label_wiki_page: Página Wiki
364 label_wiki_page_plural: Páginas Wiki
365 label_index_by_title: Índice por título
366 label_index_by_date: Índice por data
367 label_current_version: Versão atual
368 label_preview: Pré-visualizar
369 369 label_feed_plural: Feeds
370 label_changes_details: Detalhes de todas as mudancas
371 label_issue_tracking: Tarefas
370 label_changes_details: Detalhes de todas as alterações
371 label_issue_tracking: Tickets
372 372 label_spent_time: Tempo gasto
373 373 label_f_hour: %.2f hora
374 374 label_f_hour_plural: %.2f horas
375 375 label_time_tracking: Tempo trabalhado
376 label_change_plural: Mudancas
377 label_statistics: Estatisticas
378 label_commits_per_month: Commits por mes
376 label_change_plural: Mudanças
377 label_statistics: Estatísticas
378 label_commits_per_month: Commits por mês
379 379 label_commits_per_author: Commits por autor
380 label_view_diff: Ver diferencas
380 label_view_diff: Ver diferenças
381 381 label_diff_inline: inline
382 label_diff_side_by_side: side by side
383 label_options: Opcoes
382 label_diff_side_by_side: lado a lado
383 label_options: Opções
384 384 label_copy_workflow_from: Copiar workflow de
385 label_permissions_report: Relatorio de permissoes
386 label_watched_issues: Watched issues
387 label_related_issues: Related issues
388 label_applied_status: Applied status
389 label_loading: Loading...
390 label_relation_new: New relation
391 label_relation_delete: Delete relation
392 label_relates_to: related to
393 label_duplicates: duplicates
394 label_blocks: blocks
395 label_blocked_by: blocked by
396 label_precedes: precedes
397 label_follows: follows
398 label_end_to_start: end to start
399 label_end_to_end: end to end
400 label_start_to_start: start to start
401 label_start_to_end: start to end
402 label_stay_logged_in: Stay logged in
403 label_disabled: disabled
404 label_show_completed_versions: Show completed versions
405 label_me: me
406 label_board: Forum
407 label_board_new: New forum
408 label_board_plural: Forums
409 label_topic_plural: Topics
410 label_message_plural: Messages
411 label_message_last: Last message
412 label_message_new: New message
413 label_reply_plural: Replies
414 label_send_information: Send account information to the user
415 label_year: Year
416 label_month: Month
417 label_week: Week
418 label_date_from: From
419 label_date_to: To
420 label_language_based: Language based
421 label_sort_by: Sort by %s
422 label_send_test_email: Send a test email
423 label_feeds_access_key_created_on: RSS access key created %s ago
424 label_module_plural: Modules
425 label_added_time_by: Added by %s %s ago
426 label_updated_time: Updated %s ago
427 label_jump_to_a_project: Jump to a project...
385 label_permissions_report: Relatório de permissões
386 label_watched_issues: Tickes acompanhados
387 label_related_issues: Tickets relacionados
388 label_applied_status: Status aplicado
389 label_loading: Carregando...
390 label_relation_new: Nova relação
391 label_relation_delete: Excluir relação
392 label_relates_to: relacionado a
393 label_duplicates: duplicado de
394 label_blocks: bloqueia
395 label_blocked_by: bloqueado por
396 label_precedes: precede
397 label_follows: segue
398 label_end_to_start: fim para o início
399 label_end_to_end: fim para fim
400 label_start_to_start: início para início
401 label_start_to_end: início para fim
402 label_stay_logged_in: Permanecer logado
403 label_disabled: desabilitado
404 label_show_completed_versions: Exibir versões completas
405 label_me: eu
406 label_board: Fórum
407 label_board_new: Novo fórum
408 label_board_plural: Fóruns
409 label_topic_plural: Tópicos
410 label_message_plural: Mensagens
411 label_message_last: Última mensagem
412 label_message_new: Nova mensagem
413 label_reply_plural: Respostas
414 label_send_information: Enviar informação de conta para o usuário
415 label_year: Ano
416 label_month: Mês
417 label_week: Semana
418 label_date_from: De
419 label_date_to: Para
420 label_language_based: Com base no idioma
421 label_sort_by: Ordenar por %s
422 label_send_test_email: Enviar um email de teste
423 label_feeds_access_key_created_on: chave de acesso RSS criada %s atrás
424 label_module_plural: Módulos
425 label_added_time_by: Adicionado por %s %s atrás
426 label_updated_time: Atualizado %s atrás
427 label_jump_to_a_project: Ir para o projeto...
428 428
429 429 button_login: Login
430 430 button_submit: Enviar
431 431 button_save: Salvar
432 432 button_check_all: Marcar todos
433 433 button_uncheck_all: Desmarcar todos
434 434 button_delete: Apagar
435 435 button_create: Criar
436 436 button_test: Testar
437 437 button_edit: Editar
438 438 button_add: Adicionar
439 button_change: Mudar
439 button_change: Alterar
440 440 button_apply: Aplicar
441 441 button_clear: Limpar
442 442 button_lock: Bloquear
443 443 button_unlock: Desbloquear
444 444 button_download: Download
445 445 button_list: Listar
446 446 button_view: Ver
447 447 button_move: Mover
448 448 button_back: Voltar
449 449 button_cancel: Cancelar
450 450 button_activate: Ativar
451 451 button_sort: Ordenar
452 452 button_log_time: Tempo de trabalho
453 button_rollback: Voltar para esta versao
454 button_watch: Watch
455 button_unwatch: Unwatch
456 button_reply: Reply
457 button_archive: Archive
458 button_unarchive: Unarchive
459 button_reset: Reset
460 button_rename: Rename
453 button_rollback: Voltar para esta versão
454 button_watch: Acompanhar
455 button_unwatch: Não Acompanhar
456 button_reply: Responder
457 button_archive: Arquivar
458 button_unarchive: Desarquivar
459 button_reset: Redefinir
460 button_rename: Renomear
461 461
462 462 status_active: ativo
463 463 status_registered: registrado
464 464 status_locked: bloqueado
465 465
466 text_select_mail_notifications: Selecionar acoes para ser enviado uma notificacao por email
467 text_regexp_info: eg. ^[A-Z0-9]+$
468 text_min_max_length_info: 0 siginifica sem restricao
469 text_project_destroy_confirmation: Voce tem certeza que deseja deletar este projeto e todas os dados relacionados?
466 text_select_mail_notifications: Selecionar ações para ser enviado uma notificação por email
467 text_regexp_info: ex. ^[A-Z0-9]+$
468 text_min_max_length_info: 0 siginifica sem restrição
469 text_project_destroy_confirmation: Você tem certeza que deseja excluir este projeto e todos os dados relacionados?
470 470 text_workflow_edit: Selecione uma regra e um tipo de tarefa para editar o workflow
471 text_are_you_sure: Voce tem certeza ?
471 text_are_you_sure: Você tem certeza?
472 472 text_journal_changed: alterado de %s para %s
473 473 text_journal_set_to: setar para %s
474 474 text_journal_deleted: apagado
475 text_tip_task_begin_day: tarefa comeca neste dia
475 text_tip_task_begin_day: tarefa inicia neste dia
476 476 text_tip_task_end_day: tarefa termina neste dia
477 text_tip_task_begin_end_day: tarefa comeca e termina neste dia
478 text_project_identifier_info: 'Letras minusculas (a-z), numeros e tracos permitido.<br />Uma vez salvo, o identificador nao pode ser mudado.'
479 text_caracters_maximum: %d maximo de caracteres
477 text_tip_task_begin_end_day: tarefa inicia e termina neste dia
478 text_project_identifier_info: 'Letras minúsculas (a-z), números e traços permitidos.<br />Uma vez salvo, o identificador não pode ser alterado.'
479 text_caracters_maximum: máximo %d caracteres
480 480 text_length_between: Tamanho entre %d e %d caracteres.
481 481 text_tracker_no_workflow: Sem workflow definido para este tipo.
482 text_unallowed_characters: Unallowed characters
483 text_comma_separated: Multiple values allowed (comma separated).
484 text_issues_ref_in_commit_messages: Referencing and fixing issues in commit messages
485 text_issue_added: Tarefa %s foi incluída (by %s).
486 text_issue_updated: Tarefa %s foi alterada (by %s).
487 text_wiki_destroy_confirmation: Are you sure you want to delete this wiki and all its content ?
488 text_issue_category_destroy_question: Some issues (%d) are assigned to this category. What do you want to do ?
489 text_issue_category_destroy_assignments: Remove category assignments
490 text_issue_category_reassign_to: Reassing issues to this category
482 text_unallowed_characters: Caracteres não permitidos
483 text_comma_separated: Múltiplos valores são permitidos (separados por vírgula).
484 text_issues_ref_in_commit_messages: Referenciando e fixando tickets nas mensagens de commit
485 text_issue_added: Tarefa %s foi incluída (por %s).
486 text_issue_updated: Tarefa %s foi alterada (por %s).
487 text_wiki_destroy_confirmation: Você tem certeza que deseja excluir este wiki e todo o seu conteúdo?
488 text_issue_category_destroy_question: Alguns tickets (%d) estão atribuídos a esta categoria. O que você deseja fazer?
489 text_issue_category_destroy_assignments: Remover atribuições da categoria
490 text_issue_category_reassign_to: Redefinir tickets para esta categoria
491 491
492 default_role_manager: Analista de Negocio ou Gerente de Projeto
492 default_role_manager: Gerente
493 493 default_role_developper: Desenvolvedor
494 default_role_reporter: Analista de Suporte
495 default_tracker_bug: Bug
496 default_tracker_feature: Implementacao
494 default_role_reporter: Informante
495 default_tracker_bug: Problema
496 default_tracker_feature: Implementação
497 497 default_tracker_support: Suporte
498 498 default_issue_status_new: Novo
499 default_issue_status_assigned: Atribuido
499 default_issue_status_assigned: Atribuído
500 500 default_issue_status_resolved: Resolvido
501 501 default_issue_status_feedback: Feedback
502 502 default_issue_status_closed: Fechado
503 503 default_issue_status_rejected: Rejeitado
504 default_doc_category_user: Documentacao do usuario
505 default_doc_category_tech: Documentacao do tecnica
504 default_doc_category_user: Documentação do usuário
505 default_doc_category_tech: Documentação cnica
506 506 default_priority_low: Baixo
507 507 default_priority_normal: Normal
508 508 default_priority_high: Alto
509 509 default_priority_urgent: Urgente
510 510 default_priority_immediate: Imediato
511 511 default_activity_design: Design
512 512 default_activity_development: Desenvolvimento
513 513
514 514 enumeration_issue_priorities: Prioridade das tarefas
515 515 enumeration_doc_categories: Categorias de documento
516 516 enumeration_activities: Atividades (time tracking)
517 label_file_plural: Files
517 label_file_plural: Arquivos
518 518 label_changeset_plural: Changesets
519 field_column_names: Columns
520 label_default_columns: Default columns
521 setting_issue_list_default_columns: Default columns displayed on the issue list
522 setting_repositories_encodings: Repositories encodings
523 notice_no_issue_selected: "No issue is selected! Please, check the issues you want to edit."
524 label_bulk_edit_selected_issues: Bulk edit selected issues
525 label_no_change_option: (No change)
526 notice_failed_to_save_issues: "Failed to save %d issue(s) on %d selected: %s."
527 label_theme: Theme
528 label_default: Default
529 label_search_titles_only: Search titles only
530 label_nobody: nobody
531 button_change_password: Change password
532 text_user_mail_option: "For unselected projects, you will only receive notifications about things you watch or you're involved in (eg. issues you're the author or assignee)."
533 label_user_mail_option_selected: "For any event on the selected projects only..."
534 label_user_mail_option_all: "For any event on all my projects"
535 label_user_mail_option_none: "Only for things I watch or I'm involved in"
536 setting_emails_footer: Emails footer
537 label_float: Float
538 button_copy: Copy
539 mail_body_account_information_external: You can use your "%s" account to log in.
540 mail_body_account_information: Your account information
541 setting_protocol: Protocol
542 label_user_mail_no_self_notified: "I don't want to be notified of changes that I make myself"
543 setting_time_format: Time format
544 label_registration_activation_by_email: account activation by email
545 mail_subject_account_activation_request: %s account activation request
546 mail_body_account_activation_request: 'A new user (%s) has registered. His account his pending your approval:'
547 label_registration_automatic_activation: automatic account activation
548 label_registration_manual_activation: manual account activation
549 notice_account_pending: "Your account was created and is now pending administrator approval."
550 field_time_zone: Time zone
551 text_caracters_minimum: Must be at least %d characters long.
552 setting_bcc_recipients: Blind carbon copy recipients (bcc)
553 button_annotate: Annotate
554 label_issues_by: Issues by %s
555 field_searchable: Searchable
556 label_display_per_page: 'Per page: %s'
557 setting_per_page_options: Objects per page options
558 label_age: Age
559 notice_default_data_loaded: Default configuration successfully loaded.
560 text_load_default_configuration: Load the default configuration
561 text_no_configuration_data: "Roles, trackers, issue statuses and workflow have not been configured yet.\nIt is highly recommended to load the default configuration. You will be able to modify it once loaded."
562 error_can_t_load_default_data: "Default configuration could not be loaded: %s"
563 button_update: Update
564 label_change_properties: Change properties
565 label_general: General
566 label_repository_plural: Repositories
567 label_associated_revisions: Associated revisions
568 setting_user_format: Users display format
569 text_status_changed_by_changeset: Applied in changeset %s.
570 label_more: More
571 text_issues_destroy_confirmation: 'Are you sure you want to delete the selected issue(s) ?'
519 field_column_names: Colunas
520 label_default_columns: Colunas padrão
521 setting_issue_list_default_columns: Colunas padrão visíveis na lista de tickets
522 setting_repositories_encodings: Codificação dos repositórios
523 notice_no_issue_selected: "Nenhum ticket está selecionado! Por favor, marque os tickets que você deseja alterar."
524 label_bulk_edit_selected_issues: Edição em massa dos tickets selecionados.
525 label_no_change_option: (Sem alteração)
526 notice_failed_to_save_issues: "Problema ao salvar %d ticket(s) no %d selecionado: %s."
527 label_theme: Tema
528 label_default: Padrão
529 label_search_titles_only: Pesquisar somente títulos
530 label_nobody: ninguém
531 button_change_password: Alterar senha
532 text_user_mail_option: "Para projetos não selecionados, você somente receberá notificações sobre o que você acompanha ou está envolvido (ex. tickets que você é autor ou está atribuído)"
533 label_user_mail_option_selected: "Para qualquer evento somente no(s) projeto(s) selecionado(s)..."
534 label_user_mail_option_all: "Para qualquer evento em todos os meus projetos"
535 label_user_mail_option_none: "Somente eventos que eu acompanho ou estou envolvido"
536 setting_emails_footer: Rodapé dos emails
537 label_float: Flutuante
538 button_copy: Copiar
539 mail_body_account_information_external: Você pode usar sua conta "%s" para entrar.
540 mail_body_account_information: Informações de sua conta
541 setting_protocol: Protocolo
542 label_user_mail_no_self_notified: "Eu não desejo ser notificado de minhas próprias modificações"
543 setting_time_format: Formato de data
544 label_registration_activation_by_email: ativação de conta por email
545 mail_subject_account_activation_request: %s requisição de ativação de conta
546 mail_body_account_activation_request: 'Um novo usuário (%s) se registrou. A conta está aguardando sua aprovação:'
547 label_registration_automatic_activation: ativação automática de conta
548 label_registration_manual_activation: ativação manual de conta
549 notice_account_pending: "Sua conta foi criada e está aguardando aprovação do administrador."
550 field_time_zone: Fuso-horário
551 text_caracters_minimum: Precisa ter ao menos %d caracteres.
552 setting_bcc_recipients: Destinatários com cópia oculta (cco)
553 button_annotate: Anotar
554 label_issues_by: Tickets por %s
555 field_searchable: Pesquisável
556 label_display_per_page: 'Por página: %s'
557 setting_per_page_options: Opções de itens por página
558 notice_default_data_loaded: Configuração padrão carregada com sucesso.
559 text_load_default_configuration: Carregar a configuração padrão
560 text_no_configuration_data: "Os Papéis, tipos de tickets, status de tickets e workflows não foram configurados ainda.\nÉ altamente recomendado carregar as configurações padrão. Você poderá modificar estas configurações assim que carregadas."
561 error_can_t_load_default_data: "Configuração padrão não pôde ser carregada: %s"
562 button_update: Atualizar
563 label_change_properties: Alterar propriedades
564 label_general: Geral
565 label_repository_plural: Repositórios
566 label_associated_revisions: Revisões associadas
567 setting_user_format: Formato de visualização dos usuários
568 text_status_changed_by_changeset: Aplicado no changeset %s.
569 label_more: Mais
570 text_issues_destroy_confirmation: 'Você tem certeza que deseja excluir o(s) ticket(s) selecionado(s)?'
572 571 label_scm: SCM
573 text_select_project_modules: 'Select modules to enable for this project:'
574 label_issue_added: Issue added
575 label_issue_updated: Issue updated
576 label_document_added: Document added
577 label_message_posted: Message added
578 label_file_added: File added
579 label_news_added: News added
580 project_module_boards: Boards
581 project_module_issue_tracking: Issue tracking
572 text_select_project_modules: 'Selecione módulos para habilitar para este projeto:'
573 label_issue_added: Ticket adicionado
574 label_issue_updated: Ticket atualizado
575 label_document_added: Documento adicionado
576 label_message_posted: Mensagem enviada
577 label_file_added: Arquivo adicionado
578 label_news_added: Notícia adicionada
579 project_module_boards: Fóruns
580 project_module_issue_tracking: Gerenciamento de Tickets
582 581 project_module_wiki: Wiki
583 project_module_files: Files
584 project_module_documents: Documents
585 project_module_repository: Repository
586 project_module_news: News
587 project_module_time_tracking: Time tracking
588 text_file_repository_writable: File repository writable
589 text_default_administrator_account_changed: Default administrator account changed
590 text_rmagick_available: RMagick available (optional)
591 button_configure: Configure
582 project_module_files: Arquivos
583 project_module_documents: Documentos
584 project_module_repository: Repositório
585 project_module_news: Notícias
586 project_module_time_tracking: Gerenciamento de tempo
587 text_file_repository_writable: Repositório de arquivos gravável
588 text_default_administrator_account_changed: Conta de administrador padrão modificada
589 text_rmagick_available: RMagick disponível (opcional)
590 button_configure: Configuração
592 591 label_plugins: Plugins
593 label_ldap_authentication: LDAP authentication
592 label_ldap_authentication: autenticação LDAP
594 593 label_downloads_abbr: D/L
595 label_this_month: this month
596 label_last_n_days: last %d days
597 label_all_time: all time
598 label_this_year: this year
599 label_date_range: Date range
600 label_last_week: last week
601 label_yesterday: yesterday
602 label_last_month: last month
603 label_add_another_file: Add another file
604 label_optional_description: Optional description
605 text_destroy_time_entries_question: %.02f hours were reported on the issues you are about to delete. What do you want to do ?
606 error_issue_not_found_in_project: 'The issue was not found or does not belong to this project'
607 text_assign_time_entries_to_project: Assign reported hours to the project
608 text_destroy_time_entries: Delete reported hours
609 text_reassign_time_entries: 'Reassign reported hours to this issue:'
610 setting_activity_days_default: Days displayed on project activity
611 label_chronological_order: In chronological order
612 field_comments_sorting: Display comments
613 label_reverse_chronological_order: In reverse chronological order
614 label_preferences: Preferences
615 setting_display_subprojects_issues: Display subprojects issues on main projects by default
616 label_overall_activity: Overall activity
617 setting_default_projects_public: New projects are public by default
618 error_scm_annotate: "The entry does not exist or can not be annotated."
619 label_planning: Planning
620 text_subprojects_destroy_warning: 'Its subproject(s): %s will be also deleted.'
594 label_this_month: este mês
595 label_last_n_days: últimos %d dias
596 label_all_time: todo o tempo
597 label_this_year: este ano
598 label_date_range: Intervalo de datas
599 label_last_week: última semana
600 label_yesterday: ontem
601 label_last_month: último mês
602 label_add_another_file: Adicionar outro arquivo
603 label_optional_description: Descrição opcional
604 text_destroy_time_entries_question: %.02f horas foram reportadas neste ticket que você está excluindo. O que você deseja fazer?
605 error_issue_not_found_in_project: 'O ticket não foi encontrado ou não pertence a este projeto'
606 text_assign_time_entries_to_project: Atribuir horas reportadas para o projeto
607 text_destroy_time_entries: Excluir horas reportadas
608 text_reassign_time_entries: 'Redefinir horas reportadas para este ticket:'
609 setting_activity_days_default: Dias visualizados na atividade do projeto
610 label_chronological_order: Em ordem cronológica
611 field_comments_sorting: Visualizar comentários
612 label_reverse_chronological_order: Em order cronológica reversa
613 label_preferences: Preferências
614 setting_display_subprojects_issues: Visualizar tickets dos subprojetos nos projetos principais por padrão
615 label_overall_activity: Atividade geral
616 setting_default_projects_public: Novos projetos são públicos por padrão
617 error_scm_annotate: "Esta entrada não existe ou o pode ser anotada."
618 label_planning: Planejamento
619 text_subprojects_destroy_warning: 'Seu(s) subprojeto(s): %s também serão excluídos.'
620 label_age: Age
@@ -1,621 +1,622
1 1 _gloc_rule_default: '|n| n==1 ? "" : "_plural" '
2 2
3 3 actionview_datehelper_select_day_prefix:
4 4 actionview_datehelper_select_month_names: 一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月,十二月
5 5 actionview_datehelper_select_month_names_abbr: 一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月,十二月
6 6 actionview_datehelper_select_month_prefix:
7 7 actionview_datehelper_select_year_prefix:
8 8 actionview_datehelper_time_in_words_day: 1 天
9 9 actionview_datehelper_time_in_words_day_plural: %d 天
10 10 actionview_datehelper_time_in_words_hour_about: 約 1 小時
11 11 actionview_datehelper_time_in_words_hour_about_plural: 約 %d 小時
12 12 actionview_datehelper_time_in_words_hour_about_single: 約 1 小時
13 13 actionview_datehelper_time_in_words_minute: 1 分鐘
14 14 actionview_datehelper_time_in_words_minute_half: 半分鐘
15 15 actionview_datehelper_time_in_words_minute_less_than: 小於 1 分鐘
16 16 actionview_datehelper_time_in_words_minute_plural: %d 分鐘
17 17 actionview_datehelper_time_in_words_minute_single: 1 分鐘
18 18 actionview_datehelper_time_in_words_second_less_than: 小於 1 秒
19 19 actionview_datehelper_time_in_words_second_less_than_plural: 小於 %d 秒
20 20 actionview_instancetag_blank_option: 請選擇
21 21
22 22 activerecord_error_inclusion: 必須被包含
23 23 activerecord_error_exclusion: 必須被排除
24 24 activerecord_error_invalid: 不正確
25 25 activerecord_error_confirmation: 與確認欄位不相符
26 26 activerecord_error_accepted: 必須被接受
27 27 activerecord_error_empty: 不可為空值
28 28 activerecord_error_blank: 不可為空白
29 29 activerecord_error_too_long: 長度過長
30 30 activerecord_error_too_short: 長度太短
31 31 activerecord_error_wrong_length: 長度不正確
32 32 activerecord_error_taken: 已經被使用
33 33 activerecord_error_not_a_number: 不是一個數字
34 34 activerecord_error_not_a_date: 日期格式不正確
35 35 activerecord_error_greater_than_start_date: 必須在起始日期之後
36 36 activerecord_error_not_same_project: 不屬於同一個專案
37 37 activerecord_error_circular_dependency: 這個關聯會導致環狀相依
38 38
39 39 general_fmt_age: %d 年
40 40 general_fmt_age_plural: %d 年
41 41 general_fmt_date: %%m/%%d/%%Y
42 42 general_fmt_datetime: %%m/%%d/%%Y %%I:%%M %%p
43 43 general_fmt_datetime_short: %%b %%d, %%I:%%M %%p
44 44 general_fmt_time: %%I:%%M %%p
45 45 general_text_No: '否'
46 46 general_text_Yes: '是'
47 47 general_text_no: '否'
48 48 general_text_yes: '是'
49 49 general_lang_name: 'Traditional Chinese (繁體中文)'
50 50 general_csv_separator: ','
51 51 general_csv_encoding: Big5
52 52 general_pdf_encoding: Big5
53 53 general_day_names: 星期一,星期二,星期三,星期四,星期五,星期六,星期日
54 54 general_first_day_of_week: '7'
55 55
56 56 notice_account_updated: 帳戶更新資訊已儲存
57 57 notice_account_invalid_creditentials: 帳戶或密碼不正確
58 58 notice_account_password_updated: 帳戶新密碼已儲存
59 59 notice_account_wrong_password: 密碼不正確
60 60 notice_account_register_done: 帳號已建立成功。欲啟用您的帳號,請點擊系統確認信函中的啟用連結。
61 61 notice_account_unknown_email: 未知的使用者
62 62 notice_can_t_change_password: 這個帳號使用外部認證方式,無法變更其密碼。
63 63 notice_account_lost_email_sent: 包含選擇新密碼指示的電子郵件,已經寄出給您。
64 64 notice_account_activated: 您的帳號已經啟用,可用它登入系統。
65 65 notice_successful_create: 建立成功
66 66 notice_successful_update: 更新成功
67 67 notice_successful_delete: 刪除成功
68 68 notice_successful_connection: 連線成功
69 69 notice_file_not_found: 您想要存取的頁面已經不存在或被搬移至其他位置。
70 70 notice_locking_conflict: 資料已被其他使用者更新。
71 71 notice_not_authorized: 你未被授權存取此頁面。
72 72 notice_email_sent: 郵件已經成功寄送至以下收件者: %s
73 73 notice_email_error: 寄送郵件的過程中發生錯誤 (%s)
74 74 notice_feeds_access_key_reseted: 您的 RSS 存取鍵已被重新設定。
75 75 notice_failed_to_save_issues: " %d 個項目儲存失敗 (總共選取 %d 個項目): %s."
76 76 notice_no_issue_selected: "未選擇任何項目!請勾選您想要編輯的項目。"
77 77 notice_account_pending: "您的帳號已經建立,正在等待管理員的審核。"
78 78 notice_default_data_loaded: 預設組態已載入成功。
79 79
80 80 error_can_t_load_default_data: "無法載入預設組態: %s"
81 81 error_scm_not_found: SCM 儲存庫中找不到這個專案或版本。
82 82 error_scm_command_failed: "嘗試存取儲存庫時發生錯誤: %s"
83 83 error_scm_annotate: "SCM 儲存庫中無此項目或此項目無法被加註。"
84 84 error_issue_not_found_in_project: '該項目不存在或不屬於此專案'
85 85
86 86 mail_subject_lost_password: 您的 Redmine 網站密碼
87 87 mail_body_lost_password: '欲變更您的 Redmine 網站密碼, 請點選以下鏈結:'
88 88 mail_subject_register: 啟用您的 Redmine 帳號
89 89 mail_body_register: '欲啟用您的 Redmine 帳號, 請點選以下鏈結:'
90 90 mail_body_account_information_external: 您可以使用 "%s" 帳號登入 Redmine 網站。
91 91 mail_body_account_information: 您的 Redmine 帳號資訊
92 92 mail_subject_account_activation_request: Redmine 帳號啟用需求通知
93 93 mail_body_account_activation_request: '有位新用戶 (%s) 已經完成註冊,正等候您的審核:'
94 94
95 95 gui_validation_error: 1 個錯誤
96 96 gui_validation_error_plural: %d 個錯誤
97 97
98 98 field_name: 名稱
99 99 field_description: 概述
100 100 field_summary: 摘要
101 101 field_is_required: 必填
102 102 field_firstname: 名字
103 103 field_lastname: 姓氏
104 104 field_mail: 電子郵件
105 105 field_filename: 檔案名稱
106 106 field_filesize: 大小
107 107 field_downloads: 下載次數
108 108 field_author: 作者
109 109 field_created_on: 建立日期
110 110 field_updated_on: 更新
111 111 field_field_format: 格式
112 112 field_is_for_all: 給所有專案
113 113 field_possible_values: Possible values
114 114 field_regexp: 正規表示式
115 115 field_min_length: 最小長度
116 116 field_max_length: 最大長度
117 117 field_value:
118 118 field_category: 分類
119 119 field_title: 標題
120 120 field_project: 專案
121 121 field_issue: 項目
122 122 field_status: 狀態
123 123 field_notes: 筆記
124 124 field_is_closed: 項目結束
125 125 field_is_default: 預設值
126 126 field_tracker: 追蹤標籤
127 127 field_subject: 主旨
128 128 field_due_date: 完成日期
129 129 field_assigned_to: 分派給
130 130 field_priority: 優先權
131 131 field_fixed_version: 版本
132 132 field_user: 用戶
133 133 field_role: 角色
134 134 field_homepage: 網站首頁
135 135 field_is_public: 公開
136 136 field_parent: 父專案
137 137 field_is_in_chlog: 項目顯示於變更記錄中
138 138 field_is_in_roadmap: 項目顯示於版本藍圖中
139 139 field_login: 帳戶名稱
140 140 field_mail_notification: 電子郵件提醒選項
141 141 field_admin: 管理者
142 142 field_last_login_on: 最近連線日期
143 143 field_language: 語系
144 144 field_effective_date: 日期
145 145 field_password: 目前密碼
146 146 field_new_password: 新密碼
147 147 field_password_confirmation: 確認新密碼
148 148 field_version: 版本
149 149 field_type: Type
150 150 field_host: Host
151 151 field_port: 連接埠
152 152 field_account: 帳戶
153 153 field_base_dn: Base DN
154 154 field_attr_login: 登入屬性
155 155 field_attr_firstname: 名字屬性
156 156 field_attr_lastname: Lastname attribute
157 157 field_attr_mail: Email attribute
158 158 field_onthefly: On-the-fly user creation
159 159 field_start_date: 開始日期
160 160 field_done_ratio: 完成百分比
161 161 field_auth_source: 認證模式
162 162 field_hide_mail: 隱藏我的電子郵件
163 163 field_comments: 註解
164 164 field_url: URL
165 165 field_start_page: 首頁
166 166 field_subproject: 子專案
167 167 field_hours: 小時
168 168 field_activity: 活動
169 169 field_spent_on: 日期
170 170 field_identifier: 代碼
171 171 field_is_filter: Used as a filter
172 172 field_issue_to_id: Related issue
173 173 field_delay: 逾期
174 174 field_assignable: 項目可被分派至此角色
175 175 field_redirect_existing_links: Redirect existing links
176 176 field_estimated_hours: 預估工時
177 177 field_column_names: Columns
178 178 field_time_zone: 時區
179 179 field_searchable: 可用做搜尋條件
180 180 field_default_value: 預設值
181 181 field_comments_sorting: 註解排序
182 182
183 183 setting_app_title: 標題
184 184 setting_app_subtitle: 副標題
185 185 setting_welcome_text: 歡迎詞
186 186 setting_default_language: 預設語系
187 187 setting_login_required: 需要驗證
188 188 setting_self_registration: 註冊選項
189 189 setting_attachment_max_size: 附件大小限制
190 190 setting_issues_export_limit: 項目匯出限制
191 191 setting_mail_from: 寄件者電子郵件
192 192 setting_bcc_recipients: 使用密件副本 (BCC)
193 193 setting_host_name: 主機名稱
194 194 setting_text_formatting: 文字格式
195 195 setting_wiki_compression: 壓縮 Wiki 歷史文章
196 196 setting_feeds_limit: Feed content limit
197 197 setting_autofetch_changesets: 自動取得送交版次
198 198 setting_default_projects_public: 新建立之專案預設為「公開」
199 199 setting_sys_api_enabled: 啟用管理版本庫之網頁服務 (Web Service)
200 200 setting_commit_ref_keywords: 用於參照項目之關鍵字
201 201 setting_commit_fix_keywords: 用於修正項目之關鍵字
202 202 setting_autologin: 自動登入
203 203 setting_date_format: 日期格式
204 204 setting_time_format: 時間格式
205 205 setting_cross_project_issue_relations: 允許關聯至其它專案的項目
206 206 setting_issue_list_default_columns: 預設顯示於項目清單的欄位
207 207 setting_repositories_encodings: 版本庫編碼
208 208 setting_emails_footer: 電子郵件附帶說明
209 209 setting_protocol: 協定
210 210 setting_per_page_options: 每頁顯示個數選項
211 211 setting_user_format: 使用者顯示格式
212 212 setting_activity_days_default: 專案活動顯示天數
213 213 setting_display_subprojects_issues: 預設於父專案中顯示子專案的項目
214 214
215 215 project_module_issue_tracking: 項目追蹤
216 216 project_module_time_tracking: 工時追蹤
217 217 project_module_news: 新聞
218 218 project_module_documents: 文件
219 219 project_module_files: 檔案
220 220 project_module_wiki: Wiki
221 221 project_module_repository: 版本控管
222 222 project_module_boards: 討論區
223 223
224 224 label_user: 用戶
225 225 label_user_plural: 用戶清單
226 226 label_user_new: 建立新的帳戶
227 227 label_project: 專案
228 228 label_project_new: 建立新的專案
229 229 label_project_plural: 專案清單
230 230 label_project_all: 全部的專案
231 231 label_project_latest: 最近的專案
232 232 label_issue: 項目
233 233 label_issue_new: 建立新的項目
234 234 label_issue_plural: 項目清單
235 235 label_issue_view_all: 檢視所有項目
236 236 label_issues_by: 項目按 %s 分組顯示
237 237 label_issue_added: 項目已新增
238 238 label_issue_updated: 項目已更新
239 239 label_document: 文件
240 240 label_document_new: 建立新的文件
241 241 label_document_plural: 文件
242 242 label_document_added: 文件已新增
243 243 label_role: 角色
244 244 label_role_plural: 角色
245 245 label_role_new: 建立新角色
246 246 label_role_and_permissions: 角色與權限
247 247 label_member: 成員
248 248 label_member_new: 建立新的成員
249 249 label_member_plural: 成員
250 250 label_tracker: 追蹤標籤
251 251 label_tracker_plural: 追蹤標籤清單
252 252 label_tracker_new: 建立新的追蹤標籤
253 253 label_workflow: 流程
254 254 label_issue_status: 項目狀態
255 255 label_issue_status_plural: 項目狀態清單
256 256 label_issue_status_new: 建立新的狀態
257 257 label_issue_category: 項目分類
258 258 label_issue_category_plural: 項目分類清單
259 259 label_issue_category_new: 建立新的分類
260 260 label_custom_field: 自訂欄位
261 261 label_custom_field_plural: 自訂欄位清單
262 262 label_custom_field_new: 建立新的自訂欄位
263 263 label_enumerations: 列舉值清單
264 264 label_enumeration_new: 建立新的列舉值
265 265 label_information: 資訊
266 266 label_information_plural: 資訊
267 267 label_please_login: 請先登入
268 268 label_register: 註冊
269 269 label_password_lost: 遺失密碼
270 270 label_home: 網站首頁
271 271 label_my_page: 帳戶首頁
272 272 label_my_account: 我的帳戶
273 273 label_my_projects: 我的專案
274 274 label_administration: 網站管理
275 275 label_login: 登入
276 276 label_logout: 登出
277 277 label_help: 說明
278 278 label_reported_issues: 我通報的項目
279 279 label_assigned_to_me_issues: 分派給我的項目
280 280 label_last_login: 最近一次連線
281 281 label_last_updates: 最近更新
282 282 label_last_updates_plural: %d 個最近更新
283 283 label_registered_on: 註冊於
284 284 label_activity: 活動
285 285 label_overall_activity: 檢視所有活動
286 286 label_new: 建立新的...
287 287 label_logged_as: 目前登入
288 288 label_environment: 環境
289 289 label_authentication: 認證
290 290 label_auth_source: 認證模式
291 291 label_auth_source_new: 建立新認證模式
292 292 label_auth_source_plural: 認證模式清單
293 293 label_subproject_plural: 子專案
294 label_and_its_subprojects: %s 與其子專案
294 295 label_min_max_length: 最小 - 最大 長度
295 296 label_list: 清單
296 297 label_date: 日期
297 298 label_integer: 整數
298 299 label_float: 福點數
299 300 label_boolean: 布林
300 301 label_string: 文字
301 302 label_text: 長文字
302 303 label_attribute: 屬性
303 304 label_attribute_plural: 屬性
304 305 label_download: %d 個下載
305 306 label_download_plural: %d 個下載
306 307 label_no_data: 沒有任何資料可供顯示
307 308 label_change_status: 變更狀態
308 309 label_history: 歷史
309 310 label_attachment: 檔案
310 311 label_attachment_new: 建立新的檔案
311 312 label_attachment_delete: 刪除檔案
312 313 label_attachment_plural: 檔案
313 314 label_file_added: 檔案已新增
314 315 label_report: 報告
315 316 label_report_plural: 報告
316 317 label_news: 新聞
317 318 label_news_new: 建立新的新聞
318 319 label_news_plural: 新聞
319 320 label_news_latest: 最近新聞
320 321 label_news_view_all: 檢視所有新聞
321 322 label_news_added: 新聞已新增
322 323 label_change_log: 變更記錄
323 324 label_settings: 設定
324 325 label_overview: 概觀
325 326 label_version: 版本
326 327 label_version_new: 建立新的版本
327 328 label_version_plural: 版本
328 329 label_confirmation: 確認
329 330 label_export_to: 匯出至
330 331 label_read: Read...
331 332 label_public_projects: 公開專案
332 333 label_open_issues: 進行中
333 334 label_open_issues_plural: 進行中
334 335 label_closed_issues: 已結束
335 336 label_closed_issues_plural: 已結束
336 337 label_total: 總計
337 338 label_permissions: 權限
338 339 label_current_status: 目前狀態
339 340 label_new_statuses_allowed: 可變更至以下狀態
340 341 label_all: 全部
341 342 label_none: 空值
342 343 label_nobody: nobody
343 344 label_next: 下一頁
344 345 label_previous: 上一頁
345 346 label_used_by: Used by
346 347 label_details: 明細
347 348 label_add_note: 加入一個新筆記
348 349 label_per_page: 每頁
349 350 label_calendar: 日曆
350 351 label_months_from: 個月, 開始月份
351 352 label_gantt: 甘特圖
352 353 label_internal: Internal
353 354 label_last_changes: 最近 %d 個變更
354 355 label_change_view_all: 檢視所有變更
355 356 label_personalize_page: 自訂版面
356 357 label_comment: 註解
357 358 label_comment_plural: 註解
358 359 label_comment_add: 加入新註解
359 360 label_comment_added: 新註解已加入
360 361 label_comment_delete: 刪除註解
361 362 label_query: 自訂查詢
362 363 label_query_plural: 自訂查詢
363 364 label_query_new: 建立新的查詢
364 365 label_filter_add: 加入新篩選條件
365 366 label_filter_plural: 篩選條件
366 367 label_equals: 等於
367 368 label_not_equals: 不等於
368 369 label_in_less_than: 在小於
369 370 label_in_more_than: 在大於
370 371 label_in:
371 372 label_today: 今天
372 373 label_all_time: all time
373 374 label_yesterday: 昨天
374 375 label_this_week: 本週
375 376 label_last_week: 上週
376 377 label_last_n_days: 過去 %d 天
377 378 label_this_month: 這個月
378 379 label_last_month: 上個月
379 380 label_this_year: 今年
380 381 label_date_range: 日期區間
381 382 label_less_than_ago: 小於幾天之前
382 383 label_more_than_ago: 大於幾天之前
383 384 label_ago: 天以前
384 385 label_contains: 包含
385 386 label_not_contains: 不包含
386 387 label_day_plural:
387 388 label_repository: 版本控管
388 389 label_repository_plural: 版本控管
389 390 label_browse: 瀏覽
390 391 label_modification: %d 變更
391 392 label_modification_plural: %d 變更
392 393 label_revision: 版次
393 394 label_revision_plural: 版次清單
394 395 label_associated_revisions: 相關版次
395 396 label_added: 已新增
396 397 label_modified: 已修改
397 398 label_deleted: 已刪除
398 399 label_latest_revision: 最新版次
399 400 label_latest_revision_plural: 最近版次清單
400 401 label_view_revisions: 檢視版次清單
401 402 label_max_size: 最大長度
402 403 label_on: 總共
403 404 label_sort_highest: 移動至開頭
404 405 label_sort_higher: 往上移動
405 406 label_sort_lower: 往下移動
406 407 label_sort_lowest: 移動至結尾
407 408 label_roadmap: 版本藍圖
408 409 label_roadmap_due_in: 倒數天數:
409 410 label_roadmap_overdue: %s 逾期
410 411 label_roadmap_no_issues: 此版本尚未包含任何項目
411 412 label_search: 搜尋
412 413 label_result_plural: 結果
413 414 label_all_words: All words
414 415 label_wiki: Wiki
415 416 label_wiki_edit: Wiki 編輯
416 417 label_wiki_edit_plural: Wiki 編輯
417 418 label_wiki_page: Wiki 網頁
418 419 label_wiki_page_plural: Wiki 網頁
419 420 label_index_by_title: 依標題索引
420 421 label_index_by_date: 依日期索引
421 422 label_current_version: 現行版本
422 423 label_preview: 預覽
423 424 label_feed_plural: Feeds
424 425 label_changes_details: 所有變更的明細
425 426 label_issue_tracking: 項目追蹤
426 427 label_spent_time: 耗用時間
427 428 label_f_hour: %.2f 小時
428 429 label_f_hour_plural: %.2f 小時
429 430 label_time_tracking: Time tracking
430 431 label_change_plural: 變更
431 432 label_statistics: 統計資訊
432 433 label_commits_per_month: 依月份統計送交次數
433 434 label_commits_per_author: 依作者統計送交次數
434 435 label_view_diff: 檢視差異
435 436 label_diff_inline: 直列
436 437 label_diff_side_by_side: 並排
437 438 label_options: 選項清單
438 439 label_copy_workflow_from: 從以下追蹤標籤複製工作流程
439 440 label_permissions_report: 權限報表
440 441 label_watched_issues: 觀察中的項目清單
441 442 label_related_issues: 相關的項目清單
442 443 label_applied_status: 已套用狀態
443 444 label_loading: 載入中...
444 445 label_relation_new: 建立新關聯
445 446 label_relation_delete: 刪除關聯
446 447 label_relates_to: 關聯至
447 448 label_duplicates: 已重複
448 449 label_blocks: 阻擋
449 450 label_blocked_by: 被阻擋
450 451 label_precedes: 優先於
451 452 label_follows: 跟隨於
452 453 label_end_to_start: end to start
453 454 label_end_to_end: end to end
454 455 label_start_to_start: start to start
455 456 label_start_to_end: start to end
456 457 label_stay_logged_in: 維持已登入狀態
457 458 label_disabled: 關閉
458 459 label_show_completed_versions: 顯示已完成的版本
459 460 label_me: 我自己
460 461 label_board: 論壇
461 462 label_board_new: 建立新論壇
462 463 label_board_plural: 論壇
463 464 label_topic_plural: 討論主題
464 465 label_message_plural: 訊息
465 466 label_message_last: 上一封訊息
466 467 label_message_new: 建立新的訊息
467 468 label_message_posted: 訊息已新增
468 469 label_reply_plural: 回應
469 470 label_send_information: 寄送帳戶資訊電子郵件給用戶
470 471 label_year:
471 472 label_month:
472 473 label_week:
473 474 label_date_from: 開始
474 475 label_date_to: 結束
475 476 label_language_based: 依用戶之語系決定
476 477 label_sort_by: 按 %s 排序
477 478 label_send_test_email: 寄送測試郵件
478 479 label_feeds_access_key_created_on: RSS 存取鍵建立於 %s 之前
479 480 label_module_plural: 模組
480 481 label_added_time_by: 是由 %s 於 %s 前加入
481 482 label_updated_time: 於 %s 前更新
482 483 label_jump_to_a_project: 選擇欲前往的專案...
483 484 label_file_plural: 檔案清單
484 485 label_changeset_plural: 變更集清單
485 486 label_default_columns: 預設欄位清單
486 487 label_no_change_option: (維持不變)
487 488 label_bulk_edit_selected_issues: 編輯選定的項目
488 489 label_theme: 畫面主題
489 490 label_default: 預設
490 491 label_search_titles_only: 僅搜尋標題
491 492 label_user_mail_option_all: "提醒與我的專案有關的所有事件"
492 493 label_user_mail_option_selected: "只停醒我所選擇專案中的事件..."
493 494 label_user_mail_option_none: "只提醒我觀察中或參與中的事件"
494 495 label_user_mail_no_self_notified: "不提醒我自己所做的變更"
495 496 label_registration_activation_by_email: 透過電子郵件啟用帳戶
496 497 label_registration_manual_activation: 手動啟用帳戶
497 498 label_registration_automatic_activation: 自動啟用帳戶
498 499 label_display_per_page: '每頁顯示: %s 個'
499 500 label_age: Age
500 501 label_change_properties: 變更屬性
501 502 label_general: 一般
502 503 label_more: 更多 »
503 504 label_scm: 版本控管
504 505 label_plugins: 附加元件
505 506 label_ldap_authentication: LDAP 認證
506 507 label_downloads_abbr: 下載
507 508 label_optional_description: 額外的說明
508 509 label_add_another_file: 增加其他檔案
509 510 label_preferences: 偏好選項
510 511 label_chronological_order: 以時間由遠至近排序
511 512 label_reverse_chronological_order: 以時間由近至遠排序
512 513 label_planning: 計劃表
513 514
514 515 button_login: 登入
515 516 button_submit: 送出
516 517 button_save: 儲存
517 518 button_check_all: 全選
518 519 button_uncheck_all: 全不選
519 520 button_delete: 刪除
520 521 button_create: 建立
521 522 button_test: 測試
522 523 button_edit: 編輯
523 524 button_add: 新增
524 525 button_change: 修改
525 526 button_apply: 套用
526 527 button_clear: 清除
527 528 button_lock: 鎖定
528 529 button_unlock: 解除鎖定
529 530 button_download: 下載
530 531 button_list: List
531 532 button_view: 檢視
532 533 button_move: 移動
533 534 button_back: Back
534 535 button_cancel: 取消
535 536 button_activate: 啟用
536 537 button_sort: 排序
537 538 button_log_time: 記錄時間
538 539 button_rollback: 還原至此版本
539 540 button_watch: 觀察
540 541 button_unwatch: 取消觀察
541 542 button_reply: 回應
542 543 button_archive: 歸檔
543 544 button_unarchive: 取消歸檔
544 545 button_reset: 回復
545 546 button_rename: 重新命名
546 547 button_change_password: 變更密碼
547 548 button_copy: 複製
548 549 button_annotate: 加注
549 550 button_update: 更新
550 551 button_configure: 設定
551 552
552 553 status_active: 活動中
553 554 status_registered: 註冊完成
554 555 status_locked: 鎖定中
555 556
556 557 text_select_mail_notifications: 選擇欲寄送提醒通知郵件之動作
557 558 text_regexp_info: eg. ^[A-Z0-9]+$
558 559 text_min_max_length_info: 0 代表「不限制」
559 560 text_project_destroy_confirmation: 您確定要刪除這個專案和其他相關資料?
560 561 text_subprojects_destroy_warning: '下列子專案: %s 將一併被刪除。'
561 562 text_workflow_edit: 選擇角色與追蹤標籤以設定其工作流程
562 563 text_are_you_sure: 確定執行?
563 564 text_journal_changed: 從 %s 變更為 %s
564 565 text_journal_set_to: 設定為 %s
565 566 text_journal_deleted: 已刪除
566 567 text_tip_task_begin_day: 今天起始的工作
567 568 text_tip_task_end_day: 今天截止的的工作
568 569 text_tip_task_begin_end_day: 今天起始與截止的工作
569 570 text_project_identifier_info: '只允許小寫英文字母(a-z)、阿拉伯數字與連字符號(-)。<br />儲存後,代碼不可再被更改。'
570 571 text_caracters_maximum: 最多 %d 個字元.
571 572 text_caracters_minimum: 長度必須大於 %d 個字元.
572 573 text_length_between: 長度必須介於 %d 至 %d 個字元之間.
573 574 text_tracker_no_workflow: 此追蹤標籤尚未定義工作流程
574 575 text_unallowed_characters: 不允許的字元
575 576 text_comma_separated: 可輸入多個值 (以逗號分隔).
576 577 text_issues_ref_in_commit_messages: 送交訊息中參照(或修正)項目之關鍵字
577 578 text_issue_added: 項目 %s 已被 %s 通報。
578 579 text_issue_updated: 項目 %s 已被 %s 更新。
579 580 text_wiki_destroy_confirmation: 您確定要刪除這個 wiki 和其中的所有內容?
580 581 text_issue_category_destroy_question: 有 (%d) 個項目被指派到此分類. 請選擇您想要的動作?
581 582 text_issue_category_destroy_assignments: 移除這些項目的分類
582 583 text_issue_category_reassign_to: 重新指派這些項目至其它分類
583 584 text_user_mail_option: "For unselected projects, you will only receive notifications about things you watch or you're involved in (eg. issues you're the author or assignee)."
584 585 text_no_configuration_data: "Roles, trackers, issue statuses and workflow have not been configured yet.\nIt is highly recommended to load the default configuration. You will be able to modify it once loaded."
585 586 text_load_default_configuration: 載入預設組態
586 587 text_status_changed_by_changeset: 已套用至變更集 %s.
587 588 text_issues_destroy_confirmation: '確定刪除已選擇的項目?'
588 589 text_select_project_modules: '選擇此專案可使用之模組:'
589 590 text_default_administrator_account_changed: 已變更預設管理員帳號內容
590 591 text_file_repository_writable: 可寫入檔案
591 592 text_rmagick_available: 可使用 RMagick (選配)
592 593 text_destroy_time_entries_question: 您即將刪除的項目已報工 %.02f 小時. 您的選擇是?
593 594 text_destroy_time_entries: 刪除已報工的時數
594 595 text_assign_time_entries_to_project: 指定已報工的時數至專案中
595 596 text_reassign_time_entries: '重新指定已報工的時數至此項目:'
596 597
597 598 default_role_manager: 管理人員
598 599 default_role_developper: 開發人員
599 600 default_role_reporter: 報告人員
600 601 default_tracker_bug: 臭蟲
601 602 default_tracker_feature: 功能
602 603 default_tracker_support: 支援
603 604 default_issue_status_new: 新建立
604 605 default_issue_status_assigned: 已指派
605 606 default_issue_status_resolved: 已解決
606 607 default_issue_status_feedback: 已回應
607 608 default_issue_status_closed: 已結束
608 609 default_issue_status_rejected: 已拒絕
609 610 default_doc_category_user: 使用手冊
610 611 default_doc_category_tech: 技術文件
611 612 default_priority_low:
612 613 default_priority_normal: 正常
613 614 default_priority_high:
614 615 default_priority_urgent:
615 616 default_priority_immediate:
616 617 default_activity_design: 設計
617 618 default_activity_development: 開發
618 619
619 620 enumeration_issue_priorities: 項目優先權
620 621 enumeration_doc_categories: 文件分類
621 622 enumeration_activities: 活動 (時間追蹤)
@@ -1,621 +1,624
1 1 _gloc_rule_default: '|n| n==1 ? "" : "_plural" '
2 2
3 3 actionview_datehelper_select_day_prefix:
4 4 actionview_datehelper_select_month_names: 一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月,十二月
5 5 actionview_datehelper_select_month_names_abbr: 一,二,三,四,五,六,七,八,九,十,十一,十二
6 6 actionview_datehelper_select_month_prefix:
7 7 actionview_datehelper_select_year_prefix:
8 8 actionview_datehelper_time_in_words_day: 1 天
9 9 actionview_datehelper_time_in_words_day_plural: %d 天
10 10 actionview_datehelper_time_in_words_hour_about: 约 1 小时
11 11 actionview_datehelper_time_in_words_hour_about_plural: 约 %d 小时
12 12 actionview_datehelper_time_in_words_hour_about_single: 约 1 小时
13 13 actionview_datehelper_time_in_words_minute: 1 分钟
14 14 actionview_datehelper_time_in_words_minute_half: 半分钟
15 15 actionview_datehelper_time_in_words_minute_less_than: 1 分钟以内
16 16 actionview_datehelper_time_in_words_minute_plural: %d 分钟
17 17 actionview_datehelper_time_in_words_minute_single: 1 分钟
18 18 actionview_datehelper_time_in_words_second_less_than: 1 秒以内
19 19 actionview_datehelper_time_in_words_second_less_than_plural: %d 秒以内
20 20 actionview_instancetag_blank_option: 请选择
21 21
22 22 activerecord_error_inclusion: 未被包含在列表中
23 23 activerecord_error_exclusion: 是保留字
24 24 activerecord_error_invalid: 是无效的
25 25 activerecord_error_confirmation: 与确认栏不符
26 26 activerecord_error_accepted: 必须被接受
27 27 activerecord_error_empty: 不可为空
28 28 activerecord_error_blank: 不可为空白
29 29 activerecord_error_too_long: 过长
30 30 activerecord_error_too_short: 过短
31 31 activerecord_error_wrong_length: 长度不正确
32 32 activerecord_error_taken: 已被使用
33 33 activerecord_error_not_a_number: 不是数字
34 34 activerecord_error_not_a_date: 不是有效的日期
35 35 activerecord_error_greater_than_start_date: 必须在起始日期之后
36 36 activerecord_error_not_same_project: 不属于同一个项目
37 37 activerecord_error_circular_dependency: 此关联将导致循环依赖
38 38
39 39 general_fmt_age: %d 年
40 40 general_fmt_age_plural: %d 年
41 41 general_fmt_date: %%m/%%d/%%Y
42 42 general_fmt_datetime: %%m/%%d/%%Y %%I:%%M %%p
43 43 general_fmt_datetime_short: %%b %%d, %%I:%%M %%p
44 44 general_fmt_time: %%I:%%M %%p
45 45 general_text_No: '否'
46 46 general_text_Yes: '是'
47 47 general_text_no: '否'
48 48 general_text_yes: '是'
49 49 general_lang_name: 'Simplified Chinese (简体中文)'
50 50 general_csv_separator: ','
51 51 general_csv_encoding: gb2312
52 52 general_pdf_encoding: gb2312
53 53 general_day_names: 星期一,星期二,星期三,星期四,星期五,星期六,星期日
54 54 general_first_day_of_week: '7'
55 55
56 56 notice_account_updated: 帐号更新成功
57 57 notice_account_invalid_creditentials: 无效的用户名或密码
58 58 notice_account_password_updated: 密码更新成功
59 59 notice_account_wrong_password: 密码错误
60 60 notice_account_register_done: 帐号创建成功,请使用注册确认邮件中的链接来激活您的帐号。
61 61 notice_account_unknown_email: 未知用户
62 62 notice_can_t_change_password: 该帐号使用了外部认证,因此无法更改密码。
63 63 notice_account_lost_email_sent: 系统已将引导您设置新密码的邮件发送给您。
64 64 notice_account_activated: 您的帐号已被激活。您现在可以登录了。
65 65 notice_successful_create: 创建成功
66 66 notice_successful_update: 更新成功
67 67 notice_successful_delete: 删除成功
68 68 notice_successful_connection: 连接成功
69 69 notice_file_not_found: 您访问的页面不存在或已被删除。
70 70 notice_locking_conflict: 数据已被另一位用户更新
71 71 notice_not_authorized: 对不起,您无权访问此页面。
72 72 notice_email_sent: 邮件已成功发送到 %s
73 73 notice_email_error: 发送邮件时发生错误 (%s)
74 74 notice_feeds_access_key_reseted: 您的RSS存取键已被重置。
75 75 notice_failed_to_save_issues: "%d 个问题保存失败(共选择 %d 个问题):%s."
76 76 notice_no_issue_selected: "未选择任何问题!请选择您要编辑的问题。"
77 77 notice_account_pending: "您的帐号已被成功创建,正在等待管理员的审核。"
78 78 notice_default_data_loaded: 成功载入默认设置。
79 79
80 80 error_can_t_load_default_data: "无法载入默认设置:%s"
81 81 error_scm_not_found: "版本库中不存在该条目和(或)其修订版本。"
82 82 error_scm_command_failed: "访问版本库时发生错误:%s"
83 83 error_scm_annotate: "该条目不存在或无法追溯。"
84 84 error_issue_not_found_in_project: '问题不存在或不属于此项目'
85 85
86 86 mail_subject_lost_password: 您的 %s 密码
87 87 mail_body_lost_password: '请点击以下链接来修改您的密码:'
88 88 mail_subject_register: %s帐号激活
89 89 mail_body_register: '请点击以下链接来激活您的帐号:'
90 90 mail_body_account_information_external: 您可以使用您的 "%s" 帐号来登录。
91 91 mail_body_account_information: 您的帐号信息
92 92 mail_subject_account_activation_request: %s帐号激活请求
93 93 mail_body_account_activation_request: '新用户(%s)已完成注册,正在等候您的审核:'
94 94
95 95 gui_validation_error: 1 个错误
96 96 gui_validation_error_plural: %d 个错误
97 97
98 98 field_name: 名称
99 99 field_description: 描述
100 100 field_summary: 摘要
101 101 field_is_required: 必填
102 102 field_firstname: 名字
103 103 field_lastname: 姓氏
104 104 field_mail: 邮件地址
105 105 field_filename: 文件
106 106 field_filesize: 大小
107 107 field_downloads: 下载次数
108 108 field_author: 作者
109 109 field_created_on: 创建于
110 110 field_updated_on: 更新于
111 111 field_field_format: 格式
112 112 field_is_for_all: 用于所有项目
113 113 field_possible_values: 可能的值
114 114 field_regexp: 正则表达式
115 115 field_min_length: 最小长度
116 116 field_max_length: 最大长度
117 117 field_value:
118 118 field_category: 类别
119 119 field_title: 标题
120 120 field_project: 项目
121 121 field_issue: 问题
122 122 field_status: 状态
123 123 field_notes: 说明
124 124 field_is_closed: 已关闭的问题
125 125 field_is_default: 默认值
126 126 field_tracker: 跟踪
127 127 field_subject: 主题
128 128 field_due_date: 完成日期
129 129 field_assigned_to: 指派给
130 130 field_priority: 优先级
131 131 field_fixed_version: 目标版本
132 132 field_user: 用户
133 133 field_role: 角色
134 134 field_homepage: 主页
135 135 field_is_public: 公开
136 136 field_parent: 上级项目
137 137 field_is_in_chlog: 在更新日志中显示问题
138 138 field_is_in_roadmap: 在路线图中显示问题
139 139 field_login: 登录名
140 140 field_mail_notification: 邮件通知
141 141 field_admin: 管理员
142 142 field_last_login_on: 最后登录
143 143 field_language: 语言
144 144 field_effective_date: 日期
145 145 field_password: 密码
146 146 field_new_password: 新密码
147 147 field_password_confirmation: 确认
148 148 field_version: 版本
149 149 field_type: 类型
150 150 field_host: 主机
151 151 field_port: 端口
152 152 field_account: 帐号
153 153 field_base_dn: Base DN
154 154 field_attr_login: 登录名属性
155 155 field_attr_firstname: 名字属性
156 156 field_attr_lastname: 姓氏属性
157 157 field_attr_mail: 邮件属性
158 158 field_onthefly: 即时用户生成
159 159 field_start_date: 开始
160 160 field_done_ratio: 完成度
161 161 field_auth_source: 认证模式
162 162 field_hide_mail: 隐藏我的邮件地址
163 163 field_comments: 注释
164 164 field_url: URL
165 165 field_start_page: 起始页
166 166 field_subproject: 子项目
167 167 field_hours: 小时
168 168 field_activity: 活动
169 169 field_spent_on: 日期
170 170 field_identifier: 标识
171 171 field_is_filter: 作为过滤条件
172 172 field_issue_to_id: 相关问题
173 173 field_delay: 延期
174 174 field_assignable: 问题可指派给此角色
175 175 field_redirect_existing_links: 重定向到现有链接
176 176 field_estimated_hours: 预期时间
177 177 field_column_names:
178 178 field_time_zone: 时区
179 179 field_searchable: 可用作搜索条件
180 180 field_default_value: 默认值
181 181 field_comments_sorting: 显示注释
182 182
183 183 setting_app_title: 应用程序标题
184 184 setting_app_subtitle: 应用程序子标题
185 185 setting_welcome_text: 欢迎文字
186 186 setting_default_language: 默认语言
187 187 setting_login_required: 要求认证
188 188 setting_self_registration: 允许自注册
189 189 setting_attachment_max_size: 附件大小限制
190 190 setting_issues_export_limit: 问题输出条目的限制
191 191 setting_mail_from: 邮件发件人地址
192 192 setting_bcc_recipients: 使用密件抄送 (bcc)
193 193 setting_host_name: 主机名称
194 194 setting_text_formatting: 文本格式
195 195 setting_wiki_compression: 压缩Wiki历史文档
196 196 setting_feeds_limit: RSS Feed内容条数限制
197 197 setting_default_projects_public: 新建项目默认为公开项目
198 198 setting_autofetch_changesets: 自动获取程序变更
199 199 setting_sys_api_enabled: 启用用于版本库管理的Web Service
200 200 setting_commit_ref_keywords: 用于引用问题的关键字
201 setting_commit_fix_keywords: 用于修订问题的关键字
201 setting_commit_fix_keywords: 用于解决问题的关键字
202 202 setting_autologin: 自动登录
203 203 setting_date_format: 日期格式
204 204 setting_time_format: 时间格式
205 205 setting_cross_project_issue_relations: 允许不同项目之间的问题关联
206 206 setting_issue_list_default_columns: 问题列表中显示的默认列
207 207 setting_repositories_encodings: 版本库编码
208 208 setting_emails_footer: 邮件签名
209 209 setting_protocol: 协议
210 210 setting_per_page_options: 每页显示条目个数的设置
211 211 setting_user_format: 用户显示格式
212 212 setting_activity_days_default: 在项目活动中显示的天数
213 213 setting_display_subprojects_issues: 在项目页面上默认显示子项目的问题
214 214
215 215 project_module_issue_tracking: 问题跟踪
216 216 project_module_time_tracking: 时间跟踪
217 217 project_module_news: 新闻
218 218 project_module_documents: 文档
219 219 project_module_files: 文件
220 220 project_module_wiki: Wiki
221 221 project_module_repository: 版本库
222 222 project_module_boards: 讨论区
223 223
224 224 label_user: 用户
225 225 label_user_plural: 用户
226 226 label_user_new: 新建用户
227 227 label_project: 项目
228 228 label_project_new: 新建项目
229 229 label_project_plural: 项目
230 230 label_project_all: 所有的项目
231 231 label_project_latest: 最近更新的项目
232 232 label_issue: 问题
233 233 label_issue_new: 新建问题
234 234 label_issue_plural: 问题
235 235 label_issue_view_all: 查看所有问题
236 236 label_issues_by: 按 %s 分组显示问题
237 237 label_issue_added: 问题已添加
238 238 label_issue_updated: 问题已更新
239 239 label_document: 文档
240 240 label_document_new: 新建文档
241 241 label_document_plural: 文档
242 242 label_document_added: 文档已添加
243 243 label_role: 角色
244 244 label_role_plural: 角色
245 245 label_role_new: 新建角色
246 246 label_role_and_permissions: 角色和权限
247 247 label_member: 成员
248 248 label_member_new: 新建成员
249 249 label_member_plural: 成员
250 250 label_tracker: 跟踪标签
251 251 label_tracker_plural: 跟踪标签
252 252 label_tracker_new: 新建跟踪标签
253 253 label_workflow: 工作流程
254 254 label_issue_status: 问题状态
255 255 label_issue_status_plural: 问题状态
256 256 label_issue_status_new: 新建问题状态
257 257 label_issue_category: 问题类别
258 258 label_issue_category_plural: 问题类别
259 259 label_issue_category_new: 新建问题类别
260 label_custom_field: 自定义字段
261 label_custom_field_plural: 自定义字段
262 label_custom_field_new: 新建自定义字段
260 label_custom_field: 自定义属性
261 label_custom_field_plural: 自定义属性
262 label_custom_field_new: 新建自定义属性
263 263 label_enumerations: 枚举值
264 264 label_enumeration_new: 新建枚举值
265 265 label_information: 信息
266 266 label_information_plural: 信息
267 267 label_please_login: 请登录
268 268 label_register: 注册
269 269 label_password_lost: 忘记密码
270 270 label_home: 主页
271 271 label_my_page: 我的工作台
272 272 label_my_account: 我的帐号
273 273 label_my_projects: 我的项目
274 274 label_administration: 管理
275 275 label_login: 登录
276 276 label_logout: 退出
277 277 label_help: 帮助
278 278 label_reported_issues: 已报告的问题
279 279 label_assigned_to_me_issues: 指派给我的问题
280 280 label_last_login: 最后登录
281 281 label_last_updates: 最后更新
282 282 label_last_updates_plural: %d 最后更新
283 283 label_registered_on: 注册于
284 284 label_activity: 活动
285 285 label_overall_activity: 全部活动
286 286 label_new: 新建
287 287 label_logged_as: 登录为
288 288 label_environment: 环境
289 289 label_authentication: 认证
290 290 label_auth_source: 认证模式
291 291 label_auth_source_new: 新建认证模式
292 292 label_auth_source_plural: 认证模式
293 293 label_subproject_plural: 子项目
294 label_and_its_subprojects: %s 及其子项目
294 295 label_min_max_length: 最小 - 最大 长度
295 296 label_list: 列表
296 297 label_date: 日期
297 298 label_integer: 整数
298 299 label_float: 浮点数
299 300 label_boolean: 布尔量
300 301 label_string: 文字
301 302 label_text: 长段文字
302 303 label_attribute: 属性
303 304 label_attribute_plural: 属性
304 305 label_download: %d 次下载
305 306 label_download_plural: %d 次下载
306 307 label_no_data: 没有任何数据可供显示
307 308 label_change_status: 变更状态
308 309 label_history: 历史记录
309 310 label_attachment: 文件
310 311 label_attachment_new: 新建文件
311 312 label_attachment_delete: 删除文件
312 313 label_attachment_plural: 文件
313 314 label_file_added: 文件已添加
314 315 label_report: 报表
315 316 label_report_plural: 报表
316 317 label_news: 新闻
317 318 label_news_new: 添加新闻
318 319 label_news_plural: 新闻
319 320 label_news_latest: 最近的新闻
320 321 label_news_view_all: 查看所有新闻
321 322 label_news_added: 新闻已添加
322 323 label_change_log: 更新日志
323 324 label_settings: 配置
324 325 label_overview: 概述
325 326 label_version: 版本
326 327 label_version_new: 新建版本
327 328 label_version_plural: 版本
328 329 label_confirmation: 确认
329 330 label_export_to: 导出
330 331 label_read: 读取...
331 332 label_public_projects: 公开的项目
332 333 label_open_issues: 打开
333 334 label_open_issues_plural: 打开
334 335 label_closed_issues: 已关闭
335 336 label_closed_issues_plural: 已关闭
336 337 label_total: 合计
337 338 label_permissions: 权限
338 339 label_current_status: 当前状态
339 340 label_new_statuses_allowed: 可变更的新状态
340 341 label_all: 全部
341 342 label_none:
342 343 label_nobody: 无人
343 344 label_next: 下一个
344 345 label_previous: 上一个
345 346 label_used_by: 使用中
346 347 label_details: 详情
347 348 label_add_note: 添加说明
348 349 label_per_page: 每页
349 350 label_calendar: 日历
350 351 label_months_from: 个月以来
351 352 label_gantt: 甘特图
352 353 label_internal: 内部
353 354 label_last_changes: 最近的 %d 次变更
354 355 label_change_view_all: 查看所有变更
355 356 label_personalize_page: 个性化定制本页
356 357 label_comment: 评论
357 358 label_comment_plural: 评论
358 359 label_comment_add: 添加评论
359 360 label_comment_added: 评论已添加
360 361 label_comment_delete: 删除评论
361 362 label_query: 自定义查询
362 363 label_query_plural: 自定义查询
363 364 label_query_new: 新建查询
364 365 label_filter_add: 增加过滤器
365 366 label_filter_plural: 过滤器
366 367 label_equals: 等于
367 368 label_not_equals: 不等于
368 369 label_in_less_than: 剩余天数小于
369 370 label_in_more_than: 剩余天数大于
370 371 label_in: 剩余天数
371 372 label_today: 今天
372 373 label_all_time: 全部时间
373 374 label_yesterday: 昨天
374 375 label_this_week: 本周
375 376 label_last_week: 下周
376 377 label_last_n_days: 最后 %d 天
377 378 label_this_month: 本月
378 379 label_last_month: 下月
379 380 label_this_year: 今年
380 381 label_date_range: 日期范围
381 382 label_less_than_ago: 之前天数少于
382 383 label_more_than_ago: 之前天数大于
383 384 label_ago: 之前天数
384 385 label_contains: 包含
385 386 label_not_contains: 不包含
386 387 label_day_plural:
387 388 label_repository: 版本库
388 389 label_repository_plural: 版本库
389 390 label_browse: 浏览
390 391 label_modification: %d 个更新
391 392 label_modification_plural: %d 个更新
392 393 label_revision: 修订
393 394 label_revision_plural: 修订
394 395 label_associated_revisions: 相关修订版本
395 396 label_added: 已添加
396 397 label_modified: 已修改
397 398 label_deleted: 已删除
398 399 label_latest_revision: 最近的修订版本
399 400 label_latest_revision_plural: 最近的修订版本
400 401 label_view_revisions: 查看修订
401 402 label_max_size: 最大尺寸
402 403 label_on: 'on'
403 404 label_sort_highest: 置顶
404 405 label_sort_higher: 上移
405 406 label_sort_lower: 下移
406 407 label_sort_lowest: 置底
407 408 label_roadmap: 路线图
408 409 label_roadmap_due_in: 截止日期到
409 410 label_roadmap_overdue: %s 延期
410 411 label_roadmap_no_issues: 该版本没有问题
411 412 label_search: 搜索
412 413 label_result_plural: 结果
413 414 label_all_words: 所有单词
414 415 label_wiki: Wiki
415 416 label_wiki_edit: Wiki 编辑
416 417 label_wiki_edit_plural: Wiki 编辑记录
417 418 label_wiki_page: Wiki 页面
418 419 label_wiki_page_plural: Wiki 页面
419 420 label_index_by_title: 按标题索引
420 421 label_index_by_date: 按日期索引
421 422 label_current_version: 当前版本
422 423 label_preview: 预览
423 424 label_feed_plural: Feeds
424 425 label_changes_details: 所有变更的详情
425 426 label_issue_tracking: 问题跟踪
426 427 label_spent_time: 耗时
427 428 label_f_hour: %.2f 小时
428 429 label_f_hour_plural: %.2f 小时
429 430 label_time_tracking: 时间跟踪
430 431 label_change_plural: 变更
431 432 label_statistics: 统计
432 433 label_commits_per_month: 每月提交次数
433 434 label_commits_per_author: 每用户提交次数
434 435 label_view_diff: 查看差别
435 436 label_diff_inline: 直列
436 437 label_diff_side_by_side: 并排
437 438 label_options: 选项
438 439 label_copy_workflow_from: 从以下项目复制工作流程
439 440 label_permissions_report: 权限报表
440 441 label_watched_issues: 跟踪的问题
441 442 label_related_issues: 相关的问题
442 443 label_applied_status: 应用后的状态
443 444 label_loading: 载入中...
444 445 label_relation_new: 新建关联
445 446 label_relation_delete: 删除关联
446 447 label_relates_to: 关联到
447 448 label_duplicates: 重复
448 449 label_blocks: 阻挡
449 450 label_blocked_by: 被阻挡
450 451 label_precedes: 优先于
451 452 label_follows: 跟随于
452 453 label_end_to_start: 结束-开始
453 454 label_end_to_end: 结束-结束
454 455 label_start_to_start: 开始-开始
455 456 label_start_to_end: 开始-结束
456 457 label_stay_logged_in: 保持登录状态
457 458 label_disabled: 禁用
458 459 label_show_completed_versions: 显示已完成的版本
459 460 label_me:
460 461 label_board: 讨论区
461 462 label_board_new: 新建讨论区
462 463 label_board_plural: 讨论区
463 464 label_topic_plural: 主题
464 465 label_message_plural: 帖子
465 466 label_message_last: 最新的帖子
466 467 label_message_new: 新贴
467 468 label_message_posted: 发帖成功
468 469 label_reply_plural: 回复
469 470 label_send_information: 给用户发送帐号信息
470 471 label_year:
471 472 label_month:
472 473 label_week:
473 474 label_date_from:
474 475 label_date_to:
475 476 label_language_based: 根据用户的语言
476 477 label_sort_by: 根据 %s 排序
477 478 label_send_test_email: 发送测试邮件
478 479 label_feeds_access_key_created_on: RSS 存取键是在 %s 之前建立的
479 480 label_module_plural: 模块
480 481 label_added_time_by: 由 %s 在 %s 之前添加
481 482 label_updated_time: 更新于 %s 前
482 483 label_jump_to_a_project: 选择一个项目...
483 484 label_file_plural: 文件
484 485 label_changeset_plural: 变更
485 486 label_default_columns: 默认列
486 487 label_no_change_option: (不变)
487 488 label_bulk_edit_selected_issues: 批量修改选中的问题
488 489 label_theme: 主题
489 490 label_default: 默认
490 491 label_search_titles_only: 仅在标题中搜索
491 492 label_user_mail_option_all: "收取我的项目的所有通知"
492 493 label_user_mail_option_selected: "收取选中项目的所有通知..."
493 494 label_user_mail_option_none: "只收取我跟踪或参与的项目的通知"
494 495 label_user_mail_no_self_notified: "不要发送对我自己提交的修改的通知"
495 496 label_registration_activation_by_email: 通过邮件认证激活帐号
496 497 label_registration_manual_activation: 手动激活帐号
497 498 label_registration_automatic_activation: 自动激活帐号
498 499 label_display_per_page: '每页显示:%s'
499 500 label_age: 年龄
500 501 label_change_properties: 修改属性
501 502 label_general: 一般
502 503 label_more: 更多
503 504 label_scm: SCM
504 505 label_plugins: 插件
505 506 label_ldap_authentication: LDAP 认证
506 507 label_downloads_abbr: D/L
507 508 label_optional_description: 可选的描述
508 509 label_add_another_file: 添加其它文件
509 510 label_preferences: 首选项
510 511 label_chronological_order: 按时间顺序
511 512 label_reverse_chronological_order: 按时间顺序(倒序)
512 513 label_planning: 计划
513 514
514 515 button_login: 登录
515 516 button_submit: 提交
516 517 button_save: 保存
517 518 button_check_all: 全选
518 519 button_uncheck_all: 清除
519 520 button_delete: 删除
520 521 button_create: 创建
521 522 button_test: 测试
522 523 button_edit: 编辑
523 524 button_add: 新增
524 525 button_change: 修改
525 526 button_apply: 应用
526 527 button_clear: 清除
527 528 button_lock: 锁定
528 529 button_unlock: 解锁
529 530 button_download: 下载
530 531 button_list: 列表
531 532 button_view: 查看
532 533 button_move: 移动
533 534 button_back: 返回
534 535 button_cancel: 取消
535 536 button_activate: 激活
536 537 button_sort: 排序
537 538 button_log_time: 登记工时
538 539 button_rollback: 恢复到这个版本
539 540 button_watch: 跟踪
540 541 button_unwatch: 取消跟踪
541 542 button_reply: 回复
542 543 button_archive: 存档
543 544 button_unarchive: 取消存档
544 545 button_reset: 重置
545 546 button_rename: 重命名
546 547 button_change_password: 修改密码
547 548 button_copy: 复制
548 549 button_annotate: 追溯
549 550 button_update: 更新
550 551 button_configure: 配置
551 552
552 553 status_active: 活动的
553 554 status_registered: 已注册
554 555 status_locked: 已锁定
555 556
556 557 text_select_mail_notifications: 选择需要发送邮件通知的动作
557 558 text_regexp_info: 例如:^[A-Z0-9]+$
558 559 text_min_max_length_info: 0 表示没有限制
559 560 text_project_destroy_confirmation: 您确信要删除这个项目以及所有相关的数据吗?
560 561 text_subprojects_destroy_warning: '以下子项目也将被同时删除:%s'
561 562 text_workflow_edit: 选择角色和跟踪标签来编辑工作流程
562 563 text_are_you_sure: 您确定?
563 564 text_journal_changed: 从 %s 变更为 %s
564 565 text_journal_set_to: 设置为 %s
565 566 text_journal_deleted: 已删除
566 567 text_tip_task_begin_day: 今天开始的任务
567 568 text_tip_task_end_day: 今天结束的任务
568 569 text_tip_task_begin_end_day: 今天开始并结束的任务
569 570 text_project_identifier_info: '只允许使用小写字母(a-z),数字和连字符(-)。<br />请注意,标识符保存后将不可修改。'
570 571 text_caracters_maximum: 最多 %d 个字符。
571 572 text_caracters_minimum: 至少需要 %d 个字符。
572 573 text_length_between: 长度必须在 %d 到 %d 个字符之间。
573 574 text_tracker_no_workflow: 此跟踪标签未定义工作流程
574 575 text_unallowed_characters: 非法字符
575 576 text_comma_separated: 可以使用多个值(用逗号,分开)。
576 text_issues_ref_in_commit_messages: 在提交信息中引用和修订问题
577 text_issues_ref_in_commit_messages: 在提交信息中引用和解决问题
577 578 text_issue_added: 问题 %s 已由 %s 提交。
578 579 text_issue_updated: 问题 %s 已由 %s 更新。
579 580 text_wiki_destroy_confirmation: 您确定要删除这个 wiki 及其所有内容吗?
580 581 text_issue_category_destroy_question: 有一些问题(%d 个)属于此类别。您想进行哪种操作?
581 582 text_issue_category_destroy_assignments: 删除问题的所属类别(问题变为无类别)
582 583 text_issue_category_reassign_to: 为问题选择其它类别
583 584 text_user_mail_option: "对于没有选中的项目,您将只会收到您跟踪或参与的项目的通知(比如说,您是问题的报告者, 或被指派解决此问题)。"
584 585 text_no_configuration_data: "角色、跟踪标签、问题状态和工作流程还没有设置。\n强烈建议您先载入默认设置,然后在此基础上进行修改。"
585 586 text_load_default_configuration: 载入默认设置
586 587 text_status_changed_by_changeset: 已应用到变更列表 %s.
587 588 text_issues_destroy_confirmation: '您确定要删除选中的问题吗?'
588 589 text_select_project_modules: '请选择此项目可以使用的模块:'
589 590 text_default_administrator_account_changed: 默认的管理员帐号已改变
590 591 text_file_repository_writable: 文件版本库可修改
591 592 text_rmagick_available: RMagick 可用(可选的)
592 593 text_destroy_time_entries_question: 您要删除的问题已经上报了 %.02f 小时的工作量。您想进行那种操作?
593 594 text_destroy_time_entries: 删除上报的工作量
594 595 text_assign_time_entries_to_project: 将已上报的工作量提交到项目中
595 596 text_reassign_time_entries: '将已上报的工作量指定到此问题:'
596 597
597 598 default_role_manager: 管理人员
598 599 default_role_developper: 开发人员
599 600 default_role_reporter: 报告人员
600 601 default_tracker_bug: 错误
601 602 default_tracker_feature: 功能
602 603 default_tracker_support: 支持
603 604 default_issue_status_new: 新建
604 605 default_issue_status_assigned: 已指派
605 606 default_issue_status_resolved: 已解决
606 607 default_issue_status_feedback: 反馈
607 608 default_issue_status_closed: 已关闭
608 609 default_issue_status_rejected: 已拒绝
609 610 default_doc_category_user: 用户文档
610 611 default_doc_category_tech: 技术文档
611 612 default_priority_low:
612 613 default_priority_normal: 普通
613 614 default_priority_high:
614 615 default_priority_urgent: 紧急
615 616 default_priority_immediate: 立刻
616 617 default_activity_design: 设计
617 618 default_activity_development: 开发
618 619
619 620 enumeration_issue_priorities: 问题优先级
620 621 enumeration_doc_categories: 文档类别
621 622 enumeration_activities: 活动(时间跟踪)
623 mail_subject_reminder: "%d issue(s) due in the next days"
624 mail_body_reminder: "%d issue(s) that are assigned to you are due in the next %d days:"
@@ -1,1140 +1,1140
1 1 # vim:ts=4:sw=4:
2 2 # = RedCloth - Textile and Markdown Hybrid for Ruby
3 3 #
4 4 # Homepage:: http://whytheluckystiff.net/ruby/redcloth/
5 5 # Author:: why the lucky stiff (http://whytheluckystiff.net/)
6 6 # Copyright:: (cc) 2004 why the lucky stiff (and his puppet organizations.)
7 7 # License:: BSD
8 8 #
9 9 # (see http://hobix.com/textile/ for a Textile Reference.)
10 10 #
11 11 # Based on (and also inspired by) both:
12 12 #
13 13 # PyTextile: http://diveintomark.org/projects/textile/textile.py.txt
14 14 # Textism for PHP: http://www.textism.com/tools/textile/
15 15 #
16 16 #
17 17
18 18 # = RedCloth
19 19 #
20 20 # RedCloth is a Ruby library for converting Textile and/or Markdown
21 21 # into HTML. You can use either format, intermingled or separately.
22 22 # You can also extend RedCloth to honor your own custom text stylings.
23 23 #
24 24 # RedCloth users are encouraged to use Textile if they are generating
25 25 # HTML and to use Markdown if others will be viewing the plain text.
26 26 #
27 27 # == What is Textile?
28 28 #
29 29 # Textile is a simple formatting style for text
30 30 # documents, loosely based on some HTML conventions.
31 31 #
32 32 # == Sample Textile Text
33 33 #
34 34 # h2. This is a title
35 35 #
36 36 # h3. This is a subhead
37 37 #
38 38 # This is a bit of paragraph.
39 39 #
40 40 # bq. This is a blockquote.
41 41 #
42 42 # = Writing Textile
43 43 #
44 44 # A Textile document consists of paragraphs. Paragraphs
45 45 # can be specially formatted by adding a small instruction
46 46 # to the beginning of the paragraph.
47 47 #
48 48 # h[n]. Header of size [n].
49 49 # bq. Blockquote.
50 50 # # Numeric list.
51 51 # * Bulleted list.
52 52 #
53 53 # == Quick Phrase Modifiers
54 54 #
55 55 # Quick phrase modifiers are also included, to allow formatting
56 56 # of small portions of text within a paragraph.
57 57 #
58 58 # \_emphasis\_
59 59 # \_\_italicized\_\_
60 60 # \*strong\*
61 61 # \*\*bold\*\*
62 62 # ??citation??
63 63 # -deleted text-
64 64 # +inserted text+
65 65 # ^superscript^
66 66 # ~subscript~
67 67 # @code@
68 68 # %(classname)span%
69 69 #
70 70 # ==notextile== (leave text alone)
71 71 #
72 72 # == Links
73 73 #
74 74 # To make a hypertext link, put the link text in "quotation
75 75 # marks" followed immediately by a colon and the URL of the link.
76 76 #
77 77 # Optional: text in (parentheses) following the link text,
78 78 # but before the closing quotation mark, will become a Title
79 79 # attribute for the link, visible as a tool tip when a cursor is above it.
80 80 #
81 81 # Example:
82 82 #
83 83 # "This is a link (This is a title) ":http://www.textism.com
84 84 #
85 85 # Will become:
86 86 #
87 87 # <a href="http://www.textism.com" title="This is a title">This is a link</a>
88 88 #
89 89 # == Images
90 90 #
91 91 # To insert an image, put the URL for the image inside exclamation marks.
92 92 #
93 93 # Optional: text that immediately follows the URL in (parentheses) will
94 94 # be used as the Alt text for the image. Images on the web should always
95 95 # have descriptive Alt text for the benefit of readers using non-graphical
96 96 # browsers.
97 97 #
98 98 # Optional: place a colon followed by a URL immediately after the
99 99 # closing ! to make the image into a link.
100 100 #
101 101 # Example:
102 102 #
103 103 # !http://www.textism.com/common/textist.gif(Textist)!
104 104 #
105 105 # Will become:
106 106 #
107 107 # <img src="http://www.textism.com/common/textist.gif" alt="Textist" />
108 108 #
109 109 # With a link:
110 110 #
111 111 # !/common/textist.gif(Textist)!:http://textism.com
112 112 #
113 113 # Will become:
114 114 #
115 115 # <a href="http://textism.com"><img src="/common/textist.gif" alt="Textist" /></a>
116 116 #
117 117 # == Defining Acronyms
118 118 #
119 119 # HTML allows authors to define acronyms via the tag. The definition appears as a
120 120 # tool tip when a cursor hovers over the acronym. A crucial aid to clear writing,
121 121 # this should be used at least once for each acronym in documents where they appear.
122 122 #
123 123 # To quickly define an acronym in Textile, place the full text in (parentheses)
124 124 # immediately following the acronym.
125 125 #
126 126 # Example:
127 127 #
128 128 # ACLU(American Civil Liberties Union)
129 129 #
130 130 # Will become:
131 131 #
132 132 # <acronym title="American Civil Liberties Union">ACLU</acronym>
133 133 #
134 134 # == Adding Tables
135 135 #
136 136 # In Textile, simple tables can be added by seperating each column by
137 137 # a pipe.
138 138 #
139 139 # |a|simple|table|row|
140 140 # |And|Another|table|row|
141 141 #
142 142 # Attributes are defined by style definitions in parentheses.
143 143 #
144 144 # table(border:1px solid black).
145 145 # (background:#ddd;color:red). |{}| | | |
146 146 #
147 147 # == Using RedCloth
148 148 #
149 149 # RedCloth is simply an extension of the String class, which can handle
150 150 # Textile formatting. Use it like a String and output HTML with its
151 151 # RedCloth#to_html method.
152 152 #
153 153 # doc = RedCloth.new "
154 154 #
155 155 # h2. Test document
156 156 #
157 157 # Just a simple test."
158 158 #
159 159 # puts doc.to_html
160 160 #
161 161 # By default, RedCloth uses both Textile and Markdown formatting, with
162 162 # Textile formatting taking precedence. If you want to turn off Markdown
163 163 # formatting, to boost speed and limit the processor:
164 164 #
165 165 # class RedCloth::Textile.new( str )
166 166
167 167 class RedCloth < String
168 168
169 169 VERSION = '3.0.4'
170 170 DEFAULT_RULES = [:textile, :markdown]
171 171
172 172 #
173 173 # Two accessor for setting security restrictions.
174 174 #
175 175 # This is a nice thing if you're using RedCloth for
176 176 # formatting in public places (e.g. Wikis) where you
177 177 # don't want users to abuse HTML for bad things.
178 178 #
179 179 # If +:filter_html+ is set, HTML which wasn't
180 180 # created by the Textile processor will be escaped.
181 181 #
182 182 # If +:filter_styles+ is set, it will also disable
183 183 # the style markup specifier. ('{color: red}')
184 184 #
185 185 attr_accessor :filter_html, :filter_styles
186 186
187 187 #
188 188 # Accessor for toggling hard breaks.
189 189 #
190 190 # If +:hard_breaks+ is set, single newlines will
191 191 # be converted to HTML break tags. This is the
192 192 # default behavior for traditional RedCloth.
193 193 #
194 194 attr_accessor :hard_breaks
195 195
196 196 # Accessor for toggling lite mode.
197 197 #
198 198 # In lite mode, block-level rules are ignored. This means
199 199 # that tables, paragraphs, lists, and such aren't available.
200 200 # Only the inline markup for bold, italics, entities and so on.
201 201 #
202 202 # r = RedCloth.new( "And then? She *fell*!", [:lite_mode] )
203 203 # r.to_html
204 204 # #=> "And then? She <strong>fell</strong>!"
205 205 #
206 206 attr_accessor :lite_mode
207 207
208 208 #
209 209 # Accessor for toggling span caps.
210 210 #
211 211 # Textile places `span' tags around capitalized
212 212 # words by default, but this wreaks havoc on Wikis.
213 213 # If +:no_span_caps+ is set, this will be
214 214 # suppressed.
215 215 #
216 216 attr_accessor :no_span_caps
217 217
218 218 #
219 219 # Establishes the markup predence. Available rules include:
220 220 #
221 221 # == Textile Rules
222 222 #
223 223 # The following textile rules can be set individually. Or add the complete
224 224 # set of rules with the single :textile rule, which supplies the rule set in
225 225 # the following precedence:
226 226 #
227 227 # refs_textile:: Textile references (i.e. [hobix]http://hobix.com/)
228 228 # block_textile_table:: Textile table block structures
229 229 # block_textile_lists:: Textile list structures
230 230 # block_textile_prefix:: Textile blocks with prefixes (i.e. bq., h2., etc.)
231 231 # inline_textile_image:: Textile inline images
232 232 # inline_textile_link:: Textile inline links
233 233 # inline_textile_span:: Textile inline spans
234 234 # glyphs_textile:: Textile entities (such as em-dashes and smart quotes)
235 235 #
236 236 # == Markdown
237 237 #
238 238 # refs_markdown:: Markdown references (for example: [hobix]: http://hobix.com/)
239 239 # block_markdown_setext:: Markdown setext headers
240 240 # block_markdown_atx:: Markdown atx headers
241 241 # block_markdown_rule:: Markdown horizontal rules
242 242 # block_markdown_bq:: Markdown blockquotes
243 243 # block_markdown_lists:: Markdown lists
244 244 # inline_markdown_link:: Markdown links
245 245 attr_accessor :rules
246 246
247 247 # Returns a new RedCloth object, based on _string_ and
248 248 # enforcing all the included _restrictions_.
249 249 #
250 250 # r = RedCloth.new( "h1. A <b>bold</b> man", [:filter_html] )
251 251 # r.to_html
252 252 # #=>"<h1>A &lt;b&gt;bold&lt;/b&gt; man</h1>"
253 253 #
254 254 def initialize( string, restrictions = [] )
255 255 restrictions.each { |r| method( "#{ r }=" ).call( true ) }
256 256 super( string )
257 257 end
258 258
259 259 #
260 260 # Generates HTML from the Textile contents.
261 261 #
262 262 # r = RedCloth.new( "And then? She *fell*!" )
263 263 # r.to_html( true )
264 264 # #=>"And then? She <strong>fell</strong>!"
265 265 #
266 266 def to_html( *rules )
267 267 rules = DEFAULT_RULES if rules.empty?
268 268 # make our working copy
269 269 text = self.dup
270 270
271 271 @urlrefs = {}
272 272 @shelf = []
273 273 textile_rules = [:refs_textile, :block_textile_table, :block_textile_lists,
274 274 :block_textile_prefix, :inline_textile_image, :inline_textile_link,
275 275 :inline_textile_code, :inline_textile_span]
276 276 markdown_rules = [:refs_markdown, :block_markdown_setext, :block_markdown_atx, :block_markdown_rule,
277 277 :block_markdown_bq, :block_markdown_lists,
278 278 :inline_markdown_reflink, :inline_markdown_link]
279 279 @rules = rules.collect do |rule|
280 280 case rule
281 281 when :markdown
282 282 markdown_rules
283 283 when :textile
284 284 textile_rules
285 285 else
286 286 rule
287 287 end
288 288 end.flatten
289 289
290 290 # standard clean up
291 291 incoming_entities text
292 292 clean_white_space text
293 293
294 294 # start processor
295 295 @pre_list = []
296 296 rip_offtags text
297 297 no_textile text
298 298 escape_html_tags text
299 299 hard_break text
300 300 unless @lite_mode
301 301 refs text
302 302 blocks text
303 303 end
304 304 inline text
305 305 smooth_offtags text
306 306
307 307 retrieve text
308 308
309 309 text.gsub!( /<\/?notextile>/, '' )
310 310 text.gsub!( /x%x%/, '&#38;' )
311 311 clean_html text if filter_html
312 312 text.strip!
313 313 text
314 314
315 315 end
316 316
317 317 #######
318 318 private
319 319 #######
320 320 #
321 321 # Mapping of 8-bit ASCII codes to HTML numerical entity equivalents.
322 322 # (from PyTextile)
323 323 #
324 324 TEXTILE_TAGS =
325 325
326 326 [[128, 8364], [129, 0], [130, 8218], [131, 402], [132, 8222], [133, 8230],
327 327 [134, 8224], [135, 8225], [136, 710], [137, 8240], [138, 352], [139, 8249],
328 328 [140, 338], [141, 0], [142, 0], [143, 0], [144, 0], [145, 8216], [146, 8217],
329 329 [147, 8220], [148, 8221], [149, 8226], [150, 8211], [151, 8212], [152, 732],
330 330 [153, 8482], [154, 353], [155, 8250], [156, 339], [157, 0], [158, 0], [159, 376]].
331 331
332 332 collect! do |a, b|
333 333 [a.chr, ( b.zero? and "" or "&#{ b };" )]
334 334 end
335 335
336 336 #
337 337 # Regular expressions to convert to HTML.
338 338 #
339 339 A_HLGN = /(?:(?:<>|<|>|\=|[()]+)+)/
340 340 A_VLGN = /[\-^~]/
341 341 C_CLAS = '(?:\([^)]+\))'
342 342 C_LNGE = '(?:\[[^\]]+\])'
343 343 C_STYL = '(?:\{[^}]+\})'
344 344 S_CSPN = '(?:\\\\\d+)'
345 345 S_RSPN = '(?:/\d+)'
346 346 A = "(?:#{A_HLGN}?#{A_VLGN}?|#{A_VLGN}?#{A_HLGN}?)"
347 347 S = "(?:#{S_CSPN}?#{S_RSPN}|#{S_RSPN}?#{S_CSPN}?)"
348 348 C = "(?:#{C_CLAS}?#{C_STYL}?#{C_LNGE}?|#{C_STYL}?#{C_LNGE}?#{C_CLAS}?|#{C_LNGE}?#{C_STYL}?#{C_CLAS}?)"
349 349 # PUNCT = Regexp::quote( '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~' )
350 350 PUNCT = Regexp::quote( '!"#$%&\'*+,-./:;=?@\\^_`|~' )
351 351 PUNCT_NOQ = Regexp::quote( '!"#$&\',./:;=?@\\`|' )
352 352 PUNCT_Q = Regexp::quote( '*-_+^~%' )
353 353 HYPERLINK = '(\S+?)([^\w\s/;=\?]*?)(?=\s|<|$)'
354 354
355 355 # Text markup tags, don't conflict with block tags
356 356 SIMPLE_HTML_TAGS = [
357 357 'tt', 'b', 'i', 'big', 'small', 'em', 'strong', 'dfn', 'code',
358 358 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'a', 'img', 'br',
359 359 'br', 'map', 'q', 'sub', 'sup', 'span', 'bdo'
360 360 ]
361 361
362 362 QTAGS = [
363 363 ['**', 'b', :limit],
364 364 ['*', 'strong', :limit],
365 365 ['??', 'cite', :limit],
366 366 ['-', 'del', :limit],
367 367 ['__', 'i', :limit],
368 368 ['_', 'em', :limit],
369 369 ['%', 'span', :limit],
370 370 ['+', 'ins', :limit],
371 371 ['^', 'sup', :limit],
372 372 ['~', 'sub', :limit]
373 373 ]
374 374 QTAGS.collect! do |rc, ht, rtype|
375 375 rcq = Regexp::quote rc
376 376 re =
377 377 case rtype
378 378 when :limit
379 379 /(^|[>\s\(])
380 380 (#{rcq})
381 381 (#{C})
382 382 (?::(\S+?))?
383 383 ([^\s\-].*?[^\s\-]|\w)
384 384 #{rcq}
385 385 (?=[[:punct:]]|\s|\)|$)/x
386 386 else
387 387 /(#{rcq})
388 388 (#{C})
389 389 (?::(\S+))?
390 390 ([^\s\-].*?[^\s\-]|\w)
391 391 #{rcq}/xm
392 392 end
393 393 [rc, ht, re, rtype]
394 394 end
395 395
396 396 # Elements to handle
397 397 GLYPHS = [
398 398 # [ /([^\s\[{(>])?\'([dmst]\b|ll\b|ve\b|\s|:|$)/, '\1&#8217;\2' ], # single closing
399 399 # [ /([^\s\[{(>#{PUNCT_Q}][#{PUNCT_Q}]*)\'/, '\1&#8217;' ], # single closing
400 400 # [ /\'(?=[#{PUNCT_Q}]*(s\b|[\s#{PUNCT_NOQ}]))/, '&#8217;' ], # single closing
401 401 # [ /\'/, '&#8216;' ], # single opening
402 402 [ /</, '&lt;' ], # less-than
403 403 [ />/, '&gt;' ], # greater-than
404 404 # [ /([^\s\[{(])?"(\s|:|$)/, '\1&#8221;\2' ], # double closing
405 405 # [ /([^\s\[{(>#{PUNCT_Q}][#{PUNCT_Q}]*)"/, '\1&#8221;' ], # double closing
406 406 # [ /"(?=[#{PUNCT_Q}]*[\s#{PUNCT_NOQ}])/, '&#8221;' ], # double closing
407 407 # [ /"/, '&#8220;' ], # double opening
408 408 [ /\b( )?\.{3}/, '\1&#8230;' ], # ellipsis
409 409 [ /\b([A-Z][A-Z0-9]{2,})\b(?:[(]([^)]*)[)])/, '<acronym title="\2">\1</acronym>' ], # 3+ uppercase acronym
410 410 [ /(^|[^"][>\s])([A-Z][A-Z0-9 ]+[A-Z0-9])([^<A-Za-z0-9]|$)/, '\1<span class="caps">\2</span>\3', :no_span_caps ], # 3+ uppercase caps
411 411 [ /(\.\s)?\s?--\s?/, '\1&#8212;' ], # em dash
412 412 [ /\s->\s/, ' &rarr; ' ], # right arrow
413 413 [ /\s-\s/, ' &#8211; ' ], # en dash
414 414 [ /(\d+) ?x ?(\d+)/, '\1&#215;\2' ], # dimension sign
415 415 [ /\b ?[(\[]TM[\])]/i, '&#8482;' ], # trademark
416 416 [ /\b ?[(\[]R[\])]/i, '&#174;' ], # registered
417 417 [ /\b ?[(\[]C[\])]/i, '&#169;' ] # copyright
418 418 ]
419 419
420 420 H_ALGN_VALS = {
421 421 '<' => 'left',
422 422 '=' => 'center',
423 423 '>' => 'right',
424 424 '<>' => 'justify'
425 425 }
426 426
427 427 V_ALGN_VALS = {
428 428 '^' => 'top',
429 429 '-' => 'middle',
430 430 '~' => 'bottom'
431 431 }
432 432
433 433 #
434 434 # Flexible HTML escaping
435 435 #
436 436 def htmlesc( str, mode )
437 437 str.gsub!( '&', '&amp;' )
438 438 str.gsub!( '"', '&quot;' ) if mode != :NoQuotes
439 439 str.gsub!( "'", '&#039;' ) if mode == :Quotes
440 440 str.gsub!( '<', '&lt;')
441 441 str.gsub!( '>', '&gt;')
442 442 end
443 443
444 444 # Search and replace for Textile glyphs (quotes, dashes, other symbols)
445 445 def pgl( text )
446 446 GLYPHS.each do |re, resub, tog|
447 447 next if tog and method( tog ).call
448 448 text.gsub! re, resub
449 449 end
450 450 end
451 451
452 452 # Parses Textile attribute lists and builds an HTML attribute string
453 453 def pba( text_in, element = "" )
454 454
455 455 return '' unless text_in
456 456
457 457 style = []
458 458 text = text_in.dup
459 459 if element == 'td'
460 460 colspan = $1 if text =~ /\\(\d+)/
461 461 rowspan = $1 if text =~ /\/(\d+)/
462 462 style << "vertical-align:#{ v_align( $& ) };" if text =~ A_VLGN
463 463 end
464 464
465 465 style << "#{ $1 };" if not filter_styles and
466 466 text.sub!( /\{([^}]*)\}/, '' )
467 467
468 468 lang = $1 if
469 469 text.sub!( /\[([^)]+?)\]/, '' )
470 470
471 471 cls = $1 if
472 472 text.sub!( /\(([^()]+?)\)/, '' )
473 473
474 474 style << "padding-left:#{ $1.length }em;" if
475 475 text.sub!( /([(]+)/, '' )
476 476
477 477 style << "padding-right:#{ $1.length }em;" if text.sub!( /([)]+)/, '' )
478 478
479 479 style << "text-align:#{ h_align( $& ) };" if text =~ A_HLGN
480 480
481 481 cls, id = $1, $2 if cls =~ /^(.*?)#(.*)$/
482 482
483 483 atts = ''
484 484 atts << " style=\"#{ style.join }\"" unless style.empty?
485 485 atts << " class=\"#{ cls }\"" unless cls.to_s.empty?
486 486 atts << " lang=\"#{ lang }\"" if lang
487 487 atts << " id=\"#{ id }\"" if id
488 488 atts << " colspan=\"#{ colspan }\"" if colspan
489 489 atts << " rowspan=\"#{ rowspan }\"" if rowspan
490 490
491 491 atts
492 492 end
493 493
494 494 TABLE_RE = /^(?:table(_?#{S}#{A}#{C})\. ?\n)?^(#{A}#{C}\.? ?\|.*?\|)(\n\n|\Z)/m
495 495
496 496 # Parses a Textile table block, building HTML from the result.
497 497 def block_textile_table( text )
498 498 text.gsub!( TABLE_RE ) do |matches|
499 499
500 500 tatts, fullrow = $~[1..2]
501 501 tatts = pba( tatts, 'table' )
502 502 tatts = shelve( tatts ) if tatts
503 503 rows = []
504 504
505 505 fullrow.
506 506 split( /\|$/m ).
507 507 delete_if { |x| x.empty? }.
508 508 each do |row|
509 509
510 510 ratts, row = pba( $1, 'tr' ), $2 if row =~ /^(#{A}#{C}\. )(.*)/m
511 511
512 512 cells = []
513 513 #row.split( /\(?!\[\[[^\]])|(?![^\[]\]\])/ ).each do |cell|
514 514 row.split( /\|(?![^\[\|]*\]\])/ ).each do |cell|
515 515 ctyp = 'd'
516 516 ctyp = 'h' if cell =~ /^_/
517 517
518 518 catts = ''
519 519 catts, cell = pba( $1, 'td' ), $2 if cell =~ /^(_?#{S}#{A}#{C}\. ?)(.*)/
520 520
521 521 unless cell.strip.empty?
522 522 catts = shelve( catts ) if catts
523 523 cells << "\t\t\t<t#{ ctyp }#{ catts }>#{ cell }</t#{ ctyp }>"
524 524 end
525 525 end
526 526 ratts = shelve( ratts ) if ratts
527 527 rows << "\t\t<tr#{ ratts }>\n#{ cells.join( "\n" ) }\n\t\t</tr>"
528 528 end
529 529 "\t<table#{ tatts }>\n#{ rows.join( "\n" ) }\n\t</table>\n\n"
530 530 end
531 531 end
532 532
533 533 LISTS_RE = /^([#*]+?#{C} .*?)$(?![^#*])/m
534 534 LISTS_CONTENT_RE = /^([#*]+)(#{A}#{C}) (.*)$/m
535 535
536 536 # Parses Textile lists and generates HTML
537 537 def block_textile_lists( text )
538 538 text.gsub!( LISTS_RE ) do |match|
539 539 lines = match.split( /\n/ )
540 540 last_line = -1
541 541 depth = []
542 542 lines.each_with_index do |line, line_id|
543 543 if line =~ LISTS_CONTENT_RE
544 544 tl,atts,content = $~[1..3]
545 545 if depth.last
546 546 if depth.last.length > tl.length
547 547 (depth.length - 1).downto(0) do |i|
548 548 break if depth[i].length == tl.length
549 549 lines[line_id - 1] << "</li>\n\t</#{ lT( depth[i] ) }l>\n\t"
550 550 depth.pop
551 551 end
552 552 end
553 553 if depth.last and depth.last.length == tl.length
554 554 lines[line_id - 1] << '</li>'
555 555 end
556 556 end
557 557 unless depth.last == tl
558 558 depth << tl
559 559 atts = pba( atts )
560 560 atts = shelve( atts ) if atts
561 561 lines[line_id] = "\t<#{ lT(tl) }l#{ atts }>\n\t<li>#{ content }"
562 562 else
563 563 lines[line_id] = "\t\t<li>#{ content }"
564 564 end
565 565 last_line = line_id
566 566
567 567 else
568 568 last_line = line_id
569 569 end
570 570 if line_id - last_line > 1 or line_id == lines.length - 1
571 571 depth.delete_if do |v|
572 572 lines[last_line] << "</li>\n\t</#{ lT( v ) }l>"
573 573 end
574 574 end
575 575 end
576 576 lines.join( "\n" )
577 577 end
578 578 end
579 579
580 580 CODE_RE = /(\W)
581 581 @
582 582 (?:\|(\w+?)\|)?
583 583 (.+?)
584 584 @
585 585 (?=\W)/x
586 586
587 587 def inline_textile_code( text )
588 588 text.gsub!( CODE_RE ) do |m|
589 589 before,lang,code,after = $~[1..4]
590 590 lang = " lang=\"#{ lang }\"" if lang
591 591 rip_offtags( "#{ before }<code#{ lang }>#{ code }</code>#{ after }" )
592 592 end
593 593 end
594 594
595 595 def lT( text )
596 596 text =~ /\#$/ ? 'o' : 'u'
597 597 end
598 598
599 599 def hard_break( text )
600 600 text.gsub!( /(.)\n(?!\Z| *([#*=]+(\s|$)|[{|]))/, "\\1<br />" ) if hard_breaks
601 601 end
602 602
603 603 BLOCKS_GROUP_RE = /\n{2,}(?! )/m
604 604
605 605 def blocks( text, deep_code = false )
606 606 text.replace( text.split( BLOCKS_GROUP_RE ).collect do |blk|
607 607 plain = blk !~ /\A[#*> ]/
608 608
609 609 # skip blocks that are complex HTML
610 610 if blk =~ /^<\/?(\w+).*>/ and not SIMPLE_HTML_TAGS.include? $1
611 611 blk
612 612 else
613 613 # search for indentation levels
614 614 blk.strip!
615 615 if blk.empty?
616 616 blk
617 617 else
618 618 code_blk = nil
619 619 blk.gsub!( /((?:\n(?:\n^ +[^\n]*)+)+)/m ) do |iblk|
620 620 flush_left iblk
621 621 blocks iblk, plain
622 622 iblk.gsub( /^(\S)/, "\t\\1" )
623 623 if plain
624 624 code_blk = iblk; ""
625 625 else
626 626 iblk
627 627 end
628 628 end
629 629
630 630 block_applied = 0
631 631 @rules.each do |rule_name|
632 632 block_applied += 1 if ( rule_name.to_s.match /^block_/ and method( rule_name ).call( blk ) )
633 633 end
634 634 if block_applied.zero?
635 635 if deep_code
636 636 blk = "\t<pre><code>#{ blk }</code></pre>"
637 637 else
638 638 blk = "\t<p>#{ blk }</p>"
639 639 end
640 640 end
641 641 # hard_break blk
642 642 blk + "\n#{ code_blk }"
643 643 end
644 644 end
645 645
646 646 end.join( "\n\n" ) )
647 647 end
648 648
649 649 def textile_bq( tag, atts, cite, content )
650 650 cite, cite_title = check_refs( cite )
651 651 cite = " cite=\"#{ cite }\"" if cite
652 652 atts = shelve( atts ) if atts
653 653 "\t<blockquote#{ cite }>\n\t\t<p#{ atts }>#{ content }</p>\n\t</blockquote>"
654 654 end
655 655
656 656 def textile_p( tag, atts, cite, content )
657 657 atts = shelve( atts ) if atts
658 658 "\t<#{ tag }#{ atts }>#{ content }</#{ tag }>"
659 659 end
660 660
661 661 alias textile_h1 textile_p
662 662 alias textile_h2 textile_p
663 663 alias textile_h3 textile_p
664 664 alias textile_h4 textile_p
665 665 alias textile_h5 textile_p
666 666 alias textile_h6 textile_p
667 667
668 668 def textile_fn_( tag, num, atts, cite, content )
669 669 atts << " id=\"fn#{ num }\""
670 670 content = "<sup>#{ num }</sup> #{ content }"
671 671 atts = shelve( atts ) if atts
672 672 "\t<p#{ atts }>#{ content }</p>"
673 673 end
674 674
675 675 BLOCK_RE = /^(([a-z]+)(\d*))(#{A}#{C})\.(?::(\S+))? (.*)$/m
676 676
677 677 def block_textile_prefix( text )
678 678 if text =~ BLOCK_RE
679 679 tag,tagpre,num,atts,cite,content = $~[1..6]
680 680 atts = pba( atts )
681 681
682 682 # pass to prefix handler
683 683 if respond_to? "textile_#{ tag }", true
684 684 text.gsub!( $&, method( "textile_#{ tag }" ).call( tag, atts, cite, content ) )
685 685 elsif respond_to? "textile_#{ tagpre }_", true
686 686 text.gsub!( $&, method( "textile_#{ tagpre }_" ).call( tagpre, num, atts, cite, content ) )
687 687 end
688 688 end
689 689 end
690 690
691 691 SETEXT_RE = /\A(.+?)\n([=-])[=-]* *$/m
692 692 def block_markdown_setext( text )
693 693 if text =~ SETEXT_RE
694 694 tag = if $2 == "="; "h1"; else; "h2"; end
695 695 blk, cont = "<#{ tag }>#{ $1 }</#{ tag }>", $'
696 696 blocks cont
697 697 text.replace( blk + cont )
698 698 end
699 699 end
700 700
701 701 ATX_RE = /\A(\#{1,6}) # $1 = string of #'s
702 702 [ ]*
703 703 (.+?) # $2 = Header text
704 704 [ ]*
705 705 \#* # optional closing #'s (not counted)
706 706 $/x
707 707 def block_markdown_atx( text )
708 708 if text =~ ATX_RE
709 709 tag = "h#{ $1.length }"
710 710 blk, cont = "<#{ tag }>#{ $2 }</#{ tag }>\n\n", $'
711 711 blocks cont
712 712 text.replace( blk + cont )
713 713 end
714 714 end
715 715
716 716 MARKDOWN_BQ_RE = /\A(^ *> ?.+$(.+\n)*\n*)+/m
717 717
718 718 def block_markdown_bq( text )
719 719 text.gsub!( MARKDOWN_BQ_RE ) do |blk|
720 720 blk.gsub!( /^ *> ?/, '' )
721 721 flush_left blk
722 722 blocks blk
723 723 blk.gsub!( /^(\S)/, "\t\\1" )
724 724 "<blockquote>\n#{ blk }\n</blockquote>\n\n"
725 725 end
726 726 end
727 727
728 728 MARKDOWN_RULE_RE = /^(#{
729 729 ['*', '-', '_'].collect { |ch| '( ?' + Regexp::quote( ch ) + ' ?){3,}' }.join( '|' )
730 730 })$/
731 731
732 732 def block_markdown_rule( text )
733 733 text.gsub!( MARKDOWN_RULE_RE ) do |blk|
734 734 "<hr />"
735 735 end
736 736 end
737 737
738 738 # XXX TODO XXX
739 739 def block_markdown_lists( text )
740 740 end
741 741
742 742 def inline_textile_span( text )
743 743 QTAGS.each do |qtag_rc, ht, qtag_re, rtype|
744 744 text.gsub!( qtag_re ) do |m|
745 745
746 746 case rtype
747 747 when :limit
748 748 sta,qtag,atts,cite,content = $~[1..5]
749 749 else
750 750 qtag,atts,cite,content = $~[1..4]
751 751 sta = ''
752 752 end
753 753 atts = pba( atts )
754 754 atts << " cite=\"#{ cite }\"" if cite
755 755 atts = shelve( atts ) if atts
756 756
757 757 "#{ sta }<#{ ht }#{ atts }>#{ content }</#{ ht }>"
758 758
759 759 end
760 760 end
761 761 end
762 762
763 763 LINK_RE = /
764 764 ([\s\[{(]|[#{PUNCT}])? # $pre
765 765 " # start
766 766 (#{C}) # $atts
767 ([^"]+?) # $text
767 ([^"\n]+?) # $text
768 768 \s?
769 769 (?:\(([^)]+?)\)(?="))? # $title
770 770 ":
771 771 (\S+?) # $url
772 772 (\/)? # $slash
773 773 ([^\w\/;]*?) # $post
774 774 (?=<|\s|$)
775 775 /x
776 776
777 777 def inline_textile_link( text )
778 778 text.gsub!( LINK_RE ) do |m|
779 779 pre,atts,text,title,url,slash,post = $~[1..7]
780 780
781 781 url, url_title = check_refs( url )
782 782 title ||= url_title
783 783
784 784 atts = pba( atts )
785 785 atts = " href=\"#{ url }#{ slash }\"#{ atts }"
786 786 atts << " title=\"#{ title }\"" if title
787 787 atts = shelve( atts ) if atts
788 788
789 789 external = (url =~ /^https?:\/\//) ? ' class="external"' : ''
790 790
791 791 "#{ pre }<a#{ atts }#{ external }>#{ text }</a>#{ post }"
792 792 end
793 793 end
794 794
795 795 MARKDOWN_REFLINK_RE = /
796 796 \[([^\[\]]+)\] # $text
797 797 [ ]? # opt. space
798 798 (?:\n[ ]*)? # one optional newline followed by spaces
799 799 \[(.*?)\] # $id
800 800 /x
801 801
802 802 def inline_markdown_reflink( text )
803 803 text.gsub!( MARKDOWN_REFLINK_RE ) do |m|
804 804 text, id = $~[1..2]
805 805
806 806 if id.empty?
807 807 url, title = check_refs( text )
808 808 else
809 809 url, title = check_refs( id )
810 810 end
811 811
812 812 atts = " href=\"#{ url }\""
813 813 atts << " title=\"#{ title }\"" if title
814 814 atts = shelve( atts )
815 815
816 816 "<a#{ atts }>#{ text }</a>"
817 817 end
818 818 end
819 819
820 820 MARKDOWN_LINK_RE = /
821 821 \[([^\[\]]+)\] # $text
822 822 \( # open paren
823 823 [ \t]* # opt space
824 824 <?(.+?)>? # $href
825 825 [ \t]* # opt space
826 826 (?: # whole title
827 827 (['"]) # $quote
828 828 (.*?) # $title
829 829 \3 # matching quote
830 830 )? # title is optional
831 831 \)
832 832 /x
833 833
834 834 def inline_markdown_link( text )
835 835 text.gsub!( MARKDOWN_LINK_RE ) do |m|
836 836 text, url, quote, title = $~[1..4]
837 837
838 838 atts = " href=\"#{ url }\""
839 839 atts << " title=\"#{ title }\"" if title
840 840 atts = shelve( atts )
841 841
842 842 "<a#{ atts }>#{ text }</a>"
843 843 end
844 844 end
845 845
846 846 TEXTILE_REFS_RE = /(^ *)\[([^\[\n]+?)\](#{HYPERLINK})(?=\s|$)/
847 847 MARKDOWN_REFS_RE = /(^ *)\[([^\n]+?)\]:\s+<?(#{HYPERLINK})>?(?:\s+"((?:[^"]|\\")+)")?(?=\s|$)/m
848 848
849 849 def refs( text )
850 850 @rules.each do |rule_name|
851 851 method( rule_name ).call( text ) if rule_name.to_s.match /^refs_/
852 852 end
853 853 end
854 854
855 855 def refs_textile( text )
856 856 text.gsub!( TEXTILE_REFS_RE ) do |m|
857 857 flag, url = $~[2..3]
858 858 @urlrefs[flag.downcase] = [url, nil]
859 859 nil
860 860 end
861 861 end
862 862
863 863 def refs_markdown( text )
864 864 text.gsub!( MARKDOWN_REFS_RE ) do |m|
865 865 flag, url = $~[2..3]
866 866 title = $~[6]
867 867 @urlrefs[flag.downcase] = [url, title]
868 868 nil
869 869 end
870 870 end
871 871
872 872 def check_refs( text )
873 873 ret = @urlrefs[text.downcase] if text
874 874 ret || [text, nil]
875 875 end
876 876
877 877 IMAGE_RE = /
878 878 (<p>|.|^) # start of line?
879 879 \! # opening
880 880 (\<|\=|\>)? # optional alignment atts
881 881 (#{C}) # optional style,class atts
882 882 (?:\. )? # optional dot-space
883 883 ([^\s(!]+?) # presume this is the src
884 884 \s? # optional space
885 885 (?:\(((?:[^\(\)]|\([^\)]+\))+?)\))? # optional title
886 886 \! # closing
887 887 (?::#{ HYPERLINK })? # optional href
888 888 /x
889 889
890 890 def inline_textile_image( text )
891 891 text.gsub!( IMAGE_RE ) do |m|
892 892 stln,algn,atts,url,title,href,href_a1,href_a2 = $~[1..8]
893 893 atts = pba( atts )
894 894 atts = " src=\"#{ url }\"#{ atts }"
895 895 atts << " title=\"#{ title }\"" if title
896 896 atts << " alt=\"#{ title }\""
897 897 # size = @getimagesize($url);
898 898 # if($size) $atts.= " $size[3]";
899 899
900 900 href, alt_title = check_refs( href ) if href
901 901 url, url_title = check_refs( url )
902 902
903 903 out = ''
904 904 out << "<a#{ shelve( " href=\"#{ href }\"" ) }>" if href
905 905 out << "<img#{ shelve( atts ) } />"
906 906 out << "</a>#{ href_a1 }#{ href_a2 }" if href
907 907
908 908 if algn
909 909 algn = h_align( algn )
910 910 if stln == "<p>"
911 911 out = "<p style=\"float:#{ algn }\">#{ out }"
912 912 else
913 913 out = "#{ stln }<div style=\"float:#{ algn }\">#{ out }</div>"
914 914 end
915 915 else
916 916 out = stln + out
917 917 end
918 918
919 919 out
920 920 end
921 921 end
922 922
923 923 def shelve( val )
924 924 @shelf << val
925 925 " :redsh##{ @shelf.length }:"
926 926 end
927 927
928 928 def retrieve( text )
929 929 @shelf.each_with_index do |r, i|
930 930 text.gsub!( " :redsh##{ i + 1 }:", r )
931 931 end
932 932 end
933 933
934 934 def incoming_entities( text )
935 935 ## turn any incoming ampersands into a dummy character for now.
936 936 ## This uses a negative lookahead for alphanumerics followed by a semicolon,
937 937 ## implying an incoming html entity, to be skipped
938 938
939 939 text.gsub!( /&(?![#a-z0-9]+;)/i, "x%x%" )
940 940 end
941 941
942 942 def no_textile( text )
943 943 text.gsub!( /(^|\s)==([^=]+.*?)==(\s|$)?/,
944 944 '\1<notextile>\2</notextile>\3' )
945 945 text.gsub!( /^ *==([^=]+.*?)==/m,
946 946 '\1<notextile>\2</notextile>\3' )
947 947 end
948 948
949 949 def clean_white_space( text )
950 950 # normalize line breaks
951 951 text.gsub!( /\r\n/, "\n" )
952 952 text.gsub!( /\r/, "\n" )
953 953 text.gsub!( /\t/, ' ' )
954 954 text.gsub!( /^ +$/, '' )
955 955 text.gsub!( /\n{3,}/, "\n\n" )
956 956 text.gsub!( /"$/, "\" " )
957 957
958 958 # if entire document is indented, flush
959 959 # to the left side
960 960 flush_left text
961 961 end
962 962
963 963 def flush_left( text )
964 964 indt = 0
965 965 if text =~ /^ /
966 966 while text !~ /^ {#{indt}}\S/
967 967 indt += 1
968 968 end unless text.empty?
969 969 if indt.nonzero?
970 970 text.gsub!( /^ {#{indt}}/, '' )
971 971 end
972 972 end
973 973 end
974 974
975 975 def footnote_ref( text )
976 976 text.gsub!( /\b\[([0-9]+?)\](\s)?/,
977 977 '<sup><a href="#fn\1">\1</a></sup>\2' )
978 978 end
979 979
980 980 OFFTAGS = /(code|pre|kbd|notextile)/
981 981 OFFTAG_MATCH = /(?:(<\/#{ OFFTAGS }>)|(<#{ OFFTAGS }[^>]*>))(.*?)(?=<\/?#{ OFFTAGS }|\Z)/mi
982 982 OFFTAG_OPEN = /<#{ OFFTAGS }/
983 983 OFFTAG_CLOSE = /<\/?#{ OFFTAGS }/
984 984 HASTAG_MATCH = /(<\/?\w[^\n]*?>)/m
985 985 ALLTAG_MATCH = /(<\/?\w[^\n]*?>)|.*?(?=<\/?\w[^\n]*?>|$)/m
986 986
987 987 def glyphs_textile( text, level = 0 )
988 988 if text !~ HASTAG_MATCH
989 989 pgl text
990 990 footnote_ref text
991 991 else
992 992 codepre = 0
993 993 text.gsub!( ALLTAG_MATCH ) do |line|
994 994 ## matches are off if we're between <code>, <pre> etc.
995 995 if $1
996 996 if line =~ OFFTAG_OPEN
997 997 codepre += 1
998 998 elsif line =~ OFFTAG_CLOSE
999 999 codepre -= 1
1000 1000 codepre = 0 if codepre < 0
1001 1001 end
1002 1002 elsif codepre.zero?
1003 1003 glyphs_textile( line, level + 1 )
1004 1004 else
1005 1005 htmlesc( line, :NoQuotes )
1006 1006 end
1007 1007 # p [level, codepre, line]
1008 1008
1009 1009 line
1010 1010 end
1011 1011 end
1012 1012 end
1013 1013
1014 1014 def rip_offtags( text )
1015 1015 if text =~ /<.*>/
1016 1016 ## strip and encode <pre> content
1017 1017 codepre, used_offtags = 0, {}
1018 1018 text.gsub!( OFFTAG_MATCH ) do |line|
1019 1019 if $3
1020 1020 offtag, aftertag = $4, $5
1021 1021 codepre += 1
1022 1022 used_offtags[offtag] = true
1023 1023 if codepre - used_offtags.length > 0
1024 1024 htmlesc( line, :NoQuotes ) unless used_offtags['notextile']
1025 1025 @pre_list.last << line
1026 1026 line = ""
1027 1027 else
1028 1028 htmlesc( aftertag, :NoQuotes ) if aftertag and not used_offtags['notextile']
1029 1029 line = "<redpre##{ @pre_list.length }>"
1030 1030 @pre_list << "#{ $3 }#{ aftertag }"
1031 1031 end
1032 1032 elsif $1 and codepre > 0
1033 1033 if codepre - used_offtags.length > 0
1034 1034 htmlesc( line, :NoQuotes ) unless used_offtags['notextile']
1035 1035 @pre_list.last << line
1036 1036 line = ""
1037 1037 end
1038 1038 codepre -= 1 unless codepre.zero?
1039 1039 used_offtags = {} if codepre.zero?
1040 1040 end
1041 1041 line
1042 1042 end
1043 1043 end
1044 1044 text
1045 1045 end
1046 1046
1047 1047 def smooth_offtags( text )
1048 1048 unless @pre_list.empty?
1049 1049 ## replace <pre> content
1050 1050 text.gsub!( /<redpre#(\d+)>/ ) { @pre_list[$1.to_i] }
1051 1051 end
1052 1052 end
1053 1053
1054 1054 def inline( text )
1055 1055 [/^inline_/, /^glyphs_/].each do |meth_re|
1056 1056 @rules.each do |rule_name|
1057 1057 method( rule_name ).call( text ) if rule_name.to_s.match( meth_re )
1058 1058 end
1059 1059 end
1060 1060 end
1061 1061
1062 1062 def h_align( text )
1063 1063 H_ALGN_VALS[text]
1064 1064 end
1065 1065
1066 1066 def v_align( text )
1067 1067 V_ALGN_VALS[text]
1068 1068 end
1069 1069
1070 1070 def textile_popup_help( name, windowW, windowH )
1071 1071 ' <a target="_blank" href="http://hobix.com/textile/#' + helpvar + '" onclick="window.open(this.href, \'popupwindow\', \'width=' + windowW + ',height=' + windowH + ',scrollbars,resizable\'); return false;">' + name + '</a><br />'
1072 1072 end
1073 1073
1074 1074 # HTML cleansing stuff
1075 1075 BASIC_TAGS = {
1076 1076 'a' => ['href', 'title'],
1077 1077 'img' => ['src', 'alt', 'title'],
1078 1078 'br' => [],
1079 1079 'i' => nil,
1080 1080 'u' => nil,
1081 1081 'b' => nil,
1082 1082 'pre' => nil,
1083 1083 'kbd' => nil,
1084 1084 'code' => ['lang'],
1085 1085 'cite' => nil,
1086 1086 'strong' => nil,
1087 1087 'em' => nil,
1088 1088 'ins' => nil,
1089 1089 'sup' => nil,
1090 1090 'sub' => nil,
1091 1091 'del' => nil,
1092 1092 'table' => nil,
1093 1093 'tr' => nil,
1094 1094 'td' => ['colspan', 'rowspan'],
1095 1095 'th' => nil,
1096 1096 'ol' => nil,
1097 1097 'ul' => nil,
1098 1098 'li' => nil,
1099 1099 'p' => nil,
1100 1100 'h1' => nil,
1101 1101 'h2' => nil,
1102 1102 'h3' => nil,
1103 1103 'h4' => nil,
1104 1104 'h5' => nil,
1105 1105 'h6' => nil,
1106 1106 'blockquote' => ['cite']
1107 1107 }
1108 1108
1109 1109 def clean_html( text, tags = BASIC_TAGS )
1110 1110 text.gsub!( /<!\[CDATA\[/, '' )
1111 1111 text.gsub!( /<(\/*)(\w+)([^>]*)>/ ) do
1112 1112 raw = $~
1113 1113 tag = raw[2].downcase
1114 1114 if tags.has_key? tag
1115 1115 pcs = [tag]
1116 1116 tags[tag].each do |prop|
1117 1117 ['"', "'", ''].each do |q|
1118 1118 q2 = ( q != '' ? q : '\s' )
1119 1119 if raw[3] =~ /#{prop}\s*=\s*#{q}([^#{q2}]+)#{q}/i
1120 1120 attrv = $1
1121 1121 next if prop == 'src' and attrv =~ %r{^(?!http)\w+:}
1122 1122 pcs << "#{prop}=\"#{$1.gsub('"', '\\"')}\""
1123 1123 break
1124 1124 end
1125 1125 end
1126 1126 end if tags[tag]
1127 1127 "<#{raw[1]}#{pcs.join " "}>"
1128 1128 else
1129 1129 " "
1130 1130 end
1131 1131 end
1132 1132 end
1133 1133
1134 1134 ALLOWED_TAGS = %w(redpre pre code)
1135 1135
1136 1136 def escape_html_tags(text)
1137 1137 text.gsub!(%r{<(\/?([!\w]+)[^<>\n]*)(>?)}) {|m| ALLOWED_TAGS.include?($2) ? "<#{$1}#{$3}" : "&lt;#{$1}#{'&gt;' unless $3.blank?}" }
1138 1138 end
1139 1139 end
1140 1140
@@ -1,168 +1,168
1 1 # redMine - project management software
2 2 # Copyright (C) 2006-2007 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 require 'redcloth'
19 19 require 'coderay'
20 20
21 21 module Redmine
22 22 module WikiFormatting
23 23
24 24 private
25 25
26 26 class TextileFormatter < RedCloth
27 27
28 28 # auto_link rule after textile rules so that it doesn't break !image_url! tags
29 29 RULES = [:textile, :block_markdown_rule, :inline_auto_link, :inline_auto_mailto, :inline_toc, :inline_macros]
30 30
31 31 def initialize(*args)
32 32 super
33 33 self.hard_breaks=true
34 34 self.no_span_caps=true
35 35 end
36 36
37 37 def to_html(*rules, &block)
38 38 @toc = []
39 39 @macros_runner = block
40 40 super(*RULES).to_s
41 41 end
42 42
43 43 private
44 44
45 45 # Patch for RedCloth. Fixed in RedCloth r128 but _why hasn't released it yet.
46 46 # <a href="http://code.whytheluckystiff.net/redcloth/changeset/128">http://code.whytheluckystiff.net/redcloth/changeset/128</a>
47 47 def hard_break( text )
48 text.gsub!( /(.)\n(?!\n|\Z| *([#*=]+(\s|$)|[{|]))/, "\\1<br />" ) if hard_breaks
48 text.gsub!( /(.)\n(?!\n|\Z| *([#*=]+(\s|$)|[{|]))/, "\\1<br />\n" ) if hard_breaks
49 49 end
50 50
51 51 # Patch to add code highlighting support to RedCloth
52 52 def smooth_offtags( text )
53 53 unless @pre_list.empty?
54 54 ## replace <pre> content
55 55 text.gsub!(/<redpre#(\d+)>/) do
56 56 content = @pre_list[$1.to_i]
57 57 if content.match(/<code\s+class="(\w+)">\s?(.+)/m)
58 58 content = "<code class=\"#{$1} CodeRay\">" +
59 59 CodeRay.scan($2, $1.downcase).html(:escape => false, :line_numbers => :inline)
60 60 end
61 61 content
62 62 end
63 63 end
64 64 end
65 65
66 66 # Patch to add 'table of content' support to RedCloth
67 67 def textile_p_withtoc(tag, atts, cite, content)
68 68 if tag =~ /^h(\d)$/
69 69 @toc << [$1.to_i, content]
70 70 end
71 71 content = "<a name=\"#{@toc.length}\" class=\"wiki-page\"></a>" + content
72 72 textile_p(tag, atts, cite, content)
73 73 end
74 74
75 75 alias :textile_h1 :textile_p_withtoc
76 76 alias :textile_h2 :textile_p_withtoc
77 77 alias :textile_h3 :textile_p_withtoc
78 78
79 79 def inline_toc(text)
80 80 text.gsub!(/<p>\{\{([<>]?)toc\}\}<\/p>/i) do
81 81 div_class = 'toc'
82 82 div_class << ' right' if $1 == '>'
83 83 div_class << ' left' if $1 == '<'
84 84 out = "<div class=\"#{div_class}\">"
85 85 @toc.each_with_index do |heading, index|
86 86 # remove wiki links from the item
87 87 toc_item = heading.last.gsub(/(\[\[|\]\])/, '')
88 88 out << "<a href=\"##{index+1}\" class=\"heading#{heading.first}\">#{toc_item}</a>"
89 89 end
90 90 out << '</div>'
91 91 out
92 92 end
93 93 end
94 94
95 95 MACROS_RE = /
96 96 (!)? # escaping
97 97 (
98 98 \{\{ # opening tag
99 99 ([\w]+) # macro name
100 100 (\(([^\}]*)\))? # optional arguments
101 101 \}\} # closing tag
102 102 )
103 103 /x unless const_defined?(:MACROS_RE)
104 104
105 105 def inline_macros(text)
106 106 text.gsub!(MACROS_RE) do
107 107 esc, all, macro = $1, $2, $3.downcase
108 108 args = ($5 || '').split(',').each(&:strip)
109 109 if esc.nil?
110 110 begin
111 111 @macros_runner.call(macro, args)
112 112 rescue => e
113 113 "<div class=\"flash error\">Error executing the <strong>#{macro}</strong> macro (#{e})</div>"
114 114 end || all
115 115 else
116 116 all
117 117 end
118 118 end
119 119 end
120 120
121 121 AUTO_LINK_RE = %r{
122 122 ( # leading text
123 123 <\w+.*?>| # leading HTML tag, or
124 124 [^=<>!:'"/]| # leading punctuation, or
125 125 ^ # beginning of line
126 126 )
127 127 (
128 128 (?:https?://)| # protocol spec, or
129 129 (?:www\.) # www.*
130 130 )
131 131 (
132 132 (\S+?) # url
133 133 (\/)? # slash
134 134 )
135 135 ([^\w\=\/;]*?) # post
136 136 (?=<|\s|$)
137 137 }x unless const_defined?(:AUTO_LINK_RE)
138 138
139 139 # Turns all urls into clickable links (code from Rails).
140 140 def inline_auto_link(text)
141 141 text.gsub!(AUTO_LINK_RE) do
142 142 all, leading, proto, url, post = $&, $1, $2, $3, $6
143 143 if leading =~ /<a\s/i || leading =~ /![<>=]?/
144 144 # don't replace URL's that are already linked
145 145 # and URL's prefixed with ! !> !< != (textile images)
146 146 all
147 147 else
148 148 %(#{leading}<a class="external" href="#{proto=="www."?"http://www.":proto}#{url}">#{proto + url}</a>#{post})
149 149 end
150 150 end
151 151 end
152 152
153 153 # Turns all email addresses into clickable links (code from Rails).
154 154 def inline_auto_mailto(text)
155 155 text.gsub!(/([\w\.!#\$%\-+.]+@[A-Za-z0-9\-]+(\.[A-Za-z0-9\-]+)+)/) do
156 156 text = $1
157 157 %{<a href="mailto:#{$1}" class="email">#{text}</a>}
158 158 end
159 159 end
160 160 end
161 161
162 162 public
163 163
164 164 def self.to_html(text, options = {}, &block)
165 165 TextileFormatter.new(text).to_html(&block)
166 166 end
167 167 end
168 168 end
@@ -1,127 +1,129
1 1 // ** I18N
2 2
3 3 // Calendar pt_BR language
4 4 // Author: Adalberto Machado, <betosm@terra.com.br>
5 // Encoding: any
5 // Review: Alexandre da Silva, <simpsomboy@gmail.com>
6 // Encoding: UTF-8
6 7 // Distributed under the same terms as the calendar itself.
7 8
8 9 // For translators: please use UTF-8 if possible. We strongly believe that
9 10 // Unicode is the answer to a real internationalized world. Also please
10 11 // include your contact information in the header, as can be seen above.
11 12
12 13 // full day names
13 14 Calendar._DN = new Array
14 15 ("Domingo",
15 16 "Segunda",
16 "Terca",
17 "Terça",
17 18 "Quarta",
18 19 "Quinta",
19 20 "Sexta",
20 21 "Sabado",
21 22 "Domingo");
22 23
23 24 // Please note that the following array of short day names (and the same goes
24 25 // for short month names, _SMN) isn't absolutely necessary. We give it here
25 26 // for exemplification on how one can customize the short day names, but if
26 27 // they are simply the first N letters of the full name you can simply say:
27 28 //
28 29 // Calendar._SDN_len = N; // short day name length
29 30 // Calendar._SMN_len = N; // short month name length
30 31 //
31 32 // If N = 3 then this is not needed either since we assume a value of 3 if not
32 33 // present, to be compatible with translation files that were written before
33 34 // this feature.
34 35
35 36 // short day names
36 37 Calendar._SDN = new Array
37 38 ("Dom",
38 39 "Seg",
39 40 "Ter",
40 41 "Qua",
41 42 "Qui",
42 43 "Sex",
43 44 "Sab",
44 45 "Dom");
45 46
46 47 // First day of the week. "0" means display Sunday first, "1" means display
47 48 // Monday first, etc.
48 Calendar._FD = 1;
49 Calendar._FD = 0;
49 50
50 51 // full month names
51 52 Calendar._MN = new Array
52 53 ("Janeiro",
53 54 "Fevereiro",
54 "Marco",
55 "Março",
55 56 "Abril",
56 57 "Maio",
57 58 "Junho",
58 59 "Julho",
59 60 "Agosto",
60 61 "Setembro",
61 62 "Outubro",
62 63 "Novembro",
63 64 "Dezembro");
64 65
65 66 // short month names
66 67 Calendar._SMN = new Array
67 68 ("Jan",
68 69 "Fev",
69 70 "Mar",
70 71 "Abr",
71 72 "Mai",
72 73 "Jun",
73 74 "Jul",
74 75 "Ago",
75 76 "Set",
76 77 "Out",
77 78 "Nov",
78 79 "Dez");
79 80
80 81 // tooltips
81 82 Calendar._TT = {};
82 Calendar._TT["INFO"] = "Sobre o calendario";
83 Calendar._TT["INFO"] = "Sobre o calendário";
83 84
84 85 Calendar._TT["ABOUT"] =
85 86 "DHTML Date/Time Selector\n" +
86 87 "(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
87 "Ultima versao visite: http://www.dynarch.com/projects/calendar/\n" +
88 "Distribuido sobre GNU LGPL. Veja http://gnu.org/licenses/lgpl.html para detalhes." +
88 "Última versão visite: http://www.dynarch.com/projects/calendar/\n" +
89 "Distribuído sobre GNU LGPL. Veja http://gnu.org/licenses/lgpl.html para detalhes." +
89 90 "\n\n" +
90 "Selecao de data:\n" +
91 "- Use os botoes \xab, \xbb para selecionar o ano\n" +
92 "- Use os botoes " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " para selecionar o mes\n" +
93 "- Segure o botao do mouse em qualquer um desses botoes para selecao rapida.";
91 "Seleção de data:\n" +
92 "- Use os botões \xab, \xbb para selecionar o ano\n" +
93 "- Use os botões " + String.fromCharCode(0x2039) + ", " +
94 String.fromCharCode(0x203a) + " para selecionar o mês\n" +
95 "- Segure o botão do mouse em qualquer um desses botões para seleção rápida.";
94 96 Calendar._TT["ABOUT_TIME"] = "\n\n" +
95 "Selecao de hora:\n" +
97 "Seleção de hora:\n" +
96 98 "- Clique em qualquer parte da hora para incrementar\n" +
97 99 "- ou Shift-click para decrementar\n" +
98 "- ou clique e segure para selecao rapida.";
100 "- ou clique e segure para seleção rápida.";
99 101
100 102 Calendar._TT["PREV_YEAR"] = "Ant. ano (segure para menu)";
101 Calendar._TT["PREV_MONTH"] = "Ant. mes (segure para menu)";
103 Calendar._TT["PREV_MONTH"] = "Ant. mês (segure para menu)";
102 104 Calendar._TT["GO_TODAY"] = "Hoje";
103 Calendar._TT["NEXT_MONTH"] = "Prox. mes (segure para menu)";
104 Calendar._TT["NEXT_YEAR"] = "Prox. ano (segure para menu)";
105 Calendar._TT["NEXT_MONTH"] = "Próx. mes (segure para menu)";
106 Calendar._TT["NEXT_YEAR"] = "Próx. ano (segure para menu)";
105 107 Calendar._TT["SEL_DATE"] = "Selecione a data";
106 108 Calendar._TT["DRAG_TO_MOVE"] = "Arraste para mover";
107 109 Calendar._TT["PART_TODAY"] = " (hoje)";
108 110
109 111 // the following is to inform that "%s" is to be the first day of week
110 112 // %s will be replaced with the day name.
111 113 Calendar._TT["DAY_FIRST"] = "Mostre %s primeiro";
112 114
113 115 // This may be locale-dependent. It specifies the week-end days, as an array
114 116 // of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1
115 117 // means Monday, etc.
116 118 Calendar._TT["WEEKEND"] = "0,6";
117 119
118 120 Calendar._TT["CLOSE"] = "Fechar";
119 121 Calendar._TT["TODAY"] = "Hoje";
120 122 Calendar._TT["TIME_PART"] = "(Shift-)Click ou arraste para mudar valor";
121 123
122 124 // date formats
123 125 Calendar._TT["DEF_DATE_FORMAT"] = "%d/%m/%Y";
124 126 Calendar._TT["TT_DATE_FORMAT"] = "%a, %e %b";
125 127
126 128 Calendar._TT["WK"] = "sm";
127 129 Calendar._TT["TIME"] = "Hora:";
@@ -1,14 +1,16
1 // Translated by: Alexandre da Silva <simpsomboy@gmail.com>
2
1 3 jsToolBar.strings = {};
2 jsToolBar.strings['Strong'] = 'Strong';
3 jsToolBar.strings['Italic'] = 'Italic';
4 jsToolBar.strings['Underline'] = 'Underline';
5 jsToolBar.strings['Deleted'] = 'Deleted';
6 jsToolBar.strings['Code'] = 'Inline Code';
7 jsToolBar.strings['Heading 1'] = 'Heading 1';
8 jsToolBar.strings['Heading 2'] = 'Heading 2';
9 jsToolBar.strings['Heading 3'] = 'Heading 3';
10 jsToolBar.strings['Unordered list'] = 'Unordered list';
11 jsToolBar.strings['Ordered list'] = 'Ordered list';
12 jsToolBar.strings['Preformatted text'] = 'Preformatted text';
13 jsToolBar.strings['Wiki link'] = 'Link to a Wiki page';
14 jsToolBar.strings['Image'] = 'Image';
4 jsToolBar.strings['Strong'] = 'Negrito';
5 jsToolBar.strings['Italic'] = 'Itálico';
6 jsToolBar.strings['Underline'] = 'Sublinhado';
7 jsToolBar.strings['Deleted'] = 'Excluído';
8 jsToolBar.strings['Code'] = 'Código Inline';
9 jsToolBar.strings['Heading 1'] = 'Cabeçalho 1';
10 jsToolBar.strings['Heading 2'] = 'Cabeçalho 2';
11 jsToolBar.strings['Heading 3'] = 'Cabeçalho 3';
12 jsToolBar.strings['Unordered list'] = 'Lista não ordenada';
13 jsToolBar.strings['Ordered list'] = 'Lista ordenada';
14 jsToolBar.strings['Preformatted text'] = 'Texto pré-formatado';
15 jsToolBar.strings['Wiki link'] = 'Link para uma página Wiki';
16 jsToolBar.strings['Image'] = 'Imagem';
@@ -1,42 +1,47
1 1 ---
2 2 enumerations_001:
3 3 name: Uncategorized
4 4 id: 1
5 5 opt: DCAT
6 6 enumerations_002:
7 7 name: User documentation
8 8 id: 2
9 9 opt: DCAT
10 10 enumerations_003:
11 11 name: Technical documentation
12 12 id: 3
13 13 opt: DCAT
14 14 enumerations_004:
15 15 name: Low
16 16 id: 4
17 17 opt: IPRI
18 18 enumerations_005:
19 19 name: Normal
20 20 id: 5
21 21 opt: IPRI
22 22 enumerations_006:
23 23 name: High
24 24 id: 6
25 25 opt: IPRI
26 26 enumerations_007:
27 27 name: Urgent
28 28 id: 7
29 29 opt: IPRI
30 30 enumerations_008:
31 31 name: Immediate
32 32 id: 8
33 33 opt: IPRI
34 34 enumerations_009:
35 35 name: Design
36 36 id: 9
37 37 opt: ACTI
38 38 enumerations_010:
39 39 name: Development
40 40 id: 10
41 41 opt: ACTI
42 is_default: true
43 enumerations_011:
44 name: QA
45 id: 11
46 opt: ACTI
42 47 No newline at end of file
@@ -1,208 +1,218
1 1 # redMine - project management software
2 2 # Copyright (C) 2006-2007 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 require File.dirname(__FILE__) + '/../test_helper'
19 19 require 'timelog_controller'
20 20
21 21 # Re-raise errors caught by the controller.
22 22 class TimelogController; def rescue_action(e) raise e end; end
23 23
24 24 class TimelogControllerTest < Test::Unit::TestCase
25 25 fixtures :projects, :enabled_modules, :roles, :members, :issues, :time_entries, :users, :trackers, :enumerations, :issue_statuses, :custom_fields, :custom_values
26 26
27 27 def setup
28 28 @controller = TimelogController.new
29 29 @request = ActionController::TestRequest.new
30 30 @response = ActionController::TestResponse.new
31 31 end
32 32
33 def test_create
33 def test_get_edit
34 @request.session[:user_id] = 3
35 get :edit, :project_id => 1
36 assert_response :success
37 assert_template 'edit'
38 # Default activity selected
39 assert_tag :tag => 'option', :attributes => { :selected => 'selected' },
40 :content => 'Development'
41 end
42
43 def test_post_edit
34 44 @request.session[:user_id] = 3
35 45 post :edit, :project_id => 1,
36 46 :time_entry => {:comments => 'Some work on TimelogControllerTest',
37 47 :activity_id => '10',
38 48 :spent_on => '2008-03-14',
39 49 :issue_id => '1',
40 50 :hours => '7.3'}
41 51 assert_redirected_to 'projects/ecookbook/timelog/details'
42 52
43 53 i = Issue.find(1)
44 54 t = TimeEntry.find_by_comments('Some work on TimelogControllerTest')
45 55 assert_not_nil t
46 56 assert_equal 7.3, t.hours
47 57 assert_equal 3, t.user_id
48 58 assert_equal i, t.issue
49 59 assert_equal i.project, t.project
50 60 end
51 61
52 62 def test_update
53 63 entry = TimeEntry.find(1)
54 64 assert_equal 1, entry.issue_id
55 65 assert_equal 2, entry.user_id
56 66
57 67 @request.session[:user_id] = 1
58 68 post :edit, :id => 1,
59 69 :time_entry => {:issue_id => '2',
60 70 :hours => '8'}
61 71 assert_redirected_to 'projects/ecookbook/timelog/details'
62 72 entry.reload
63 73
64 74 assert_equal 8, entry.hours
65 75 assert_equal 2, entry.issue_id
66 76 assert_equal 2, entry.user_id
67 77 end
68 78
69 79 def destroy
70 80 @request.session[:user_id] = 2
71 81 post :destroy, :id => 1
72 82 assert_redirected_to 'projects/ecookbook/timelog/details'
73 83 assert_nil TimeEntry.find_by_id(1)
74 84 end
75 85
76 86 def test_report_no_criteria
77 87 get :report, :project_id => 1
78 88 assert_response :success
79 89 assert_template 'report'
80 90 end
81 91
82 92 def test_report_all_time
83 93 get :report, :project_id => 1, :criterias => ['project', 'issue']
84 94 assert_response :success
85 95 assert_template 'report'
86 96 assert_not_nil assigns(:total_hours)
87 97 assert_equal "162.90", "%.2f" % assigns(:total_hours)
88 98 end
89 99
90 100 def test_report_all_time_by_day
91 101 get :report, :project_id => 1, :criterias => ['project', 'issue'], :columns => 'day'
92 102 assert_response :success
93 103 assert_template 'report'
94 104 assert_not_nil assigns(:total_hours)
95 105 assert_equal "162.90", "%.2f" % assigns(:total_hours)
96 106 assert_tag :tag => 'th', :content => '2007-03-12'
97 107 end
98 108
99 109 def test_report_one_criteria
100 110 get :report, :project_id => 1, :columns => 'week', :from => "2007-04-01", :to => "2007-04-30", :criterias => ['project']
101 111 assert_response :success
102 112 assert_template 'report'
103 113 assert_not_nil assigns(:total_hours)
104 114 assert_equal "8.65", "%.2f" % assigns(:total_hours)
105 115 end
106 116
107 117 def test_report_two_criterias
108 118 get :report, :project_id => 1, :columns => 'month', :from => "2007-01-01", :to => "2007-12-31", :criterias => ["member", "activity"]
109 119 assert_response :success
110 120 assert_template 'report'
111 121 assert_not_nil assigns(:total_hours)
112 122 assert_equal "162.90", "%.2f" % assigns(:total_hours)
113 123 end
114 124
115 125 def test_report_custom_field_criteria
116 126 get :report, :project_id => 1, :criterias => ['project', 'cf_1']
117 127 assert_response :success
118 128 assert_template 'report'
119 129 assert_not_nil assigns(:total_hours)
120 130 assert_not_nil assigns(:criterias)
121 131 assert_equal 2, assigns(:criterias).size
122 132 assert_equal "162.90", "%.2f" % assigns(:total_hours)
123 133 # Custom field column
124 134 assert_tag :tag => 'th', :content => 'Database'
125 135 # Custom field row
126 136 assert_tag :tag => 'td', :content => 'MySQL',
127 137 :sibling => { :tag => 'td', :attributes => { :class => 'hours' },
128 138 :child => { :tag => 'span', :attributes => { :class => 'hours hours-int' },
129 139 :content => '1' }}
130 140 end
131 141
132 142 def test_report_one_criteria_no_result
133 143 get :report, :project_id => 1, :columns => 'week', :from => "1998-04-01", :to => "1998-04-30", :criterias => ['project']
134 144 assert_response :success
135 145 assert_template 'report'
136 146 assert_not_nil assigns(:total_hours)
137 147 assert_equal "0.00", "%.2f" % assigns(:total_hours)
138 148 end
139 149
140 150 def test_report_csv_export
141 151 get :report, :project_id => 1, :columns => 'month', :from => "2007-01-01", :to => "2007-06-30", :criterias => ["project", "member", "activity"], :format => "csv"
142 152 assert_response :success
143 153 assert_equal 'text/csv', @response.content_type
144 154 lines = @response.body.chomp.split("\n")
145 155 # Headers
146 156 assert_equal 'Project,Member,Activity,2007-1,2007-2,2007-3,2007-4,2007-5,2007-6,Total', lines.first
147 157 # Total row
148 158 assert_equal 'Total,"","","","",154.25,8.65,"","",162.90', lines.last
149 159 end
150 160
151 161 def test_details_at_project_level
152 162 get :details, :project_id => 1
153 163 assert_response :success
154 164 assert_template 'details'
155 165 assert_not_nil assigns(:entries)
156 166 assert_equal 4, assigns(:entries).size
157 167 # project and subproject
158 168 assert_equal [1, 3], assigns(:entries).collect(&:project_id).uniq.sort
159 169 assert_not_nil assigns(:total_hours)
160 170 assert_equal "162.90", "%.2f" % assigns(:total_hours)
161 171 # display all time by default
162 172 assert_equal '2007-03-11'.to_date, assigns(:from)
163 173 assert_equal '2007-04-22'.to_date, assigns(:to)
164 174 end
165 175
166 176 def test_details_at_project_level_with_date_range
167 177 get :details, :project_id => 1, :from => '2007-03-20', :to => '2007-04-30'
168 178 assert_response :success
169 179 assert_template 'details'
170 180 assert_not_nil assigns(:entries)
171 181 assert_equal 3, assigns(:entries).size
172 182 assert_not_nil assigns(:total_hours)
173 183 assert_equal "12.90", "%.2f" % assigns(:total_hours)
174 184 assert_equal '2007-03-20'.to_date, assigns(:from)
175 185 assert_equal '2007-04-30'.to_date, assigns(:to)
176 186 end
177 187
178 188 def test_details_at_project_level_with_period
179 189 get :details, :project_id => 1, :period => '7_days'
180 190 assert_response :success
181 191 assert_template 'details'
182 192 assert_not_nil assigns(:entries)
183 193 assert_not_nil assigns(:total_hours)
184 194 assert_equal Date.today - 7, assigns(:from)
185 195 assert_equal Date.today, assigns(:to)
186 196 end
187 197
188 198 def test_details_at_issue_level
189 199 get :details, :issue_id => 1
190 200 assert_response :success
191 201 assert_template 'details'
192 202 assert_not_nil assigns(:entries)
193 203 assert_equal 2, assigns(:entries).size
194 204 assert_not_nil assigns(:total_hours)
195 205 assert_equal 154.25, assigns(:total_hours)
196 206 # display all time by default
197 207 assert_equal '2007-03-11'.to_date, assigns(:from)
198 208 assert_equal '2007-04-22'.to_date, assigns(:to)
199 209 end
200 210
201 211 def test_details_csv_export
202 212 get :details, :project_id => 1, :format => 'csv'
203 213 assert_response :success
204 214 assert_equal 'text/csv', @response.content_type
205 215 assert @response.body.include?("Date,User,Activity,Project,Issue,Tracker,Subject,Hours,Comment\n")
206 216 assert @response.body.include?("\n04/21/2007,redMine Admin,Design,eCookbook,3,Bug,Error 281 when updating a recipe,1.0,\"\"\n")
207 217 end
208 218 end
@@ -1,62 +1,73
1 1 # redMine - project management software
2 2 # Copyright (C) 2006-2007 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 require File.dirname(__FILE__) + '/../test_helper'
19 19
20 20 class ChangesetTest < Test::Unit::TestCase
21 21 fixtures :projects, :repositories, :issues, :issue_statuses, :changesets, :changes, :issue_categories, :enumerations, :custom_fields, :custom_values, :users, :members, :trackers
22 22
23 23 def setup
24 24 end
25 25
26 26 def test_ref_keywords_any
27 27 Setting.commit_fix_status_id = IssueStatus.find(:first, :conditions => ["is_closed = ?", true]).id
28 28 Setting.commit_fix_done_ratio = '90'
29 29 Setting.commit_ref_keywords = '*'
30 30 Setting.commit_fix_keywords = 'fixes , closes'
31 31
32 32 c = Changeset.new(:repository => Project.find(1).repository,
33 33 :committed_on => Time.now,
34 34 :comments => 'New commit (#2). Fixes #1')
35 35 c.scan_comment_for_issue_ids
36 36
37 37 assert_equal [1, 2], c.issue_ids.sort
38 38 fixed = Issue.find(1)
39 39 assert fixed.closed?
40 40 assert_equal 90, fixed.done_ratio
41 41 end
42 42
43 def test_ref_keywords_any_line_start
44 Setting.commit_ref_keywords = '*'
45
46 c = Changeset.new(:repository => Project.find(1).repository,
47 :committed_on => Time.now,
48 :comments => '#1 is the reason of this commit')
49 c.scan_comment_for_issue_ids
50
51 assert_equal [1], c.issue_ids.sort
52 end
53
43 54 def test_previous
44 55 changeset = Changeset.find_by_revision('3')
45 56 assert_equal Changeset.find_by_revision('2'), changeset.previous
46 57 end
47 58
48 59 def test_previous_nil
49 60 changeset = Changeset.find_by_revision('1')
50 61 assert_nil changeset.previous
51 62 end
52 63
53 64 def test_next
54 65 changeset = Changeset.find_by_revision('2')
55 66 assert_equal Changeset.find_by_revision('3'), changeset.next
56 67 end
57 68
58 69 def test_next_nil
59 70 changeset = Changeset.find_by_revision('4')
60 71 assert_nil changeset.next
61 72 end
62 73 end
@@ -1,230 +1,232
1 1 # redMine - project management software
2 2 # Copyright (C) 2006-2007 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 require File.dirname(__FILE__) + '/../../test_helper'
19 19
20 20 class ApplicationHelperTest < HelperTestCase
21 21 include ApplicationHelper
22 22 include ActionView::Helpers::TextHelper
23 23 fixtures :projects, :repositories, :changesets, :trackers, :issue_statuses, :issues, :documents, :versions, :wikis, :wiki_pages, :wiki_contents, :roles, :enabled_modules
24 24
25 25 def setup
26 26 super
27 27 end
28 28
29 29 def test_auto_links
30 30 to_test = {
31 31 'http://foo.bar' => '<a class="external" href="http://foo.bar">http://foo.bar</a>',
32 32 'http://foo.bar/~user' => '<a class="external" href="http://foo.bar/~user">http://foo.bar/~user</a>',
33 33 'http://foo.bar.' => '<a class="external" href="http://foo.bar">http://foo.bar</a>.',
34 34 'http://foo.bar/foo.bar#foo.bar.' => '<a class="external" href="http://foo.bar/foo.bar#foo.bar">http://foo.bar/foo.bar#foo.bar</a>.',
35 35 'www.foo.bar' => '<a class="external" href="http://www.foo.bar">www.foo.bar</a>',
36 36 'http://foo.bar/page?p=1&t=z&s=' => '<a class="external" href="http://foo.bar/page?p=1&#38;t=z&#38;s=">http://foo.bar/page?p=1&#38;t=z&#38;s=</a>',
37 37 'http://foo.bar/page#125' => '<a class="external" href="http://foo.bar/page#125">http://foo.bar/page#125</a>'
38 38 }
39 39 to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) }
40 40 end
41 41
42 42 def test_auto_mailto
43 43 assert_equal '<p><a href="mailto:test@foo.bar" class="email">test@foo.bar</a></p>',
44 44 textilizable('test@foo.bar')
45 45 end
46 46
47 47 def test_inline_images
48 48 to_test = {
49 49 '!http://foo.bar/image.jpg!' => '<img src="http://foo.bar/image.jpg" alt="" />',
50 50 'floating !>http://foo.bar/image.jpg!' => 'floating <div style="float:right"><img src="http://foo.bar/image.jpg" alt="" /></div>',
51 51 'with class !(some-class)http://foo.bar/image.jpg!' => 'with class <img src="http://foo.bar/image.jpg" class="some-class" alt="" />',
52 52 'with style !{width:100px;height100px}http://foo.bar/image.jpg!' => 'with style <img src="http://foo.bar/image.jpg" style="width:100px;height100px;" alt="" />',
53 53 }
54 54 to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) }
55 55 end
56 56
57 57 def test_textile_external_links
58 58 to_test = {
59 59 'This is a "link":http://foo.bar' => 'This is a <a href="http://foo.bar" class="external">link</a>',
60 60 'This is an intern "link":/foo/bar' => 'This is an intern <a href="/foo/bar">link</a>',
61 '"link (Link title)":http://foo.bar' => '<a href="http://foo.bar" title="Link title" class="external">link</a>'
61 '"link (Link title)":http://foo.bar' => '<a href="http://foo.bar" title="Link title" class="external">link</a>',
62 # no multiline link text
63 "This is a double quote \"on the first line\nand another on a second line\":test" => "This is a double quote \"on the first line<br />\nand another on a second line\":test"
62 64 }
63 65 to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) }
64 66 end
65 67
66 68 def test_redmine_links
67 69 issue_link = link_to('#3', {:controller => 'issues', :action => 'show', :id => 3},
68 70 :class => 'issue', :title => 'Error 281 when updating a recipe (New)')
69 71
70 72 changeset_link = link_to('r1', {:controller => 'repositories', :action => 'revision', :id => 'ecookbook', :rev => 1},
71 73 :class => 'changeset', :title => 'My very first commit')
72 74
73 75 document_link = link_to('Test document', {:controller => 'documents', :action => 'show', :id => 1},
74 76 :class => 'document')
75 77
76 78 version_link = link_to('1.0', {:controller => 'versions', :action => 'show', :id => 2},
77 79 :class => 'version')
78 80
79 81 source_url = {:controller => 'repositories', :action => 'entry', :id => 'ecookbook', :path => 'some/file'}
80 82
81 83 to_test = {
82 84 # tickets
83 85 '#3, #3 and #3.' => "#{issue_link}, #{issue_link} and #{issue_link}.",
84 86 # changesets
85 87 'r1' => changeset_link,
86 88 # documents
87 89 'document#1' => document_link,
88 90 'document:"Test document"' => document_link,
89 91 # versions
90 92 'version#2' => version_link,
91 93 'version:1.0' => version_link,
92 94 'version:"1.0"' => version_link,
93 95 # source
94 96 'source:/some/file' => link_to('source:/some/file', source_url, :class => 'source'),
95 97 'source:/some/file@52' => link_to('source:/some/file@52', source_url.merge(:rev => 52), :class => 'source'),
96 98 'source:/some/file#L110' => link_to('source:/some/file#L110', source_url.merge(:anchor => 'L110'), :class => 'source'),
97 99 'source:/some/file@52#L110' => link_to('source:/some/file@52#L110', source_url.merge(:rev => 52, :anchor => 'L110'), :class => 'source'),
98 100 'export:/some/file' => link_to('export:/some/file', source_url.merge(:format => 'raw'), :class => 'source download'),
99 101 # escaping
100 102 '!#3.' => '#3.',
101 103 '!r1' => 'r1',
102 104 '!document#1' => 'document#1',
103 105 '!document:"Test document"' => 'document:"Test document"',
104 106 '!version#2' => 'version#2',
105 107 '!version:1.0' => 'version:1.0',
106 108 '!version:"1.0"' => 'version:"1.0"',
107 109 '!source:/some/file' => 'source:/some/file',
108 110 # invalid expressions
109 111 'source:' => 'source:'
110 112 }
111 113 @project = Project.find(1)
112 114 to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) }
113 115 end
114 116
115 117 def test_wiki_links
116 118 to_test = {
117 119 '[[CookBook documentation]]' => '<a href="/wiki/ecookbook/CookBook_documentation" class="wiki-page">CookBook documentation</a>',
118 120 '[[Another page|Page]]' => '<a href="/wiki/ecookbook/Another_page" class="wiki-page">Page</a>',
119 121 # page that doesn't exist
120 122 '[[Unknown page]]' => '<a href="/wiki/ecookbook/Unknown_page" class="wiki-page new">Unknown page</a>',
121 123 '[[Unknown page|404]]' => '<a href="/wiki/ecookbook/Unknown_page" class="wiki-page new">404</a>',
122 124 # link to another project wiki
123 125 '[[onlinestore:]]' => '<a href="/wiki/onlinestore/" class="wiki-page">onlinestore</a>',
124 126 '[[onlinestore:|Wiki]]' => '<a href="/wiki/onlinestore/" class="wiki-page">Wiki</a>',
125 127 '[[onlinestore:Start page]]' => '<a href="/wiki/onlinestore/Start_page" class="wiki-page">Start page</a>',
126 128 '[[onlinestore:Start page|Text]]' => '<a href="/wiki/onlinestore/Start_page" class="wiki-page">Text</a>',
127 129 '[[onlinestore:Unknown page]]' => '<a href="/wiki/onlinestore/Unknown_page" class="wiki-page new">Unknown page</a>',
128 130 # escaping
129 131 '![[Another page|Page]]' => '[[Another page|Page]]',
130 132 }
131 133 @project = Project.find(1)
132 134 to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) }
133 135 end
134 136
135 137 def test_html_tags
136 138 to_test = {
137 139 "<div>content</div>" => "<p>&lt;div&gt;content&lt;/div&gt;</p>",
138 140 "<div class=\"bold\">content</div>" => "<p>&lt;div class=\"bold\"&gt;content&lt;/div&gt;</p>",
139 141 "<script>some script;</script>" => "<p>&lt;script&gt;some script;&lt;/script&gt;</p>",
140 142 # do not escape pre/code tags
141 143 "<pre>\nline 1\nline2</pre>" => "<pre>\nline 1\nline2</pre>",
142 144 "<pre><code>\nline 1\nline2</code></pre>" => "<pre><code>\nline 1\nline2</code></pre>",
143 145 "<pre><div>content</div></pre>" => "<pre>&lt;div&gt;content&lt;/div&gt;</pre>",
144 146 "HTML comment: <!-- no comments -->" => "<p>HTML comment: &lt;!-- no comments --&gt;</p>",
145 147 "<!-- opening comment" => "<p>&lt;!-- opening comment</p>"
146 148 }
147 149 to_test.each { |text, result| assert_equal result, textilizable(text) }
148 150 end
149 151
150 152 def test_wiki_links_in_tables
151 153 to_test = {"|Cell 11|Cell 12|Cell 13|\n|Cell 21|Cell 22||\n|Cell 31||Cell 33|" =>
152 154 '<tr><td>Cell 11</td><td>Cell 12</td><td>Cell 13</td></tr>' +
153 155 '<tr><td>Cell 21</td><td>Cell 22</td></tr>' +
154 156 '<tr><td>Cell 31</td><td>Cell 33</td></tr>',
155 157
156 158 "|[[Page|Link title]]|[[Other Page|Other title]]|\n|Cell 21|[[Last page]]|" =>
157 159 '<tr><td><a href="/wiki/ecookbook/Page" class="wiki-page new">Link title</a></td>' +
158 160 '<td><a href="/wiki/ecookbook/Other_Page" class="wiki-page new">Other title</a></td>' +
159 161 '</tr><tr><td>Cell 21</td><td><a href="/wiki/ecookbook/Last_page" class="wiki-page new">Last page</a></td></tr>'
160 162 }
161 163 @project = Project.find(1)
162 164 to_test.each { |text, result| assert_equal "<table>#{result}</table>", textilizable(text).gsub(/[\t\n]/, '') }
163 165 end
164 166
165 167 def test_text_formatting
166 168 to_test = {'*_+bold, italic and underline+_*' => '<strong><em><ins>bold, italic and underline</ins></em></strong>',
167 169 '(_text within parentheses_)' => '(<em>text within parentheses</em>)'
168 170 }
169 171 to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) }
170 172 end
171 173
172 174 def test_wiki_horizontal_rule
173 175 assert_equal '<hr />', textilizable('---')
174 176 assert_equal '<p>Dashes: ---</p>', textilizable('Dashes: ---')
175 177 end
176 178
177 179 def test_macro_hello_world
178 180 text = "{{hello_world}}"
179 181 assert textilizable(text).match(/Hello world!/)
180 182 # escaping
181 183 text = "!{{hello_world}}"
182 184 assert_equal '<p>{{hello_world}}</p>', textilizable(text)
183 185 end
184 186
185 187 def test_macro_include
186 188 @project = Project.find(1)
187 189 # include a page of the current project wiki
188 190 text = "{{include(Another page)}}"
189 191 assert textilizable(text).match(/This is a link to a ticket/)
190 192
191 193 @project = nil
192 194 # include a page of a specific project wiki
193 195 text = "{{include(ecookbook:Another page)}}"
194 196 assert textilizable(text).match(/This is a link to a ticket/)
195 197
196 198 text = "{{include(ecookbook:)}}"
197 199 assert textilizable(text).match(/CookBook documentation/)
198 200
199 201 text = "{{include(unknowidentifier:somepage)}}"
200 202 assert textilizable(text).match(/Unknow project/)
201 203 end
202 204
203 205 def test_date_format_default
204 206 today = Date.today
205 207 Setting.date_format = ''
206 208 assert_equal l_date(today), format_date(today)
207 209 end
208 210
209 211 def test_date_format
210 212 today = Date.today
211 213 Setting.date_format = '%d %m %Y'
212 214 assert_equal today.strftime('%d %m %Y'), format_date(today)
213 215 end
214 216
215 217 def test_time_format_default
216 218 now = Time.now
217 219 Setting.date_format = ''
218 220 Setting.time_format = ''
219 221 assert_equal l_datetime(now), format_time(now)
220 222 assert_equal l_time(now), format_time(now, false)
221 223 end
222 224
223 225 def test_time_format
224 226 now = Time.now
225 227 Setting.date_format = '%d %m %Y'
226 228 Setting.time_format = '%H %M'
227 229 assert_equal now.strftime('%d %m %Y %H %M'), format_time(now)
228 230 assert_equal now.strftime('%H %M'), format_time(now, false)
229 231 end
230 232 end
@@ -1,148 +1,153
1 1 # redMine - project management software
2 2 # Copyright (C) 2006-2008 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 require File.dirname(__FILE__) + '/../test_helper'
19 19
20 20 class QueryTest < Test::Unit::TestCase
21 21 fixtures :projects, :users, :members, :roles, :trackers, :issue_statuses, :issue_categories, :enumerations, :issues, :custom_fields, :custom_values, :queries
22 22
23 23 def test_query_with_multiple_custom_fields
24 24 query = Query.find(1)
25 25 assert query.valid?
26 26 assert query.statement.include?("#{CustomValue.table_name}.value IN ('MySQL')")
27 27 issues = Issue.find :all,:include => [ :assigned_to, :status, :tracker, :project, :priority ], :conditions => query.statement
28 28 assert_equal 1, issues.length
29 29 assert_equal Issue.find(3), issues.first
30 30 end
31 31
32 32 def test_operator_none
33 33 query = Query.new(:project => Project.find(1), :name => '_')
34 34 query.add_filter('fixed_version_id', '!*', [''])
35 35 query.add_filter('cf_1', '!*', [''])
36 36 assert query.statement.include?("#{Issue.table_name}.fixed_version_id IS NULL")
37 37 assert query.statement.include?("#{CustomValue.table_name}.value IS NULL OR #{CustomValue.table_name}.value = ''")
38 38 issues = Issue.find :all,:include => [ :assigned_to, :status, :tracker, :project, :priority ], :conditions => query.statement
39 39 end
40 40
41 41 def test_operator_all
42 42 query = Query.new(:project => Project.find(1), :name => '_')
43 43 query.add_filter('fixed_version_id', '*', [''])
44 44 query.add_filter('cf_1', '*', [''])
45 45 assert query.statement.include?("#{Issue.table_name}.fixed_version_id IS NOT NULL")
46 46 assert query.statement.include?("#{CustomValue.table_name}.value IS NOT NULL AND #{CustomValue.table_name}.value <> ''")
47 47 issues = Issue.find :all,:include => [ :assigned_to, :status, :tracker, :project, :priority ], :conditions => query.statement
48 48 end
49 49
50 50 def test_operator_greater_than
51 51 query = Query.new(:project => Project.find(1), :name => '_')
52 52 query.add_filter('done_ratio', '>=', ['40'])
53 53 assert query.statement.include?("#{Issue.table_name}.done_ratio >= 40")
54 54 issues = Issue.find :all,:include => [ :assigned_to, :status, :tracker, :project, :priority ], :conditions => query.statement
55 55 end
56 56
57 57 def test_operator_in_more_than
58 58 query = Query.new(:project => Project.find(1), :name => '_')
59 59 query.add_filter('due_date', '>t+', ['15'])
60 60 assert query.statement.include?("#{Issue.table_name}.due_date >=")
61 61 issues = Issue.find :all,:include => [ :assigned_to, :status, :tracker, :project, :priority ], :conditions => query.statement
62 62 end
63 63
64 64 def test_operator_in_less_than
65 65 query = Query.new(:project => Project.find(1), :name => '_')
66 66 query.add_filter('due_date', '<t+', ['15'])
67 67 assert query.statement.include?("#{Issue.table_name}.due_date BETWEEN")
68 68 issues = Issue.find :all,:include => [ :assigned_to, :status, :tracker, :project, :priority ], :conditions => query.statement
69 69 end
70 70
71 71 def test_operator_today
72 72 query = Query.new(:project => Project.find(1), :name => '_')
73 73 query.add_filter('due_date', 't', [''])
74 74 assert query.statement.include?("#{Issue.table_name}.due_date BETWEEN")
75 75 issues = Issue.find :all,:include => [ :assigned_to, :status, :tracker, :project, :priority ], :conditions => query.statement
76 76 end
77 77
78 78 def test_operator_this_week_on_date
79 79 query = Query.new(:project => Project.find(1), :name => '_')
80 80 query.add_filter('due_date', 'w', [''])
81 81 assert query.statement.include?("#{Issue.table_name}.due_date BETWEEN")
82 82 issues = Issue.find :all,:include => [ :assigned_to, :status, :tracker, :project, :priority ], :conditions => query.statement
83 83 end
84 84
85 85 def test_operator_this_week_on_datetime
86 86 query = Query.new(:project => Project.find(1), :name => '_')
87 87 query.add_filter('created_on', 'w', [''])
88 88 assert query.statement.include?("#{Issue.table_name}.created_on BETWEEN")
89 89 issues = Issue.find :all,:include => [ :assigned_to, :status, :tracker, :project, :priority ], :conditions => query.statement
90 90 end
91 91
92 92 def test_operator_contains
93 93 query = Query.new(:project => Project.find(1), :name => '_')
94 94 query.add_filter('subject', '~', ['string'])
95 95 assert query.statement.include?("#{Issue.table_name}.subject LIKE '%string%'")
96 96 issues = Issue.find :all,:include => [ :assigned_to, :status, :tracker, :project, :priority ], :conditions => query.statement
97 97 end
98 98
99 99 def test_operator_does_not_contains
100 100 query = Query.new(:project => Project.find(1), :name => '_')
101 101 query.add_filter('subject', '!~', ['string'])
102 102 assert query.statement.include?("#{Issue.table_name}.subject NOT LIKE '%string%'")
103 103 issues = Issue.find :all,:include => [ :assigned_to, :status, :tracker, :project, :priority ], :conditions => query.statement
104 104 end
105 105
106 106 def test_default_columns
107 107 q = Query.new
108 108 assert !q.columns.empty?
109 109 end
110 110
111 111 def test_set_column_names
112 112 q = Query.new
113 113 q.column_names = ['tracker', :subject, '', 'unknonw_column']
114 114 assert_equal [:tracker, :subject], q.columns.collect {|c| c.name}
115 115 c = q.columns.first
116 116 assert q.has_column?(c)
117 117 end
118 118
119 def test_label_for
120 q = Query.new
121 assert_equal 'assigned_to', q.label_for('assigned_to_id')
122 end
123
119 124 def test_editable_by
120 125 admin = User.find(1)
121 126 manager = User.find(2)
122 127 developer = User.find(3)
123 128
124 129 # Public query on project 1
125 130 q = Query.find(1)
126 131 assert q.editable_by?(admin)
127 132 assert q.editable_by?(manager)
128 133 assert !q.editable_by?(developer)
129 134
130 135 # Private query on project 1
131 136 q = Query.find(2)
132 137 assert q.editable_by?(admin)
133 138 assert !q.editable_by?(manager)
134 139 assert q.editable_by?(developer)
135 140
136 141 # Private query for all projects
137 142 q = Query.find(3)
138 143 assert q.editable_by?(admin)
139 144 assert !q.editable_by?(manager)
140 145 assert q.editable_by?(developer)
141 146
142 147 # Public query for all projects
143 148 q = Query.find(4)
144 149 assert q.editable_by?(admin)
145 150 assert !q.editable_by?(manager)
146 151 assert !q.editable_by?(developer)
147 152 end
148 153 end
General Comments 0
You need to be logged in to leave comments. Login now