Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-07-19 15:10:08 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2021-07-19 15:10:08 +0300
commit1072f96e340ddad78e5dad6dfedc7c6e85fc53ea (patch)
tree573525bb3525f79cbb011f39ad11c11c6efea315 /app/assets/javascripts
parent8cc0a0aa965798e74826197d350472d235af2f84 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/assets/javascripts')
-rw-r--r--app/assets/javascripts/locale/index.js47
-rw-r--r--app/assets/javascripts/pages/admin/application_settings/metrics_and_profiling/usage_statistics.js12
2 files changed, 51 insertions, 8 deletions
diff --git a/app/assets/javascripts/locale/index.js b/app/assets/javascripts/locale/index.js
index 10518fa73d9..ad01da2eb17 100644
--- a/app/assets/javascripts/locale/index.js
+++ b/app/assets/javascripts/locale/index.js
@@ -2,7 +2,10 @@ import Jed from 'jed';
import ensureSingleLine from './ensure_single_line';
import sprintf from './sprintf';
-const languageCode = () => document.querySelector('html').getAttribute('lang') || 'en';
+const GITLAB_FALLBACK_LANGUAGE = 'en';
+
+const languageCode = () =>
+ document.querySelector('html').getAttribute('lang') || GITLAB_FALLBACK_LANGUAGE;
const locale = new Jed(window.translations || {});
delete window.translations;
@@ -51,12 +54,52 @@ const pgettext = (keyOrContext, key) => {
};
/**
+ * Filters navigator languages by the set GitLab language.
+ *
+ * This allows us to decide better what a user wants as a locale, for using with the Intl browser APIs.
+ * If they have set their GitLab to a language, it will check whether `navigator.languages` contains matching ones.
+ * This function always adds `en` as a fallback in order to have date renders if all fails before it.
+ *
+ * - Example one: GitLab language is `en` and browser languages are:
+ * `['en-GB', 'en-US']`. This function returns `['en-GB', 'en-US', 'en']` as
+ * the preferred locales, the Intl APIs would try to format first as British English,
+ * if that isn't available US or any English.
+ * - Example two: GitLab language is `en` and browser languages are:
+ * `['de-DE', 'de']`. This function returns `['en']`, so the Intl APIs would prefer English
+ * formatting in order to not have German dates mixed with English GitLab UI texts.
+ * If the user wants for example British English formatting (24h, etc),
+ * they could set their browser languages to `['de-DE', 'de', 'en-GB']`.
+ * - Example three: GitLab language is `de` and browser languages are `['en-US', 'en']`.
+ * This function returns `['de', 'en']`, aligning German dates with the chosen translation of GitLab.
+ *
+ * @returns {string[]}
+ */
+export const getPreferredLocales = () => {
+ const gitlabLanguage = languageCode();
+ // The GitLab language may or may not contain a country code,
+ // so we create the short version as well, e.g. de-AT => de
+ const lang = gitlabLanguage.substring(0, 2);
+ const locales = navigator.languages.filter((l) => l.startsWith(lang));
+ if (!locales.includes(gitlabLanguage)) {
+ locales.push(gitlabLanguage);
+ }
+ if (!locales.includes(lang)) {
+ locales.push(lang);
+ }
+ if (!locales.includes(GITLAB_FALLBACK_LANGUAGE)) {
+ locales.push(GITLAB_FALLBACK_LANGUAGE);
+ }
+ return locales;
+};
+
+/**
Creates an instance of Intl.DateTimeFormat for the current locale.
@param formatOptions for available options, please see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat
@returns {Intl.DateTimeFormat}
*/
-const createDateTimeFormat = (formatOptions) => Intl.DateTimeFormat(languageCode(), formatOptions);
+const createDateTimeFormat = (formatOptions) =>
+ Intl.DateTimeFormat(getPreferredLocales(), formatOptions);
/**
* Formats a number as a string using `toLocaleString`.
diff --git a/app/assets/javascripts/pages/admin/application_settings/metrics_and_profiling/usage_statistics.js b/app/assets/javascripts/pages/admin/application_settings/metrics_and_profiling/usage_statistics.js
index bab3cce39ac..bf27b1a81ff 100644
--- a/app/assets/javascripts/pages/admin/application_settings/metrics_and_profiling/usage_statistics.js
+++ b/app/assets/javascripts/pages/admin/application_settings/metrics_and_profiling/usage_statistics.js
@@ -1,25 +1,25 @@
import { __ } from '~/locale';
-export const HELPER_TEXT_USAGE_PING_DISABLED = __(
+export const HELPER_TEXT_SERVICE_PING_DISABLED = __(
'To enable Registration Features, make sure "Enable service ping" is checked.',
);
-export const HELPER_TEXT_USAGE_PING_ENABLED = __(
+export const HELPER_TEXT_SERVICE_PING_ENABLED = __(
'You can enable Registration Features because Service Ping is enabled. To continue using Registration Features in the future, you will also need to register with GitLab via a new cloud licensing service.',
);
function setHelperText(usagePingCheckbox) {
- const helperTextId = document.getElementById('usage_ping_features_helper_text');
+ const helperTextId = document.getElementById('service_ping_features_helper_text');
- const usagePingFeaturesLabel = document.getElementById('usage_ping_features_label');
+ const usagePingFeaturesLabel = document.getElementById('service_ping_features_label');
const usagePingFeaturesCheckbox = document.getElementById(
'application_setting_usage_ping_features_enabled',
);
helperTextId.textContent = usagePingCheckbox.checked
- ? HELPER_TEXT_USAGE_PING_ENABLED
- : HELPER_TEXT_USAGE_PING_DISABLED;
+ ? HELPER_TEXT_SERVICE_PING_ENABLED
+ : HELPER_TEXT_SERVICE_PING_DISABLED;
usagePingFeaturesLabel.classList.toggle('gl-cursor-not-allowed', !usagePingCheckbox.checked);