aboutsummaryrefslogtreecommitdiffstats
path: root/web_src/js
diff options
context:
space:
mode:
authorYarden Shoham <hrsi88@gmail.com>2022-10-28 16:48:24 +0300
committerGitHub <noreply@github.com>2022-10-28 09:48:24 -0400
commit125e3e3d66d117d23e387c083d22a8d90820bb52 (patch)
treef70c2bd88cf339970f96d193bc0908a35a22be11 /web_src/js
parent76e9a4f701880d798d90a3e069e571052e342da8 (diff)
downloadgitea-125e3e3d66d117d23e387c083d22a8d90820bb52.tar.gz
gitea-125e3e3d66d117d23e387c083d22a8d90820bb52.zip
Localize time units on activity heatmap (#21570)
Previously, the months and days were hardcoded into English * Closes #15541 ## Screenshots ### English ![image](https://user-images.githubusercontent.com/20454870/197410352-1b28a637-ce19-41ae-b4e5-27955555b082.png) ### German ![image](https://user-images.githubusercontent.com/20454870/197410455-f243ca84-807f-476e-b8ed-c24e827bfc2d.png) ### Spanish ![image](https://user-images.githubusercontent.com/20454870/197410366-55202ca5-08f9-4152-8f9d-d5eeebd532ef.png) ### Italian ![image](https://user-images.githubusercontent.com/20454870/197410385-75f754dd-e845-4444-8a04-472a8f45b617.png) ### Portuguese This one has a bit of overflow ![image](https://user-images.githubusercontent.com/20454870/197410414-b91f962e-77e9-4cc7-990b-01c0fc0cbd0b.png) Signed-off-by: Yarden Shoham <hrsi88@gmail.com> Co-authored-by: Gusted <williamzijl7@hotmail.com> Co-authored-by: silverwind <me@silverwind.io> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com> Co-authored-by: techknowlogick <techknowlogick@gitea.io>
Diffstat (limited to 'web_src/js')
-rw-r--r--web_src/js/components/ActivityHeatmap.vue8
-rw-r--r--web_src/js/features/heatmap.js11
-rw-r--r--web_src/js/utils.js15
-rw-r--r--web_src/js/utils.test.js24
4 files changed, 51 insertions, 7 deletions
diff --git a/web_src/js/components/ActivityHeatmap.vue b/web_src/js/components/ActivityHeatmap.vue
index b5c5c65bbf..df7e0beb00 100644
--- a/web_src/js/components/ActivityHeatmap.vue
+++ b/web_src/js/components/ActivityHeatmap.vue
@@ -25,6 +25,10 @@ export default {
type: Array,
default: () => [],
},
+ locale: {
+ type: Object,
+ default: () => {},
+ }
},
data: () => ({
colorRange: [
@@ -36,10 +40,6 @@ export default {
'var(--color-primary-dark-4)',
],
endDate: new Date(),
- locale: {
- contributions: 'contributions',
- no_contributions: 'No contributions',
- },
}),
computed: {
sum() {
diff --git a/web_src/js/features/heatmap.js b/web_src/js/features/heatmap.js
index 6e6202e866..368ddd0d77 100644
--- a/web_src/js/features/heatmap.js
+++ b/web_src/js/features/heatmap.js
@@ -1,6 +1,6 @@
import {createApp} from 'vue';
import ActivityHeatmap from '../components/ActivityHeatmap.vue';
-
+import {translateMonth, translateDay} from '../utils.js';
export default function initHeatmap() {
const el = document.getElementById('user-heatmap');
if (!el) return;
@@ -17,7 +17,14 @@ export default function initHeatmap() {
return {date: new Date(v), count: heatmap[v]};
});
- const View = createApp(ActivityHeatmap, {values});
+ const locale = {
+ months: new Array(12).fill().map((_, idx) => translateMonth(idx)),
+ days: new Array(7).fill().map((_, idx) => translateDay(idx)),
+ contributions: 'contributions',
+ no_contributions: 'No contributions',
+ };
+
+ const View = createApp(ActivityHeatmap, {values, locale});
View.mount(el);
} catch (err) {
diff --git a/web_src/js/utils.js b/web_src/js/utils.js
index 4020b7a7f4..9b8bf925a9 100644
--- a/web_src/js/utils.js
+++ b/web_src/js/utils.js
@@ -70,3 +70,18 @@ export function prettyNumber(num, locale = 'en-US') {
export function parseUrl(str) {
return new URL(str, str.startsWith('http') ? undefined : window.location.origin);
}
+
+// return current locale chosen by user
+function getCurrentLocale() {
+ return document.documentElement.lang;
+}
+
+// given a month (0-11), returns it in the documents language
+export function translateMonth(month) {
+ return new Date(Date.UTC(2022, month, 12)).toLocaleString(getCurrentLocale(), {month: 'short'});
+}
+
+// given a weekday (0-6, Sunday to Saturday), returns it in the documents language
+export function translateDay(day) {
+ return new Date(Date.UTC(2022, 7, day)).toLocaleString(getCurrentLocale(), {weekday: 'short'});
+}
diff --git a/web_src/js/utils.test.js b/web_src/js/utils.test.js
index 7bf5bb7eb6..0567a5c64a 100644
--- a/web_src/js/utils.test.js
+++ b/web_src/js/utils.test.js
@@ -1,7 +1,7 @@
import {expect, test} from 'vitest';
import {
basename, extname, isObject, uniq, stripTags, joinPaths, parseIssueHref,
- prettyNumber, parseUrl,
+ prettyNumber, parseUrl, translateMonth, translateDay
} from './utils.js';
test('basename', () => {
@@ -109,3 +109,25 @@ test('parseUrl', () => {
expect(parseUrl('https://localhost/path?search').search).toEqual('?search');
expect(parseUrl('https://localhost/path?search#hash').hash).toEqual('#hash');
});
+
+test('translateMonth', () => {
+ const originalLang = document.documentElement.lang;
+ document.documentElement.lang = 'en-US';
+ expect(translateMonth(0)).toEqual('Jan');
+ expect(translateMonth(4)).toEqual('May');
+ document.documentElement.lang = 'es-ES';
+ expect(translateMonth(5)).toEqual('jun');
+ expect(translateMonth(6)).toEqual('jul');
+ document.documentElement.lang = originalLang;
+});
+
+test('translateDay', () => {
+ const originalLang = document.documentElement.lang;
+ document.documentElement.lang = 'fr-FR';
+ expect(translateDay(1)).toEqual('lun.');
+ expect(translateDay(5)).toEqual('ven.');
+ document.documentElement.lang = 'pl-PL';
+ expect(translateDay(1)).toEqual('pon.');
+ expect(translateDay(5)).toEqual('pt.');
+ document.documentElement.lang = originalLang;
+});