Skip to content

Commit f9e84de

Browse files
committed
Fix internationalization of tune/break names
1 parent 451e4b5 commit f9e84de

File tree

11 files changed

+51
-31
lines changed

11 files changed

+51
-31
lines changed

assets/i18n/en.json

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,13 @@
55
"dialog-cancel": "Cancel",
66
"dialog-ok": "OK"
77
},
8+
"i18n": {
9+
"general-breaks": "General Breaks",
10+
"special-breaks": "Special Breaks",
11+
"tune": "Tune",
12+
"silence": "{{beats}} Silence",
13+
"whistle-in": "Whistle in"
14+
},
815
"compose": {
916
"add-to-song-tooltip": "Add to song"
1017
},
@@ -237,9 +244,5 @@
237244
"category-tricky": "Tricky",
238245
"category-wester": "Western music",
239246
"category-cultural-appropriation": "Cultural appropriation"
240-
},
241-
"default-tunes": {
242-
"general-breaks": "General Breaks",
243-
"special-breaks": "Special Breaks"
244247
}
245248
}

src/defaultTunes.ts

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import { AllVolumeHack, normalizePattern, Pattern, compressedPatternValidator }
44
import { normalizeTune, Tune } from "./state/tune";
55
import * as z from "zod";
66
import { PatternReference } from "./state/song";
7-
import { getI18n } from "./services/i18n";
87

