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',