summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/assets/javascripts/cycle_analytics/components/stage_code_component.js2
-rw-r--r--app/assets/javascripts/cycle_analytics/components/stage_issue_component.js2
-rw-r--r--app/assets/javascripts/cycle_analytics/components/stage_plan_component.js2
-rw-r--r--app/assets/javascripts/cycle_analytics/components/stage_production_component.js2
-rw-r--r--app/assets/javascripts/cycle_analytics/components/stage_review_component.js2
-rw-r--r--app/assets/javascripts/cycle_analytics/components/stage_staging_component.js2
-rw-r--r--app/assets/javascripts/cycle_analytics/components/total_time_component.js6
-rw-r--r--app/assets/javascripts/locale/de/app.js2
-rw-r--r--app/assets/javascripts/locale/en/app.js2
-rw-r--r--app/assets/javascripts/locale/es/app.js2
-rw-r--r--app/controllers/application_controller.rb15
-rw-r--r--app/controllers/profiles_controller.rb1
-rw-r--r--app/controllers/projects/cycle_analytics_controller.rb1
-rw-r--r--app/models/user.rb1
-rw-r--r--app/views/profiles/show.html.haml2
-rw-r--r--app/views/projects/cycle_analytics/show.html.haml2
-rw-r--r--config/initializers/fast_gettext.rb4
-rw-r--r--db/migrate/20170413035209_add_preferred_language_to_users.rb4
-rw-r--r--lib/gitlab/i18n.rb12
-rw-r--r--locale/de/gitlab.po51
-rw-r--r--locale/en/gitlab.po51
-rw-r--r--locale/es/gitlab.po54
-rw-r--r--locale/gitlab.pot55
23 files changed, 143 insertions, 134 deletions
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 0bd15ee773d..f22299898a5 100644
--- a/app/assets/javascripts/cycle_analytics/components/stage_code_component.js
+++ b/app/assets/javascripts/cycle_analytics/components/stage_code_component.js
@@ -32,7 +32,7 @@ global.cycleAnalytics.StageCodeComponent = Vue.extend({
<a :href="mergeRequest.url" class="issue-date">{{ mergeRequest.createdAt }}</a>
</span>
<span>
- {{ __('by') }}
+ {{ __('Author|by') }}
<a :href="mergeRequest.author.webUrl" class="issue-author-link">{{ mergeRequest.author.name }}</a>
</span>
</div>
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 b6bf9a2572e..f400fd2fb14 100644
--- a/app/assets/javascripts/cycle_analytics/components/stage_issue_component.js
+++ b/app/assets/javascripts/cycle_analytics/components/stage_issue_component.js
@@ -32,7 +32,7 @@ global.cycleAnalytics.StageIssueComponent = Vue.extend({
<a :href="issue.url" class="issue-date">{{ issue.createdAt }}</a>
</span>
<span>
- {{ __('by') }}
+ {{ __('Author|by') }}
<a :href="issue.author.webUrl" class="issue-author-link">
{{ issue.author.name }}
</a>
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 116c118b824..b85b8902fc7 100644
--- a/app/assets/javascripts/cycle_analytics/components/stage_plan_component.js
+++ b/app/assets/javascripts/cycle_analytics/components/stage_plan_component.js
@@ -31,7 +31,7 @@ global.cycleAnalytics.StagePlanComponent = Vue.extend({
</a>
</h5>
<span>
- {{ __('First') }}
+ {{ __('OfFirstTime|First') }}
<span class="commit-icon">${iconCommit}</span>
<a :href="commit.commitUrl" class="commit-hash-link monospace">{{ commit.shortSha }}</a>
{{ __('pushed by') }}
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 18fb09d6d2f..18c30f490fd 100644
--- a/app/assets/javascripts/cycle_analytics/components/stage_production_component.js
+++ b/app/assets/javascripts/cycle_analytics/components/stage_production_component.js
@@ -32,7 +32,7 @@ global.cycleAnalytics.StageProductionComponent = Vue.extend({
<a :href="issue.url" class="issue-date">{{ issue.createdAt }}</a>
</span>
<span>
- {{ __('by') }}
+ {{ __('Author|by') }}
<a :href="issue.author.webUrl" class="issue-author-link">
{{ issue.author.name }}
</a>
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 af5f1b42ea2..98806760128 100644
--- a/app/assets/javascripts/cycle_analytics/components/stage_review_component.js
+++ b/app/assets/javascripts/cycle_analytics/components/stage_review_component.js
@@ -32,7 +32,7 @@ global.cycleAnalytics.StageReviewComponent = Vue.extend({
<a :href="mergeRequest.url" class="issue-date">{{ mergeRequest.createdAt }}</a>
</span>
<span>
- {{ __('by') }}
+ {{ __('Author|by') }}
<a :href="mergeRequest.author.webUrl" class="issue-author-link">{{ mergeRequest.author.name }}</a>
</span>
<template v-if="mergeRequest.state === 'closed'">
diff --git a/app/assets/javascripts/cycle_analytics/components/stage_staging_component.js b/app/assets/javascripts/cycle_analytics/components/stage_staging_component.js
index a0bd1bab96e..f13294c7af7 100644
--- a/app/assets/javascripts/cycle_analytics/components/stage_staging_component.js
+++ b/app/assets/javascripts/cycle_analytics/components/stage_staging_component.js
@@ -32,7 +32,7 @@ global.cycleAnalytics.StageStagingComponent = Vue.extend({
</h5>
<span>
<a :href="build.url" class="build-date">{{ build.date }}</a>
- {{ __('by') }}
+ {{ __('Author|by') }}
<a :href="build.author.webUrl" class="issue-author-link">
{{ build.author.name }}
</a>
diff --git a/app/assets/javascripts/cycle_analytics/components/total_time_component.js b/app/assets/javascripts/cycle_analytics/components/total_time_component.js
index 48cc0a5c58d..1eef7d9a873 100644
--- a/app/assets/javascripts/cycle_analytics/components/total_time_component.js
+++ b/app/assets/javascripts/cycle_analytics/components/total_time_component.js
@@ -13,9 +13,9 @@ global.cycleAnalytics.TotalTimeComponent = Vue.extend({
<span class="total-time">
<template v-if="Object.keys(time).length">
<template v-if="time.days">{{ time.days }} <span>{{ n__('day', 'days', time.days) }}</span></template>
- <template v-if="time.hours">{{ time.hours }} <span>{{ __('hr') }}</span></template>
- <template v-if="time.mins && !time.days">{{ time.mins }} <span>{{ n__('min', 'mins', time.mins) }}</span></template>
- <template v-if="time.seconds && Object.keys(time).length === 1 || time.seconds === 0">{{ time.seconds }} <span>s</span></template>
+ <template v-if="time.hours">{{ time.hours }} <span>{{ n__('Time|hr', 'Time|hrs', time.hours) }}</span></template>
+ <template v-if="time.mins && !time.days">{{ time.mins }} <span>{{ n__('Time|min', 'Time|mins', time.mins) }}</span></template>
+ <template v-if="time.seconds && Object.keys(time).length === 1 || time.seconds === 0">{{ time.seconds }} <span>{{ __('Time|s') }}</span></template>
</template>
<template v-else>
--
diff --git a/app/assets/javascripts/locale/de/app.js b/app/assets/javascripts/locale/de/app.js
index 1b10c19c48e..51c5ad512fc 100644
--- a/app/assets/javascripts/locale/de/app.js
+++ b/app/assets/javascripts/locale/de/app.js
@@ -1 +1 @@
-var locales = locales || {}; locales['de'] = {"domain":"app","locale_data":{"app":{"":{"Project-Id-Version":"gitlab 1.0.0","Report-Msgid-Bugs-To":"","PO-Revision-Date":"2017-04-12 22:37-0500","Last-Translator":"FULL NAME <EMAIL@ADDRESS>","Language-Team":"German","Language":"de","MIME-Version":"1.0","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"8bit","Plural-Forms":"nplurals=2; plural=n != 1;","lang":"de","domain":"app","plural_forms":"nplurals=2; plural=n != 1;"},"Commits":[""],"Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project.":[""],"Cycle|Code":[""],"Cycle|Issue":[""],"Cycle|Plan":[""],"Cycle|Review":[""],"Cycle|Staging":[""],"Cycle|Test":[""],"Deploys":[""],"Deutsch":[""],"English":[""],"First":[""],"Introducing Cycle Analytics":[""],"Last 30 days":[""],"Last 90 days":[""],"Limited to showing 50 events at most":[""],"Median":[""],"New Issues":[""],"Not available":[""],"Not enough data":[""],"Opened":[""],"Pipeline Health":[""],"Read more":[""],"Related Commits":[""],"Related Issues":[""],"Related Merge Requests":[""],"Relative Builds Trigger by Commits":[""],"Relative Deployed Builds":[""],"Relative Merged Requests":[""],"Showing %d event":["",""],"Spanish":[""],"Stage":[""],"The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request.":[""],"The collection of events added to the data gathered for that stage.":[""],"The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage.":[""],"The phase of the development lifecycle.":[""],"The planning stage shows the time from the previous step to pushing your first commit. This time will be added automatically once you push your first commit.":[""],"The production stage shows the total time it takes between creating an issue and deploying the code to production. The data will be automatically added once you have completed the full idea to production cycle.":[""],"The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request.":[""],"The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time.":[""],"The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running.":[""],"The time taken by each data entry gathered by that stage.":[""],"The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6.":[""],"Total Time":[""],"Want to see the data? Please ask administrator for access.":[""],"We don't have enough data to show this stage.":[""],"You need permission.":[""],"by":[""],"day":["",""],"hr":[""],"min":["",""],"pushed by":[""]}}}; \ No newline at end of file
+var locales = locales || {}; locales['de'] = {"domain":"app","locale_data":{"app":{"":{"Project-Id-Version":"gitlab 1.0.0","Report-Msgid-Bugs-To":"","PO-Revision-Date":"2017-04-12 22:37-0500","Last-Translator":"FULL NAME <EMAIL@ADDRESS>","Language-Team":"German","Language":"de","MIME-Version":"1.0","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"8bit","Plural-Forms":"nplurals=2; plural=n != 1;","lang":"de","domain":"app","plural_forms":"nplurals=2; plural=n != 1;"},"Author|by":[""],"Commits":[""],"Cycle":[""],"Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project.":[""],"Cycle|Code":[""],"Cycle|Issue":[""],"Cycle|Plan":[""],"Cycle|Review":[""],"Cycle|Staging":[""],"Cycle|Test":[""],"Deploys":[""],"Introducing Cycle Analytics":[""],"Last 30 days":[""],"Last 90 days":[""],"Limited to showing 50 events at most":[""],"Median":[""],"New Issues":[""],"Not available":[""],"Not enough data":[""],"OfFirstTime|First":[""],"Opened":[""],"Pipeline Health":[""],"ProjectLifecycle|Stage":[""],"Read more":[""],"Related Commits":[""],"Related Issues":[""],"Related Merge Requests":[""],"Relative Builds Trigger by Commits":[""],"Relative Deployed Builds":[""],"Relative Merged Requests":[""],"Showing %d event":["",""],"The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request.":[""],"The collection of events added to the data gathered for that stage.":[""],"The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage.":[""],"The phase of the development lifecycle.":[""],"The planning stage shows the time from the previous step to pushing your first commit. This time will be added automatically once you push your first commit.":[""],"The production stage shows the total time it takes between creating an issue and deploying the code to production. The data will be automatically added once you have completed the full idea to production cycle.":[""],"The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request.":[""],"The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time.":[""],"The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running.":[""],"The time taken by each data entry gathered by that stage.":[""],"The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6.":[""],"Time|hr":["",""],"Time|min":["",""],"Time|s":[""],"Total Time":[""],"Want to see the data? Please ask administrator for access.":[""],"We don't have enough data to show this stage.":[""],"You need permission.":[""],"day":["",""],"pushed by":[""]}}}; \ No newline at end of file
diff --git a/app/assets/javascripts/locale/en/app.js b/app/assets/javascripts/locale/en/app.js
index 2754e177653..68beb0afda0 100644
--- a/app/assets/javascripts/locale/en/app.js
+++ b/app/assets/javascripts/locale/en/app.js
@@ -1 +1 @@
-var locales = locales || {}; locales['en'] = {"domain":"app","locale_data":{"app":{"":{"Project-Id-Version":"gitlab 1.0.0","Report-Msgid-Bugs-To":"","PO-Revision-Date":"2017-04-12 22:36-0500","Last-Translator":"FULL NAME <EMAIL@ADDRESS>","Language-Team":"English","Language":"en","MIME-Version":"1.0","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"8bit","Plural-Forms":"nplurals=2; plural=n != 1;","lang":"en","domain":"app","plural_forms":"nplurals=2; plural=n != 1;"},"Commits":[""],"Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project.":[""],"Cycle|Code":[""],"Cycle|Issue":[""],"Cycle|Plan":[""],"Cycle|Review":[""],"Cycle|Staging":[""],"Cycle|Test":[""],"Deploys":[""],"Deutsch":[""],"English":[""],"First":[""],"Introducing Cycle Analytics":[""],"Last 30 days":[""],"Last 90 days":[""],"Limited to showing 50 events at most":[""],"Median":[""],"New Issues":[""],"Not available":[""],"Not enough data":[""],"Opened":[""],"Pipeline Health":[""],"Read more":[""],"Related Commits":[""],"Related Issues":[""],"Related Merge Requests":[""],"Relative Builds Trigger by Commits":[""],"Relative Deployed Builds":[""],"Relative Merged Requests":[""],"Showing %d event":["",""],"Spanish":[""],"Stage":[""],"The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request.":[""],"The collection of events added to the data gathered for that stage.":[""],"The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage.":[""],"The phase of the development lifecycle.":[""],"The planning stage shows the time from the previous step to pushing your first commit. This time will be added automatically once you push your first commit.":[""],"The production stage shows the total time it takes between creating an issue and deploying the code to production. The data will be automatically added once you have completed the full idea to production cycle.":[""],"The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request.":[""],"The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time.":[""],"The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running.":[""],"The time taken by each data entry gathered by that stage.":[""],"The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6.":[""],"Total Time":[""],"Want to see the data? Please ask administrator for access.":[""],"We don't have enough data to show this stage.":[""],"You need permission.":[""],"by":[""],"day":["",""],"hr":[""],"min":["",""],"pushed by":[""]}}}; \ No newline at end of file
+var locales = locales || {}; locales['en'] = {"domain":"app","locale_data":{"app":{"":{"Project-Id-Version":"gitlab 1.0.0","Report-Msgid-Bugs-To":"","PO-Revision-Date":"2017-04-12 22:36-0500","Last-Translator":"FULL NAME <EMAIL@ADDRESS>","Language-Team":"English","Language":"en","MIME-Version":"1.0","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"8bit","Plural-Forms":"nplurals=2; plural=n != 1;","lang":"en","domain":"app","plural_forms":"nplurals=2; plural=n != 1;"},"Author|by":[""],"Commits":[""],"Cycle":[""],"Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project.":[""],"Cycle|Code":[""],"Cycle|Issue":[""],"Cycle|Plan":[""],"Cycle|Review":[""],"Cycle|Staging":[""],"Cycle|Test":[""],"Deploys":[""],"Introducing Cycle Analytics":[""],"Last 30 days":[""],"Last 90 days":[""],"Limited to showing 50 events at most":[""],"Median":[""],"New Issues":[""],"Not available":[""],"Not enough data":[""],"OfFirstTime|First":[""],"Opened":[""],"Pipeline Health":[""],"ProjectLifecycle|Stage":[""],"Read more":[""],"Related Commits":[""],"Related Issues":[""],"Related Merge Requests":[""],"Relative Builds Trigger by Commits":[""],"Relative Deployed Builds":[""],"Relative Merged Requests":[""],"Showing %d event":["",""],"The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request.":[""],"The collection of events added to the data gathered for that stage.":[""],"The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage.":[""],"The phase of the development lifecycle.":[""],"The planning stage shows the time from the previous step to pushing your first commit. This time will be added automatically once you push your first commit.":[""],"The production stage shows the total time it takes between creating an issue and deploying the code to production. The data will be automatically added once you have completed the full idea to production cycle.":[""],"The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request.":[""],"The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time.":[""],"The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running.":[""],"The time taken by each data entry gathered by that stage.":[""],"The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6.":[""],"Time|hr":["",""],"Time|min":["",""],"Time|s":[""],"Total Time":[""],"Want to see the data? Please ask administrator for access.":[""],"We don't have enough data to show this stage.":[""],"You need permission.":[""],"day":["",""],"pushed by":[""]}}}; \ No newline at end of file
diff --git a/app/assets/javascripts/locale/es/app.js b/app/assets/javascripts/locale/es/app.js
index 5d1cfddf76a..511c70b30a6 100644
--- a/app/assets/javascripts/locale/es/app.js
+++ b/app/assets/javascripts/locale/es/app.js
@@ -1 +1 @@
-var locales = locales || {}; locales['es'] = {"domain":"app","locale_data":{"app":{"":{"Project-Id-Version":"gitlab 1.0.0","Report-Msgid-Bugs-To":"","PO-Revision-Date":"2017-04-27 19:15-0500","Language-Team":"Spanish","Language":"es","MIME-Version":"1.0","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"8bit","Plural-Forms":"nplurals=2; plural=n != 1;","Last-Translator":"","X-Generator":"Poedit 2.0.1","lang":"es","domain":"app","plural_forms":"nplurals=2; plural=n != 1;"},"Commits":["Cambios"],"Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project.":["Cycle Analytics ofrece una visión general de cuánto tiempo tarda en pasar de idea a producción en su proyecto."],"Cycle|Code":["Código"],"Cycle|Issue":["Tema"],"Cycle|Plan":["Planificación"],"Cycle|Review":["Revisión"],"Cycle|Staging":["Etapa"],"Cycle|Test":["Pruebas"],"Deploys":["Despliegues"],"Deutsch":["Alemán"],"English":["Inglés"],"First":["Primer"],"Introducing Cycle Analytics":["Introducción a Cycle Analytics"],"Last 30 days":["Últimos 30 días"],"Last 90 days":["Últimos 90 días"],"Limited to showing 50 events at most":["Limitado a mostrar máximo 50 eventos"],"Median":["Mediana"],"New Issues":["Nuevos temas"],"Not available":["No disponible"],"Not enough data":["No hay suficientes datos"],"Opened":["Abiertos"],"Pipeline Health":["Estado del Pipeline"],"Read more":["Leer más"],"Related Commits":["Cambios Relacionados"],"Related Issues":["Temas Relacionados"],"Related Merge Requests":["Solicitudes de fusión Relacionadas"],"Relative Builds Trigger by Commits":["Builds Relacionadas Originadas por Cambios"],"Relative Deployed Builds":["Builds Desplegadas Relacionadas"],"Relative Merged Requests":["Solicitudes de fusión Relacionadas"],"Showing %d event":["Mostrando %d evento","Mostrando %d eventos"],"Spanish":["Español"],"Stage":["Etapa"],"The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request.":["La etapa de codificación muestra el tiempo desde el primer cambio hasta la creación de la solicitud de fusión. Los datos serán automáticamente incorporados aquí una vez creada tu primera solicitud de fusión."],"The collection of events added to the data gathered for that stage.":["La colección de eventos agregados a los datos recopilados para esa etapa."],"The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage.":["La etapa de temas muestra el tiempo que toma desde la creación de un tema hasta asignar el tema a un hito, o añadir el tema a una lista en el panel de temas. Empieza a crear temas para ver los datos de esta etapa."],"The phase of the development lifecycle.":["La etapa del ciclo de vida del desarrollo."],"The planning stage shows the time from the previous step to pushing your first commit. This time will be added automatically once you push your first commit.":["La etapa de planificación muestra el tiempo desde el paso anterior hasta el envío de tu primera confirmación. Este tiempo se añadirá automáticamente una vez que usted envíe su primer cambio."],"The production stage shows the total time it takes between creating an issue and deploying the code to production. The data will be automatically added once you have completed the full idea to production cycle.":["La etapa de producción muestra el tiempo total que tarda entre la creación de un tema y el despliegue del código a producción. Los datos se añadirán automáticamente una vez haya finalizado por completo el ciclo de idea a producción."],"The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request.":["La etapa de revisión muestra el tiempo desde la creación de la solicitud de fusión hasta que los cambios se fusionaron. Los datos se añadirán automáticamente después de fusionar su primera solicitud de fusión."],"The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time.":["La etapa de puesta en escena muestra el tiempo entre la fusión y el despliegue de código en el entorno de producción. Los datos se añadirán automáticamente una vez que se despliega a producción por primera vez."],"The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running.":["La etapa de pruebas muestra el tiempo que GitLab CI toma para ejecutar cada pipeline para la solicitud de fusión relacionada. Los datos se añadirán automáticamente luego de que el primer pipeline termine de ejecutarse."],"The time taken by each data entry gathered by that stage.":["El tiempo utilizado por cada entrada de datos obtenido por esa etapa."],"The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6.":["El valor en el punto medio de una serie de valores observados. Por ejemplo, entre 3, 5, 9, la mediana es 5. Entre 3, 5, 7, 8, la mediana es (5 + 7) / 2 = 6."],"Total Time":["Tiempo Total"],"Want to see the data? Please ask administrator for access.":["¿Quieres ver los datos? Por favor pedir acceso al administrador."],"We don't have enough data to show this stage.":["No hay suficientes datos para mostrar en esta etapa."],"You need permission.":["Necesitas permisos."],"by":["por"],"day":["día","días"],"hr":[""],"min":["",""],"pushed by":["enviado por"]}}}; \ No newline at end of file
+var locales = locales || {}; locales['es'] = {"domain":"app","locale_data":{"app":{"":{"Project-Id-Version":"gitlab 1.0.0","Report-Msgid-Bugs-To":"","PO-Revision-Date":"2017-05-02 23:17-0500","Language-Team":"Spanish","Language":"es","MIME-Version":"1.0","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"8bit","Plural-Forms":"nplurals=2; plural=n != 1;","Last-Translator":"","X-Generator":"Poedit 2.0.1","lang":"es","domain":"app","plural_forms":"nplurals=2; plural=n != 1;"},"Author|by":["por"],"Commits":["Cambios"],"Cycle":[""],"Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project.":["Cycle Analytics ofrece una visión general de cuánto tiempo tarda en pasar de idea a producción en su proyecto."],"Cycle|Code":["Código"],"Cycle|Issue":["Tema"],"Cycle|Plan":["Planificación"],"Cycle|Review":["Revisión"],"Cycle|Staging":["Etapa"],"Cycle|Test":["Pruebas"],"Deploys":["Despliegues"],"Introducing Cycle Analytics":["Introducción a Cycle Analytics"],"Last 30 days":["Últimos 30 días"],"Last 90 days":["Últimos 90 días"],"Limited to showing 50 events at most":["Limitado a mostrar máximo 50 eventos"],"Median":["Mediana"],"New Issues":["Nuevos temas"],"Not available":["No disponible"],"Not enough data":["No hay suficientes datos"],"OfFirstTime|First":["Primer"],"Opened":["Abiertos"],"Pipeline Health":["Estado del Pipeline"],"ProjectLifecycle|Stage":["Etapa"],"Read more":["Leer más"],"Related Commits":["Cambios Relacionados"],"Related Issues":["Temas Relacionados"],"Related Merge Requests":["Solicitudes de fusión Relacionadas"],"Relative Builds Trigger by Commits":["Builds Relacionadas Originadas por Cambios"],"Relative Deployed Builds":["Builds Desplegadas Relacionadas"],"Relative Merged Requests":["Solicitudes de fusión Relacionadas"],"Showing %d event":["Mostrando %d evento","Mostrando %d eventos"],"The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request.":["La etapa de codificación muestra el tiempo desde el primer cambio hasta la creación de la solicitud de fusión. Los datos serán automáticamente incorporados aquí una vez creada tu primera solicitud de fusión."],"The collection of events added to the data gathered for that stage.":["La colección de eventos agregados a los datos recopilados para esa etapa."],"The issue stage shows the time it takes from creating an issue to assigning the issue to a milestone, or add the issue to a list on your Issue Board. Begin creating issues to see data for this stage.":["La etapa de temas muestra el tiempo que toma desde la creación de un tema hasta asignar el tema a un hito, o añadir el tema a una lista en el panel de temas. Empieza a crear temas para ver los datos de esta etapa."],"The phase of the development lifecycle.":["La etapa del ciclo de vida del desarrollo."],"The planning stage shows the time from the previous step to pushing your first commit. This time will be added automatically once you push your first commit.":["La etapa de planificación muestra el tiempo desde el paso anterior hasta el envío de tu primera confirmación. Este tiempo se añadirá automáticamente una vez que usted envíe su primer cambio."],"The production stage shows the total time it takes between creating an issue and deploying the code to production. The data will be automatically added once you have completed the full idea to production cycle.":["La etapa de producción muestra el tiempo total que tarda entre la creación de un tema y el despliegue del código a producción. Los datos se añadirán automáticamente una vez haya finalizado por completo el ciclo de idea a producción."],"The review stage shows the time from creating the merge request to merging it. The data will automatically be added after you merge your first merge request.":["La etapa de revisión muestra el tiempo desde la creación de la solicitud de fusión hasta que los cambios se fusionaron. Los datos se añadirán automáticamente después de fusionar su primera solicitud de fusión."],"The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time.":["La etapa de puesta en escena muestra el tiempo entre la fusión y el despliegue de código en el entorno de producción. Los datos se añadirán automáticamente una vez que se despliega a producción por primera vez."],"The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running.":["La etapa de pruebas muestra el tiempo que GitLab CI toma para ejecutar cada pipeline para la solicitud de fusión relacionada. Los datos se añadirán automáticamente luego de que el primer pipeline termine de ejecutarse."],"The time taken by each data entry gathered by that stage.":["El tiempo utilizado por cada entrada de datos obtenido por esa etapa."],"The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6.":["El valor en el punto medio de una serie de valores observados. Por ejemplo, entre 3, 5, 9, la mediana es 5. Entre 3, 5, 7, 8, la mediana es (5 + 7) / 2 = 6."],"Time|hr":["",""],"Time|min":["",""],"Time|s":[""],"Total Time":["Tiempo Total"],"Want to see the data? Please ask administrator for access.":["¿Quieres ver los datos? Por favor pedir acceso al administrador."],"We don't have enough data to show this stage.":["No hay suficientes datos para mostrar en esta etapa."],"You need permission.":["Necesitas permisos."],"day":["día","días"],"pushed by":["enviado por"]}}}; \ No newline at end of file
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index f2997d0b0c4..24017e8ea40 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -21,6 +21,8 @@ class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
before_action :require_email, unless: :devise_controller?
+ around_action :set_locale
+
protect_from_forgery with: :exception
helper_method :can?, :current_application_settings
@@ -271,9 +273,14 @@ class ApplicationController < ActionController::Base
end
def set_locale
- requested_locale = current_user&.preferred_language || request.env['HTTP_ACCEPT_LANGUAGE'] || I18n.default_locale
- locale = FastGettext.set_locale(requested_locale)
-
- I18n.locale = locale
+ begin
+ requested_locale = current_user&.preferred_language || I18n.default_locale
+ locale = FastGettext.set_locale(requested_locale)
+ I18n.locale = locale
+
+ yield
+ ensure
+ I18n.locale = I18n.default_locale
+ end
end
end
diff --git a/app/controllers/profiles_controller.rb b/app/controllers/profiles_controller.rb
index 0f01bf7e706..57e23cea00e 100644
--- a/app/controllers/profiles_controller.rb
+++ b/app/controllers/profiles_controller.rb
@@ -3,7 +3,6 @@ class ProfilesController < Profiles::ApplicationController
before_action :user
before_action :authorize_change_username!, only: :update_username
- before_action :set_locale, only: :show
skip_before_action :require_email, only: [:show, :update]
def show
diff --git a/app/controllers/projects/cycle_analytics_controller.rb b/app/controllers/projects/cycle_analytics_controller.rb
index 7ef8872a90b..88ac3ad046b 100644
--- a/app/controllers/projects/cycle_analytics_controller.rb
+++ b/app/controllers/projects/cycle_analytics_controller.rb
@@ -4,7 +4,6 @@ class Projects::CycleAnalyticsController < Projects::ApplicationController
include CycleAnalyticsParams
before_action :authorize_read_cycle_analytics!
- before_action :set_locale, only: :show
def show
@cycle_analytics = ::CycleAnalytics.new(@project, options(cycle_analytics_params))
diff --git a/app/models/user.rb b/app/models/user.rb
index 2b7ebe6c1a7..43c5fdc038d 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -23,6 +23,7 @@ class User < ActiveRecord::Base
default_value_for :hide_no_password, false
default_value_for :project_view, :files
default_value_for :notified_of_own_activity, false
+ default_value_for :preferred_language, I18n.default_locale
attr_encrypted :otp_secret,
key: Gitlab::Application.secrets.otp_key_base,
diff --git a/app/views/profiles/show.html.haml b/app/views/profiles/show.html.haml
index 9846f01603f..6e14be62e32 100644
--- a/app/views/profiles/show.html.haml
+++ b/app/views/profiles/show.html.haml
@@ -74,7 +74,7 @@
%span.help-block This email will be displayed on your public profile.
.form-group
= f.label :preferred_language, class: "label-light"
- = f.select :preferred_language, Gitlab::I18n::AVAILABLE_LANGUAGES.map { |value, label| [_(label), value] },
+ = f.select :preferred_language, Gitlab::I18n::AVAILABLE_LANGUAGES.map { |value, label| [label, value] },
{}, class: "select2"
.form-group
= f.label :skype, class: "label-light"
diff --git a/app/views/projects/cycle_analytics/show.html.haml b/app/views/projects/cycle_analytics/show.html.haml
index a1a227d2fe9..a8ce021e05f 100644
--- a/app/views/projects/cycle_analytics/show.html.haml
+++ b/app/views/projects/cycle_analytics/show.html.haml
@@ -52,7 +52,7 @@
%ul
%li.stage-header
%span.stage-name
- {{ __('Stage') }}
+ {{ __('ProjectLifecycle|Stage') }}
%i.has-tooltip.fa.fa-question-circle{ "data-placement" => "top", title: _("The phase of the development lifecycle."), "aria-hidden" => "true" }
%li.median-header
%span.stage-name
diff --git a/config/initializers/fast_gettext.rb b/config/initializers/fast_gettext.rb
index 10a3ee02b85..bea85b43b95 100644
--- a/config/initializers/fast_gettext.rb
+++ b/config/initializers/fast_gettext.rb
@@ -1,3 +1,5 @@
FastGettext.add_text_domain 'gitlab', path: 'locale', type: :po
FastGettext.default_text_domain = 'gitlab'
-FastGettext.default_available_locales = Gitlab::I18n::AVAILABLE_LANGUAGES.keys
+FastGettext.default_available_locales = Gitlab::I18n.available_locales
+
+I18n.available_locales = Gitlab::I18n.available_locales
diff --git a/db/migrate/20170413035209_add_preferred_language_to_users.rb b/db/migrate/20170413035209_add_preferred_language_to_users.rb
index 6fe91656eeb..92f1d6f2436 100644
--- a/db/migrate/20170413035209_add_preferred_language_to_users.rb
+++ b/db/migrate/20170413035209_add_preferred_language_to_users.rb
@@ -6,10 +6,8 @@ class AddPreferredLanguageToUsers < ActiveRecord::Migration
DOWNTIME = false
- disable_ddl_transaction!
-
def up
- add_column_with_default :users, :preferred_language, :string, default: 'en'
+ add_column :users, :preferred_language, :string
end
def down
diff --git a/lib/gitlab/i18n.rb b/lib/gitlab/i18n.rb
index 64a86b55c7f..a7addee0dcd 100644
--- a/lib/gitlab/i18n.rb
+++ b/lib/gitlab/i18n.rb
@@ -1,9 +1,15 @@
module Gitlab
module I18n
+ extend self
+
AVAILABLE_LANGUAGES = {
- 'en' => N_('English'),
- 'es' => N_('Spanish'),
- 'de' => N_('Deutsch')
+ en: 'English',
+ es: 'Español',
+ de: 'Deutsch'
}.freeze
+
+ def available_locales
+ AVAILABLE_LANGUAGES.keys
+ end
end
end
diff --git a/locale/de/gitlab.po b/locale/de/gitlab.po
index 843648c25f1..beeca35b879 100644
--- a/locale/de/gitlab.po
+++ b/locale/de/gitlab.po
@@ -17,9 +17,15 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"\n"
+msgid "Author|by"
+msgstr ""
+
msgid "Commits"
msgstr ""
+msgid "Cycle"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
@@ -44,15 +50,6 @@ msgstr ""
msgid "Deploys"
msgstr ""
-msgid "Deutsch"
-msgstr ""
-
-msgid "English"
-msgstr ""
-
-msgid "First"
-msgstr ""
-
msgid "Introducing Cycle Analytics"
msgstr ""
@@ -77,12 +74,18 @@ msgstr ""
msgid "Not enough data"
msgstr ""
+msgid "OfFirstTime|First"
+msgstr ""
+
msgid "Opened"
msgstr ""
msgid "Pipeline Health"
msgstr ""
+msgid "ProjectLifecycle|Stage"
+msgstr ""
+
msgid "Read more"
msgstr ""
@@ -109,12 +112,6 @@ msgid_plural "Showing %d events"
msgstr[0] ""
msgstr[1] ""
-msgid "Spanish"
-msgstr ""
-
-msgid "Stage"
-msgstr ""
-
msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request."
msgstr ""
@@ -148,6 +145,19 @@ msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
msgstr ""
+msgid "Time|hr"
+msgid_plural "Time|hrs"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Time|min"
+msgid_plural "Time|mins"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Time|s"
+msgstr ""
+
msgid "Total Time"
msgstr ""
@@ -160,21 +170,10 @@ msgstr ""
msgid "You need permission."
msgstr ""
-msgid "by"
-msgstr ""
-
msgid "day"
msgid_plural "days"
msgstr[0] ""
msgstr[1] ""
-msgid "hr"
-msgstr ""
-
-msgid "min"
-msgid_plural "mins"
-msgstr[0] ""
-msgstr[1] ""
-
msgid "pushed by"
msgstr ""
diff --git a/locale/en/gitlab.po b/locale/en/gitlab.po
index e98931685d7..9596531fdbd 100644
--- a/locale/en/gitlab.po
+++ b/locale/en/gitlab.po
@@ -17,9 +17,15 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"\n"
+msgid "Author|by"
+msgstr ""
+
msgid "Commits"
msgstr ""
+msgid "Cycle"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
@@ -44,15 +50,6 @@ msgstr ""
msgid "Deploys"
msgstr ""
-msgid "Deutsch"
-msgstr ""
-
-msgid "English"
-msgstr ""
-
-msgid "First"
-msgstr ""
-
msgid "Introducing Cycle Analytics"
msgstr ""
@@ -77,12 +74,18 @@ msgstr ""
msgid "Not enough data"
msgstr ""
+msgid "OfFirstTime|First"
+msgstr ""
+
msgid "Opened"
msgstr ""
msgid "Pipeline Health"
msgstr ""
+msgid "ProjectLifecycle|Stage"
+msgstr ""
+
msgid "Read more"
msgstr ""
@@ -109,12 +112,6 @@ msgid_plural "Showing %d events"
msgstr[0] ""
msgstr[1] ""
-msgid "Spanish"
-msgstr ""
-
-msgid "Stage"
-msgstr ""
-
msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request."
msgstr ""
@@ -148,6 +145,19 @@ msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
msgstr ""
+msgid "Time|hr"
+msgid_plural "Time|hrs"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Time|min"
+msgid_plural "Time|mins"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Time|s"
+msgstr ""
+
msgid "Total Time"
msgstr ""
@@ -160,21 +170,10 @@ msgstr ""
msgid "You need permission."
msgstr ""
-msgid "by"
-msgstr ""
-
msgid "day"
msgid_plural "days"
msgstr[0] ""
msgstr[1] ""
-msgid "hr"
-msgstr ""
-
-msgid "min"
-msgid_plural "mins"
-msgstr[0] ""
-msgstr[1] ""
-
msgid "pushed by"
msgstr ""
diff --git a/locale/es/gitlab.po b/locale/es/gitlab.po
index 644007f5149..56f889c7141 100644
--- a/locale/es/gitlab.po
+++ b/locale/es/gitlab.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gitlab 1.0.0\n"
"Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2017-04-27 19:15-0500\n"
+"PO-Revision-Date: 2017-05-02 23:17-0500\n"
"Language-Team: Spanish\n"
"Language: es\n"
"MIME-Version: 1.0\n"
@@ -17,9 +17,15 @@ msgstr ""
"Last-Translator: \n"
"X-Generator: Poedit 2.0.1\n"
+msgid "Author|by"
+msgstr "por"
+
msgid "Commits"
msgstr "Cambios"
+msgid "Cycle"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr "Cycle Analytics ofrece una visión general de cuánto tiempo tarda en pasar de idea a producción en su proyecto."
@@ -50,15 +56,6 @@ msgstr "Pruebas"
msgid "Deploys"
msgstr "Despliegues"
-msgid "Deutsch"
-msgstr "Alemán"
-
-msgid "English"
-msgstr "Inglés"
-
-msgid "First"
-msgstr "Primer"
-
msgid "Introducing Cycle Analytics"
msgstr "Introducción a Cycle Analytics"
@@ -83,12 +80,19 @@ msgstr "No disponible"
msgid "Not enough data"
msgstr "No hay suficientes datos"
+#, fuzzy
+msgid "OfFirstTime|First"
+msgstr "Primer"
+
msgid "Opened"
msgstr "Abiertos"
msgid "Pipeline Health"
msgstr "Estado del Pipeline"
+msgid "ProjectLifecycle|Stage"
+msgstr "Etapa"
+
msgid "Read more"
msgstr "Leer más"
@@ -117,12 +121,6 @@ msgid_plural "Showing %d events"
msgstr[0] "Mostrando %d evento"
msgstr[1] "Mostrando %d eventos"
-msgid "Spanish"
-msgstr "Español"
-
-msgid "Stage"
-msgstr "Etapa"
-
msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request."
msgstr "La etapa de codificación muestra el tiempo desde el primer cambio hasta la creación de la solicitud de fusión. Los datos serán automáticamente incorporados aquí una vez creada tu primera solicitud de fusión."
@@ -156,6 +154,19 @@ msgstr "El tiempo utilizado por cada entrada de datos obtenido por esa etapa."
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
msgstr "El valor en el punto medio de una serie de valores observados. Por ejemplo, entre 3, 5, 9, la mediana es 5. Entre 3, 5, 7, 8, la mediana es (5 + 7) / 2 = 6."
+msgid "Time|hr"
+msgid_plural "Time|hrs"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Time|min"
+msgid_plural "Time|mins"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Time|s"
+msgstr ""
+
msgid "Total Time"
msgstr "Tiempo Total"
@@ -168,21 +179,10 @@ msgstr "No hay suficientes datos para mostrar en esta etapa."
msgid "You need permission."
msgstr "Necesitas permisos."
-msgid "by"
-msgstr "por"
-
msgid "day"
msgid_plural "days"
msgstr[0] "día"
msgstr[1] "días"
-msgid "hr"
-msgstr ""
-
-msgid "min"
-msgid_plural "mins"
-msgstr[0] ""
-msgstr[1] ""
-
msgid "pushed by"
msgstr "enviado por"
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index 1b60f9dad7a..956e05926e1 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gitlab 1.0.0\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-04-27 19:13-0500\n"
-"PO-Revision-Date: 2017-04-27 19:13-0500\n"
+"POT-Creation-Date: 2017-05-02 23:33-0500\n"
+"PO-Revision-Date: 2017-05-02 23:33-0500\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
@@ -18,9 +18,15 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+msgid "Author|by"
+msgstr ""
+
msgid "Commits"
msgstr ""
+msgid "Cycle"
+msgstr ""
+
msgid "Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project."
msgstr ""
@@ -45,15 +51,6 @@ msgstr ""
msgid "Deploys"
msgstr ""
-msgid "Deutsch"
-msgstr ""
-
-msgid "English"
-msgstr ""
-
-msgid "First"
-msgstr ""
-
msgid "Introducing Cycle Analytics"
msgstr ""
@@ -78,12 +75,18 @@ msgstr ""
msgid "Not enough data"
msgstr ""
+msgid "OfFirstTime|First"
+msgstr ""
+
msgid "Opened"
msgstr ""
msgid "Pipeline Health"
msgstr ""
+msgid "ProjectLifecycle|Stage"
+msgstr ""
+
msgid "Read more"
msgstr ""
@@ -110,12 +113,6 @@ msgid_plural "Showing %d events"
msgstr[0] ""
msgstr[1] ""
-msgid "Spanish"
-msgstr ""
-
-msgid "Stage"
-msgstr ""
-
msgid "The coding stage shows the time from the first commit to creating the merge request. The data will automatically be added here once you create your first merge request."
msgstr ""
@@ -149,6 +146,19 @@ msgstr ""
msgid "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6."
msgstr ""
+msgid "Time|hr"
+msgid_plural "Time|hrs"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Time|min"
+msgid_plural "Time|mins"
+msgstr[0] ""
+msgstr[1] ""
+
+msgid "Time|s"
+msgstr ""
+
msgid "Total Time"
msgstr ""
@@ -161,21 +171,10 @@ msgstr ""
msgid "You need permission."
msgstr ""
-msgid "by"
-msgstr ""
-
msgid "day"
msgid_plural "days"
msgstr[0] ""
msgstr[1] ""
-msgid "hr"
-msgstr ""
-
-msgid "min"
-msgid_plural "mins"
-msgstr[0] ""
-msgstr[1] ""
-
msgid "pushed by"
msgstr ""