diff --git a/.eslintignore b/.eslintignore index c742b08c00540c1f31a99d296d17214a9e2e9bbb..1605e483e9e6387642a27955fd97013226f23212 100644 --- a/.eslintignore +++ b/.eslintignore @@ -7,3 +7,4 @@ /vendor/ karma.config.js webpack.config.js +/app/assets/javascripts/locale/**/*.js diff --git a/.gitignore b/.gitignore index bb818213de178a19e305d19da49e4a1c9dc98e26..0fb97ffb98ed7fb391bddd92495a0ff9127bd1b7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ *.log *.swp +*.mo +*.edit.po .DS_Store .bundle .chef @@ -54,3 +56,4 @@ eslint-report.html /shared/* /.gitlab_workhorse_secret /webpack-report/ +/locale/**/LC_MESSAGES diff --git a/Gemfile b/Gemfile index f54a1f500fd150407034f859a7b6ef2311df6568..9426a55861283e6d10641edcf342a2f9bbb0ca64 100644 --- a/Gemfile +++ b/Gemfile @@ -256,6 +256,11 @@ gem 'sentry-raven', '~> 2.4.0' gem 'premailer-rails', '~> 1.9.0' +# I18n +gem 'gettext_i18n_rails', '~> 1.8.0' +gem 'gettext_i18n_rails_js', '~> 1.2.0' +gem 'gettext', '~> 3.2.2', require: false, group: :development + # Metrics group :metrics do gem 'allocations', '~> 1.0', require: false, platform: :mri diff --git a/Gemfile.lock b/Gemfile.lock index b822a325861b8c0d9218691d733e2b84e2b504f4..c7e3f9935dad28c1d8b5b1195e259bfe0e97eadc 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -198,6 +198,7 @@ GEM faraday_middleware-multi_json (0.0.6) faraday_middleware multi_json + fast_gettext (1.4.0) ffaker (2.4.0) ffi (1.9.10) flay (2.8.1) @@ -251,6 +252,16 @@ GEM gemojione (3.0.1) json get_process_mem (0.2.0) + gettext (3.2.2) + locale (>= 2.0.5) + text (>= 1.3.0) + gettext_i18n_rails (1.8.0) + fast_gettext (>= 0.9.0) + gettext_i18n_rails_js (1.2.0) + gettext (>= 3.0.2) + gettext_i18n_rails (>= 0.7.1) + po_to_json (>= 1.0.0) + rails (>= 3.2.0) gherkin-ruby (0.3.2) gitaly (0.5.0) google-protobuf (~> 3.1) @@ -422,6 +433,7 @@ GEM licensee (8.7.0) rugged (~> 0.24) little-plugger (1.1.4) + locale (2.1.2) logging (2.1.0) little-plugger (~> 1.1) multi_json (~> 1.10) @@ -525,6 +537,8 @@ GEM ast (~> 2.2) path_expander (1.0.1) pg (0.18.4) + po_to_json (1.0.1) + json (>= 1.6.0) poltergeist (1.9.0) capybara (~> 2.1) cliver (~> 0.3.1) @@ -777,6 +791,7 @@ GEM temple (0.7.7) test_after_commit (1.1.0) activerecord (>= 3.2) + text (1.3.1) thin (1.7.0) daemons (~> 1.0, >= 1.0.9) eventmachine (~> 1.0, >= 1.0.4) @@ -904,6 +919,9 @@ DEPENDENCIES fuubar (~> 2.0.0) gemnasium-gitlab-service (~> 0.2) gemojione (~> 3.0) + gettext (~> 3.2.2) + gettext_i18n_rails (~> 1.8.0) + gettext_i18n_rails_js (~> 1.2.0) gitaly (~> 0.5.0) github-linguist (~> 4.7.0) gitlab-flowdock-git-hook (~> 1.0.1) diff --git a/app/assets/javascripts/cycle_analytics/components/limit_warning_component.js b/app/assets/javascripts/cycle_analytics/components/limit_warning_component.js index abe48572347b07332cedb2eba71c1ff8c215827b..8d3d34f836f5e078eea0d2621ab84e8b32d37528 100644 --- a/app/assets/javascripts/cycle_analytics/components/limit_warning_component.js +++ b/app/assets/javascripts/cycle_analytics/components/limit_warning_component.js @@ -9,9 +9,9 @@ export default { - Showing 50 events + {{ n__('Showing %d event', 'Showing %d events', 50) }} `, }; diff --git a/app/assets/javascripts/cycle_analytics/components/stage_code_component.js b/app/assets/javascripts/cycle_analytics/components/stage_code_component.js index 80bd2df6f42eaf1fb91c6f72d4ed4129002a8b99..0d9ad197abf18df85f21b52104ee6f8ba7734378 100644 --- a/app/assets/javascripts/cycle_analytics/components/stage_code_component.js +++ b/app/assets/javascripts/cycle_analytics/components/stage_code_component.js @@ -28,11 +28,11 @@ global.cycleAnalytics.StageCodeComponent = Vue.extend({ !{{ mergeRequest.iid }} · - Opened + {{ __('OpenedNDaysAgo|Opened') }} {{ mergeRequest.createdAt }} - by + {{ __('ByAuthor|by') }} {{ mergeRequest.author.name }} diff --git a/app/assets/javascripts/cycle_analytics/components/stage_issue_component.js b/app/assets/javascripts/cycle_analytics/components/stage_issue_component.js index 20a43798fbedc752ca528f5523cba5dd74006867..ad285874643fd879ed4715bfb287067b81301b68 100644 --- a/app/assets/javascripts/cycle_analytics/components/stage_issue_component.js +++ b/app/assets/javascripts/cycle_analytics/components/stage_issue_component.js @@ -28,11 +28,11 @@ global.cycleAnalytics.StageIssueComponent = Vue.extend({ #{{ issue.iid }} · - Opened + {{ __('OpenedNDaysAgo|Opened') }} {{ issue.createdAt }} - by + {{ __('ByAuthor|by') }} {{ issue.author.name }} diff --git a/app/assets/javascripts/cycle_analytics/components/stage_plan_component.js b/app/assets/javascripts/cycle_analytics/components/stage_plan_component.js index f33cac3da8248131689a98764d158f1f47c19c46..222084deee94c360cf7b60789000afe36ce58045 100644 --- a/app/assets/javascripts/cycle_analytics/components/stage_plan_component.js +++ b/app/assets/javascripts/cycle_analytics/components/stage_plan_component.js @@ -31,10 +31,10 @@ global.cycleAnalytics.StagePlanComponent = Vue.extend({ - First + {{ __('FirstPushedBy|First') }} ${iconCommit} {{ commit.shortSha }} - pushed by + {{ __('FirstPushedBy|pushed by') }} {{ commit.author.name }} diff --git a/app/assets/javascripts/cycle_analytics/components/stage_production_component.js b/app/assets/javascripts/cycle_analytics/components/stage_production_component.js index 657f538537433799d46416188dcbade6875f3e85..a14ebc3ece9429bdb76a6371ae711f68bc94797a 100644 --- a/app/assets/javascripts/cycle_analytics/components/stage_production_component.js +++ b/app/assets/javascripts/cycle_analytics/components/stage_production_component.js @@ -28,11 +28,11 @@ global.cycleAnalytics.StageProductionComponent = Vue.extend({ #{{ issue.iid }} · - Opened + {{ __('OpenedNDaysAgo|Opened') }} {{ issue.createdAt }} - by + {{ __('ByAuthor|by') }} {{ issue.author.name }} diff --git a/app/assets/javascripts/cycle_analytics/components/stage_review_component.js b/app/assets/javascripts/cycle_analytics/components/stage_review_component.js index 8a801300647aac189d99c940f971bb771890b44b..1a5bf9bc0b5118955dce4cc33c9f06e1995f556d 100644 --- a/app/assets/javascripts/cycle_analytics/components/stage_review_component.js +++ b/app/assets/javascripts/cycle_analytics/components/stage_review_component.js @@ -28,11 +28,11 @@ global.cycleAnalytics.StageReviewComponent = Vue.extend({ !{{ mergeRequest.iid }} · - Opened + {{ __('OpenedNDaysAgo|Opened') }} {{ mergeRequest.createdAt }} - by + {{ __('ByAuthor|by') }} {{ mergeRequest.author.name }}