98
function stretch(from: number, to: number, pattern: string): string {
109
return pattern.split("").concat([ "" ]).join(repeat((to/from)-1, " "));
@@ -43,9 +42,6 @@ type RawTune = Partial<Omit<Tune, 'patterns'>> & {
4342

4443
const rawTunes: {[tuneName: string]: RawTune} = {
4544
'General Breaks': {
46-
get displayName() {
47-
return getI18n().t("default-tunes.general-breaks");
48-
},
4945
categories: [ "common", "uncommon", "new", "proposed", "custom", "onesurdo", "easy", "medium", "tricky", "western", "cultural-appropriation" ],
5046
sheet: sheetUrl + "breaks.pdf",
5147
video: "https://tube.rhythms-of-resistance.org/videos/embed/37596e72-e93b-44f1-8770-760be8e5ce87",
@@ -183,9 +179,6 @@ const rawTunes: {[tuneName: string]: RawTune} = {
183179
}
184180
},
185181
'Special Breaks': {
186-
get displayName() {
187-
return getI18n().t("default-tunes.special-breaks");
188-
},
189182
categories: [ "common", "onesurdo" ],
190183
sheet: sheetUrl + "breaks.pdf",
191184
video: "https://tube.rhythms-of-resistance.org/videos/embed/37596e72-e93b-44f1-8770-760be8e5ce87",

src/services/i18n.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,29 @@ export function getAppInstructionsHtml(): string {
104104
return i18n.t(APP_INSTRUCTIONS_KEY, { ns: APP_INSTRUCTIONS_NS });
105105
}
106106

107+
export function getLocalizedDisplayName(name: string): string {
108+
switch (name) {
109+
case "General Breaks":
110+
return getI18n().t("i18n.general-breaks");
111+
case "Special Breaks":
112+
return getI18n().t("i18n.special-breaks");
113+
case "Tune":
114+
return getI18n().t("i18n.tune");
115+
case "4 Silence":
116+
return getI18n().t("i18n.silence", { beats: 4 });
117+
case "8 Silence":
118+
return getI18n().t("i18n.silence", { beats: 8 });
119+
case "12 Silence":
120+
return getI18n().t("i18n.silence", { beats: 12 });
121+
case "16 Silence":
122+
return getI18n().t("i18n.silence", { beats: 16 });
123+
case "Whistle in":
124+
return getI18n().t("i18n.whistle-in");
125+
default:
126+
return name;
127+
}
128+
}
129+
107130
/**
108131
* Renders a translated message. Each interpolation variable needs to be specified as a slot, making it possible to interpolate
109132
* components and rich text.

src/ui/compose/import-dialog.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import { injectStateRequired } from "../../services/state";
88
import { useModal } from "../utils/modal";
99
import vTooltip from "../utils/tooltip";
10-
import { useI18n } from "../../services/i18n";
10+
import { getLocalizedDisplayName, useI18n } from "../../services/i18n";
1111
1212
const emit = defineEmits<{
1313
hidden: [];
@@ -176,7 +176,7 @@
176176
<td>
177177
<ul class="list-group">
178178
<li v-for="(tune, tuneName) in tuneInfo" :key="tuneName" class="list-group-item" :class="tune.className">
179-
<a href="javascript:" @click="clickTune(tuneName as string)" draggable="false">{{tune.displayName}}</a>
179+
<a href="javascript:" @click="clickTune(tuneName as string)" draggable="false">{{getLocalizedDisplayName(tune.displayName)}}</a>
180180
<div>
181181
<span
182182
v-for="(pattern, patternName) in tune.patterns"

src/ui/compose/pattern-list.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import { injectStateRequired } from "../../services/state";
1212
import { showConfirm, showPrompt } from "../utils/alert";
1313
import vTooltip from "../utils/tooltip";
14-
import { useI18n } from "../../services/i18n";
14+
import { getLocalizedDisplayName, useI18n } from "../../services/i18n";
1515
1616
const props = defineProps<{
1717
expandTune?: string;
@@ -213,7 +213,7 @@
213213
<div class="card-header">
214214
<div class="d-grid">
215215
<button type="button" class="btn btn-link" @click="toggleTune(tune.tuneName)">
216-
{{tune.displayName}}
216+
{{getLocalizedDisplayName(tune.displayName)}}
217217
<fa v-if="tune.isCustom" icon="star" v-tooltip="i18n.t('pattern-list.user-created-tune')"/>
218218
<fa icon="caret-down"/>
219219
</button>

src/ui/compose/share-dialog.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import { computed, ref } from 'vue';
1111
import { useModal } from '../utils/modal';
1212
import vTooltip from "../utils/tooltip";
13-
import { useI18n } from '../../services/i18n';
13+
import { getLocalizedDisplayName, useI18n } from '../../services/i18n';
1414
1515
const props = defineProps<{
1616
linkPattern?: PatternReference;
@@ -182,7 +182,7 @@
182182
class="list-group-item"
183183
:class="className"
184184
>
185-
<a href="javascript:" @click="toggleTune(tuneName as string)" draggable="false">{{state.tunes[tuneName].displayName || tuneName}}</a>
185+
<a href="javascript:" @click="toggleTune(tuneName as string)" draggable="false">{{getLocalizedDisplayName(state.tunes[tuneName].displayName || tuneName as string)}}</a>
186186
<span
187187
v-for="({ enabled }, patternName) in patterns"
188188
:key="patternName"
@@ -195,7 +195,7 @@
195195
:disabled="enabled === 2"
196196
@click="togglePattern(tuneName as string, patternName as string)"
197197
>
198-
{{state.tunes[tuneName].patterns[patternName].displayName || patternName}} <fa icon="star" v-if="linkPattern && linkPattern[0] == tuneName && linkPattern[1] == patternName" />
198+
{{getLocalizedDisplayName(state.tunes[tuneName].patterns[patternName].displayName || patternName as string)}} <fa icon="star" v-if="linkPattern && linkPattern[0] == tuneName && linkPattern[1] == patternName" />
199199
</button>
200200
</span>
201201
</li>

src/ui/listen/example-song-player.vue

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import vTooltip from "../utils/tooltip";
1919
import { download, ExportType } from "../utils/export";
2020
import AbstractPlayer, { PositionData } from "../utils/abstract-player.vue";
21-
import { useI18n } from "../../services/i18n";
21+
import { getLocalizedDisplayName, useI18n } from "../../services/i18n";
2222
2323
const state = injectStateRequired();
2424
@@ -100,12 +100,12 @@
100100
<div class="bb-example-song">
101101
<div class="song" @click="setPosition($event)" ref="songRef">
102102
<div class="card" style="width: 10em;">
103-
<span class="tune-name">{{state.tunes["General Breaks"].displayName || "General Breaks"}}</span>
104-
<span class="pattern-name">{{state.tunes["General Breaks"].patterns["Whistle in"].displayName || "Whistle in"}}</span>
103+
<span class="tune-name">{{getLocalizedDisplayName("General Breaks")}}</span>
104+
<span class="pattern-name">{{getLocalizedDisplayName("Whistle in")}}</span>
105105
</div>
106106
<div v-for="(part, i) in normalizedSong" :key="i" class="card" :style="{ width: `${2.5 * part.length }em` }">
107-
<span class="tune-name">{{state.tunes[part.tuneName].displayName || part.tuneName}}</span>
108-
<span class="pattern-name">{{state.tunes[part.tuneName].patterns[part.patternName].displayName || part.patternName}}</span>
107+
<span class="tune-name">{{getLocalizedDisplayName(state.tunes[part.tuneName].displayName || part.tuneName)}}</span>
108+
<span class="pattern-name">{{getLocalizedDisplayName(state.tunes[part.tuneName].patterns[part.patternName].displayName || part.patternName)}}</span>
109109
</div>
110110

111111
<AbstractPlayer

src/ui/listen/tune-info.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import vTooltip from "../utils/tooltip";
1111
import { download, ExportType } from "../utils/export";
1212
import { BeatboxReference, getPlayerById } from "../../services/player";
13-
import { getTuneDescriptionHtml, T, useI18n } from "../../services/i18n";
13+
import { getLocalizedDisplayName, getTuneDescriptionHtml, T, useI18n } from "../../services/i18n";
1414
1515
const state = injectStateRequired();
1616
@@ -71,7 +71,7 @@
7171

7272
<template>
7373
<div class="bb-tune-info" v-if="tune">
74-
<h1>{{tune.displayName || tuneName}}</h1>
74+
<h1>{{getLocalizedDisplayName(tune.displayName || tuneName)}}</h1>
7575

7676
<div v-html="tuneDescriptionHtml"></div>
7777

src/ui/listen/tune-list.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import { computed, nextTick, ref, watch } from "vue";
33
import { injectStateRequired } from "../../services/state";
44
import PatternListFilter, { Filter, filterPatternList } from "../pattern-list-filter.vue";
5+
import { getLocalizedDisplayName } from "../../services/i18n";
56
67
const props = defineProps<{
78
tuneName: string | null | undefined;
@@ -51,7 +52,7 @@
5152
<ul class="nav nav-pills flex-column flex-nowrap" ref="tuneListRef">
5253
<li v-for="thisTuneName in tuneList" :key="thisTuneName" class="nav-item">
5354
<a class="nav-link" :class="{ active: thisTuneName == tuneName }" href="javascript:" @click="tuneName = thisTuneName" draggable="false">
54-
{{state.tunes[thisTuneName].displayName || thisTuneName}}
55+
{{getLocalizedDisplayName(state.tunes[thisTuneName].displayName || thisTuneName)}}
5556
</a>
5657
</li>
5758
</ul>

src/ui/pattern-placeholder.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
import { showConfirm } from "./utils/alert";
1414
import vTooltip from "./utils/tooltip";
1515
import AbstractPlayer, { PositionData } from "./utils/abstract-player.vue";
16-
import { useI18n } from "../services/i18n";
16+
import { getLocalizedDisplayName, useI18n } from "../services/i18n";
1717
1818
export const PatternPlaceholderItem = defineComponent({
1919
setup(props, { slots }) {
@@ -152,10 +152,10 @@
152152
<template>
153153
<div class="bb-pattern-placeholder" :class="[{ dragging }, `drag-effect-${dragEffect}`]" :draggable="draggable ? 'true' : 'false'" @dragstart="handleDragStart($event)" @dragend="handleDragEnd($event)" ref="containerRef">
154154
<div class="card pattern-button">
155-
<span class="tune-name">{{state.tunes[tuneName].displayName || tuneName}}</span>
155+
<span class="tune-name">{{getLocalizedDisplayName(state.tunes[tuneName].displayName || tuneName)}}</span>
156156
<br>
157157
<span class="pattern-name">
158-
{{state.tunes[tuneName].patterns[patternName].displayName || patternName}}
158+
{{getLocalizedDisplayName(state.tunes[tuneName].patterns[patternName].displayName || patternName)}}
159159
<fa v-if="isCustomPattern" icon="star" v-tooltip="i18n.t('pattern-placeholder.user-created-tooltip')"/>
160160
</span>
161161
</div>

0 commit comments

Comments
 (0)