diff --git a/.gitignore b/.gitignore index 2982b2337..b406336e0 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,5 @@ tmp/ .rvmrc .sass-cache/ *.DS_Store -config/deploy.rb \ No newline at end of file +config/deploy.rb +.idea \ No newline at end of file diff --git a/app/assets/javascripts/models/story.js b/app/assets/javascripts/models/story.js index 51092f9eb..7d06bbc61 100644 --- a/app/assets/javascripts/models/story.js +++ b/app/assets/javascripts/models/story.js @@ -123,6 +123,14 @@ Fulcrum.Story = Backbone.Model.extend({ point_values: function() { return this.collection.project.get('point_values'); }, + story_types: function() { + var types = ["feature", "chore", "bug", "release"]; + return types.map(function(t) { return I18n.t('story.types.' + t);}); + }, + states: function() { + var statuses = ['unscheduled','unstarted','started','finished', 'delivered','accepted','rejected']; + return statuses.map(function(s) { return I18n.t('story.states.' + s);}); + }, // List available state transitions for this story events: function() { diff --git a/app/assets/javascripts/views/form_view.js b/app/assets/javascripts/views/form_view.js index f30bc3598..35f0252a4 100644 --- a/app/assets/javascripts/views/form_view.js +++ b/app/assets/javascripts/views/form_view.js @@ -71,17 +71,17 @@ Fulcrum.FormView = Backbone.View.extend({ }, submit: function() { - var el = this.make('input', {id: "submit", type: "button", value: "Save"}); + var el = this.make('input', {id: "submit", type: "button", value: I18n.t("save")}); return el; }, destroy: function() { - var el = this.make('input', {id: "destroy", type: "button", value: "Delete"}); + var el = this.make('input', {id: "destroy", type: "button", value: I18n.t("delete")}); return el; }, cancel: function() { - var el = this.make('input', {id: "cancel", type: "button", value: "Cancel"}); + var el = this.make('input', {id: "cancel", type: "button", value: I18n.t("cancel")}); return el; }, diff --git a/app/assets/javascripts/views/note_form.js b/app/assets/javascripts/views/note_form.js index 6bd8e3dbb..76dbc3319 100644 --- a/app/assets/javascripts/views/note_form.js +++ b/app/assets/javascripts/views/note_form.js @@ -50,7 +50,7 @@ Fulcrum.NoteForm = Fulcrum.FormView.extend({ $(div).append('
'); $(div).append(this.textArea("note")); - var submit = this.make('input', {id: 'note_submit', type: 'button', value: 'Add note'}); + var submit = this.make('input', {id: 'note_submit', type: 'button', value: I18n.t('add_note')}); $(div).append(submit); this.$el.html(div); diff --git a/app/assets/javascripts/views/story_view.js b/app/assets/javascripts/views/story_view.js index d12412bfa..35886e34d 100644 --- a/app/assets/javascripts/views/story_view.js +++ b/app/assets/javascripts/views/story_view.js @@ -288,7 +288,7 @@ Fulcrum.StoryView = Fulcrum.FormView.extend({ this.makeFormControl({ name: "estimate", label: true, - control: this.select("estimate", this.model.point_values(), {blank: 'No estimate'}) + control: this.select("estimate", this.model.point_values(), {blank: I18n.t('no_estimate')}) }) ); @@ -296,7 +296,7 @@ Fulcrum.StoryView = Fulcrum.FormView.extend({ this.makeFormControl({ name: "story_type", label: true, - control: this.select("story_type", ["feature", "chore", "bug", "release"]) + control: this.select("story_type", this.model.story_types()) }) ); @@ -304,7 +304,7 @@ Fulcrum.StoryView = Fulcrum.FormView.extend({ this.makeFormControl({ name: "state", label: true, - control: this.select("state", ["unscheduled", "unstarted", "started", "finished", "delivered", "accepted", "rejected"]) + control: this.select("state", this.model.states()) }) ); @@ -338,7 +338,7 @@ Fulcrum.StoryView = Fulcrum.FormView.extend({ this.$el.append( this.makeFormControl(function(div) { - $(div).append(this.label("description", "Description")); + $(div).append(this.label("description", I18n.t('activerecord.attributes.story.description'))); $(div).append('
'); if(this.model.isNew() || this.model.get('editingDescription')) { $(div).append(this.textArea("description")); diff --git a/config/application.rb b/config/application.rb index 4de7f5f7a..b5f26f49c 100644 --- a/config/application.rb +++ b/config/application.rb @@ -39,7 +39,7 @@ class Application < Rails::Application # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] # config.i18n.default_locale = :de config.i18n.enforce_available_locales = true - config.i18n.available_locales = ['de', 'el', 'en', 'es', 'nl', 'ja'] + config.i18n.available_locales = ['de', 'el', 'en', 'es', 'nl', 'ja', 'pl'] # Configure the default encoding used in templates for Ruby 1.9. config.encoding = "utf-8" diff --git a/config/locales/devise.pl.yml b/config/locales/devise.pl.yml new file mode 100644 index 000000000..9e16615d1 --- /dev/null +++ b/config/locales/devise.pl.yml @@ -0,0 +1,41 @@ +pl: + errors: + messages: + not_found: 'nie znaleziono' + already_confirmed: 'już został aktywowany, możesz się zalogować' + not_locked: 'nie był zablokowany' + + devise: + failure: + unauthenticated: 'Zaloguj lub zarejestruj się, aby kontynuować.' + unconfirmed: 'Nie aktywowałeś jeszcze swojego konta - sprawdź swój e-mail.' + locked: 'Twoje konto jest zablokowane.' + invalid: 'Niepoprawny adres e-mail lub hasło.' + invalid_token: 'Niepoprawny token.' + timeout: 'Sesja wygasła - zaloguj się ponownie, aby kontynuować.' + inactive: 'Konto nie zostało jeszcze aktywowane.' + sessions: + signed_in: 'Witaj ponownie!' + signed_out: 'Wylogowałeś się. Zapraszamy ponownie!' + passwords: + send_instructions: 'Za chwilę wyślemy instrukcję zmiany hasła na Twój adres e-mail.' + updated: 'Zmieniłeś swoje hasło. Zostałeś automatycznie zalogowany.' + confirmations: + send_instructions: 'Za chwilę wyślemy instrukcję aktywowania konta na Twój adres e-mail.' + confirmed: 'Aktywowaliśmy Twoje konto. Zostałeś automatycznie zalogowany.' + invalid_token: 'Niepoprawny token.' + registrations: + signed_up: 'Witaj! Zarejestrowałeś się pomyślnie.' + signed_up_but_unconfirmed: 'E-mail z linkiem aktywacyjnym został wysłany na Twój adres e-mail. Sprawdź e-mail, aby dokończyć rejestrację.' + updated: 'Zaktualizowałeś swoje dane.' + destroyed: 'Usunąłeś swoje konto.' + unlocks: + send_instructions: 'Za chwilę wyślemy instrukcję odblokowania konta na Twój adres e-mail.' + unlocked: 'Odblokowaliśmy Twoje konto. Jesteś już zalogowany.' + mailer: + confirmation_instructions: + subject: 'Instrukcja aktywacji konta' + reset_password_instructions: + subject: 'Instrukcja ustawienia nowego hasła' + unlock_instructions: + subject: 'Instrukcja odblokowania konta' \ No newline at end of file diff --git a/config/locales/en.yml b/config/locales/en.yml index 63d909c3f..a90fcf55d 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1,6 +1,3 @@ -# Sample localization file for English. Add more files in this directory for other locales. -# See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points. - en: fulcrum: "Fulcrum" @@ -20,12 +17,16 @@ en: points: "Points" saving: "Saving ..." expand: "Expand" + save: "Save" + cancel: "Cancel" author unknown: "Author Unknown" add story: "Add story" + add_note: 'Add note' save error: "Save error" override velocity: "Override velocity" story title: "Story title" + no_estimate: "No estimate" requested on date: 'Requested on {{date}}' requested by user on date: 'Requested by {{user}} on {{date}}' @@ -41,7 +42,7 @@ en: n weeks: one: '1 week' other: '%{count} weeks' - + keycuts: keyboard_shortcuts: Keyboard shortcuts help: Help (this) @@ -55,7 +56,7 @@ en: toggle_my_work: Toggle my work toggle_labels_searches: Toggle labels & searches toggle_current: Toggle current - + activerecord: models: user: @@ -100,7 +101,7 @@ en: project was successfully updated: "Project was successfully updated." index: - listing projects: "Listing Projects" + listing projlisting projectsects: "Listing Projects" are you sure you want to delete this project: "Are you sure you want to delete this project? This action cannot be undone." the iteration starts on x with length of x weeks: one: "Iterations start on %{day} with a length of 1 week" @@ -118,6 +119,21 @@ en: notify_me_when_my_stories_are: "Notify me when my stories are" we_need_your_current_password_to_confirm_your_changes: "We need your current password to confirm your changes." + story: + states: + unscheduled: 'Unscheduled' + unstarted: 'Unstarted' + started: 'Started' + finished: 'Finished' + delivered: 'Delivered' + accepted: 'Accepted' + rejected: 'Rejected' + types: + feature: 'feature' + chore: 'chore' + bug: 'bug' + release: 'release' + time: formats: note_date: "%b %d, %Y" diff --git a/config/locales/pl.yml b/config/locales/pl.yml new file mode 100644 index 000000000..479a5e202 --- /dev/null +++ b/config/locales/pl.yml @@ -0,0 +1,144 @@ +pl: + fulcrum: "Fulcrum" + + log out: "Wyloguj" + log in: "Zaloguj" + sign up: "Zarejestrj" + edit: "Edycja" + delete: "Usuń" + back: "Powrót" + import: "Import" + export: "Eksport" + revert: "Przywróć" + apply: "Zastosuj" + velocity: "Prędkość" + notes: "Notatki" + close: "Zamknij" + points: "Punkty" + saving: "Zapisuje ..." + expand: "Rozwiń" + save: "Zapisz" + cancel: "Anuluj" + + author unknown: "Nieznany Autor" + add story: "Dodaj zadanie" + add_note: 'Dodaj notatkę' + save error: "Błąd Zapisu" + override velocity: "Nadpisz Prędkość" + story title: "Tytuł zadania" + no_estimate: "Nieoszacowane" + + requested on date: 'Zgłoszono {{date}}' + requested by user on date: 'Zgłoszone przez {{user}} {{date}}' + + imported n stories: + one: 'Zaimportowano 1 zadanie' + few: 'Zaimportowano %{count} zadania' + other: 'Zapmoprtowano %{count} zadań' + + n stories failed to import: + one: 'Niepowiódł się import 1 zadania' + other: 'Niepowiódł się import %{count} zadań' + + n weeks: + one: '1 tydzień' + few: '%{count} tygodnie' + other: '%{count} tygodni' + + keycuts: + keyboard_shortcuts: 'Skróty klawiaturowe' + help: 'Pomoc' + add_story: 'Dodaj zadanie' + save_currently_open_story: 'Zapisz otwarte zadanie' + save_comment_being_edited: 'Zapisz edytowany komentarz' + toggle_backlog: 'Włącz/Wyłącz Zaległości' + toggle_done: 'Włącz/Wyłącz Zakończone' + toggle_history: 'Włącz/Wyłącz Historię' + toggle_icebox: 'Włącz/Wyłącz Poczekalnie' + toggle_my_work: 'Włącz/Wyłącz Moje zadania' + toggle_labels_searches: 'Włącz/Wyłącz Wyszukiwanie etykiet' + toggle_current: 'Włącz/Wyłącz Bieżące zadania' + + activerecord: + models: + user: + one: 'Uczestnik' + few: 'Uczestnicy' + other: 'Uczestnicy' + project: + one: 'Projekt' + few: 'Projekty' + other: 'Projekty' + story: + one: 'Zadanie' + few: 'Zadania' + other: 'Zadań' + + attributes: + note: + note: 'Notatka' + project: + name: 'Nazwa' + point_scale: 'Skala punktów' + start_date: 'Data rozpoczęcia' + iteration_start_day: 'Dzień rozpoczęcia iteracji' + iteration_length: 'Czas trwania iteracji' + default_velocity: 'Domyślna prędkość' + story: + title: 'Tytuł' + description: 'Opis' + estimate: 'Oszacowanie' + story_type: 'Typ zadania' + state: 'Stan' + accepted_at: 'Akceptowane' + position: 'Pozycja' + labels: 'Etykiety' + requested_by: 'Zgłoszone przez' + owned_by: 'Należy do' + + projects: + new project: "Nowy Projekt" + edit project: "Edytuj Projekt" + project properties: "Właściwości Projektu" + + project was successfully created: "Utworzenie projektu zakończone sukcesem." + project was successfully updated: "Uaktualnienie projektu zakończone sukcesem." + + index: + listing projlisting projectsects: "Lista Projektów" + are you sure you want to delete this project: "Czy na pewno chcesz usunąć ten projekt? Tej akcji nie można cofnąć." + the iteration starts on x with length of x weeks: + one: "Iteracja zaczyna się %{day} i potrwa 1 tydzień" + few: "Iteracja zaczyna się %{day} i potrwa %{count} tygodnie" + other: "Iteracja zaczyna się %{day} i potrwa %{count} tygodni" + + show: + done: "Zakończone" + in_progress: "W toku" + backlog: "Zaległości" + icebox: "Poczekalnia" + + registrations: + edit: + leave_blank_if_you_dont_want_to_change_it: "Pozostaw puste, jeżeli nie chesz wprowadzić zmian" + notify_me_when_my_stories_are: "Powiadom mnie gdy moje zadania są" + we_need_your_current_password_to_confirm_your_changes: "Aby potwierdzić zmiany, potrzebujemy twojego hasła." + + story: + states: + unscheduled: 'Niezaplanowane' + unstarted: 'Nierozpoczęte' + started: 'Rozpoczęte' + finished: 'Zakończone' + delivered: 'Dostarczone' + accepted: 'Zaakceptowane' + rejected: 'Odrzucone' + types: + feature: 'funkcjonalność' + chore: 'utrzymanie' + bug: 'błąd' + release: 'wdrożenie' + + time: + formats: + note_date: "%d.%m.%Yr" \ No newline at end of file diff --git a/spec/javascripts/views/story_view_spec.js b/spec/javascripts/views/story_view_spec.js index 853e5fe78..33735d4de 100644 --- a/spec/javascripts/views/story_view_spec.js +++ b/spec/javascripts/views/story_view_spec.js @@ -15,6 +15,8 @@ describe('Fulcrum.StoryView', function() { estimable: function() { return true; }, estimated: function() { return false; }, point_values: function() { return [0,1,2]; }, + story_types: function() { return ["feature", "chore", "bug", "release"];}, + states: function() { return ['unscheduled','unstarted','started','finished', 'delivered','accepted','rejected'];}, hasErrors: function() { return false; }, errorsOn: function() { return false; }, url: '/path/to/story',