@playkit-js/transcript 3.7.13 → 3.7.14-canary.0-8267ebd
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2 -0
- package/dist/playkit-transcript.js +1 -1
- package/dist/playkit-transcript.js.map +1 -1
- package/package.json +1 -1
- package/src/components/caption/caption.tsx +11 -12
- package/src/components/caption-list/captionList.tsx +4 -2
- package/src/components/transcript/transcript.tsx +4 -1
- package/translations/ca_es.i18n.json +1 -4
- package/translations/de.i18n.json +1 -4
- package/translations/en.i18n.json +2 -3
- package/translations/es.i18n.json +1 -4
- package/translations/fi.i18n.json +1 -4
- package/translations/fr.i18n.json +1 -4
- package/translations/fr_ca.i18n.json +1 -4
- package/translations/it.i18n.json +2 -4
- package/translations/ja.i18n.json +1 -4
- package/translations/ko.i18n.json +1 -4
- package/translations/nl.i18n.json +1 -4
- package/translations/pt.i18n.json +1 -4
- package/translations/pt_br.i18n.json +1 -4
- package/translations/ru.i18n.json +1 -4
- package/translations/zh_cn.i18n.json +1 -4
- package/translations/zh_tw.i18n.json +1 -4
package/package.json
CHANGED
|
@@ -20,10 +20,6 @@ export interface CaptionProps {
|
|
|
20
20
|
videoDuration: number;
|
|
21
21
|
eventManager?: any;
|
|
22
22
|
player?: any;
|
|
23
|
-
captionLabel?: string;
|
|
24
|
-
moveToSearch?: string;
|
|
25
|
-
navigationInstruction?: string;
|
|
26
|
-
timeLabel?: string;
|
|
27
23
|
setTextToRead: (textToRead: string, delay?: number) => void;
|
|
28
24
|
}
|
|
29
25
|
|
|
@@ -39,17 +35,18 @@ interface ExtendedCaptionProps extends CaptionProps {
|
|
|
39
35
|
isAutoScrollEnabled: boolean;
|
|
40
36
|
onUpKeyPressed?: (e: KeyboardEvent) => void;
|
|
41
37
|
onDownKeyPressed?: (e: KeyboardEvent) => void;
|
|
38
|
+
includeNavigationInstructions?: boolean;
|
|
39
|
+
jumpTo?: string;
|
|
40
|
+
navigationInstruction?: string;
|
|
42
41
|
}
|
|
43
42
|
|
|
44
43
|
const translates = {
|
|
45
|
-
|
|
46
|
-
moveToSearch: <Text id="transcript.move_to_search">Click to jump to search result</Text>,
|
|
44
|
+
jumpTo: <Text id="transcript.jump_to">Jump to</Text>,
|
|
47
45
|
navigationInstruction: (
|
|
48
46
|
<Text id="transcript.navigation_instruction">
|
|
49
47
|
Press Home to navigate to the beginning of the transcript. Press End to jump to the end of the transcript.
|
|
50
48
|
</Text>
|
|
51
|
-
)
|
|
52
|
-
timeLabel: <Text id="transcript.time_label">Timestamp</Text>
|
|
49
|
+
)
|
|
53
50
|
};
|
|
54
51
|
|
|
55
52
|
@withText(translates)
|
|
@@ -162,17 +159,19 @@ export class Caption extends Component<ExtendedCaptionProps> {
|
|
|
162
159
|
};
|
|
163
160
|
|
|
164
161
|
render() {
|
|
165
|
-
const {caption, isHighlighted, showTime, longerThanHour, indexMap,
|
|
162
|
+
const {caption, isHighlighted, showTime, longerThanHour, indexMap, jumpTo, player, includeNavigationInstructions, navigationInstruction} =
|
|
166
163
|
this.props;
|
|
167
164
|
const {startTime} = caption;
|
|
168
165
|
const time = showTime ? secondsToTime(startTime, longerThanHour) : '';
|
|
166
|
+
// Always include timestamp in aria-label for screen reader navigation, regardless of showTime visual display setting
|
|
167
|
+
const baseLabel = `${jumpTo} ${getDurationAsText(Math.floor(startTime), player?.config.ui.locale, true)}. ${caption.text}`;
|
|
168
|
+
const separator = /[.!?]$/.test(baseLabel.trim()) ? ' ' : '. ';
|
|
169
|
+
const ariaLabel = includeNavigationInstructions ? `${baseLabel}${separator}${navigationInstruction}` : baseLabel;
|
|
169
170
|
|
|
170
171
|
const captionA11yProps: Record<string, any> = {
|
|
171
172
|
ariaCurrent: isHighlighted,
|
|
172
173
|
tabIndex: 0,
|
|
173
|
-
ariaLabel
|
|
174
|
-
indexMap ? moveToSearch : captionLabel
|
|
175
|
-
}. ${navigationInstruction}`,
|
|
174
|
+
ariaLabel,
|
|
176
175
|
role: 'button'
|
|
177
176
|
};
|
|
178
177
|
|
|
@@ -28,6 +28,7 @@ export interface Props {
|
|
|
28
28
|
activeSearchIndex: number;
|
|
29
29
|
searchMap: Record<string, Record<string, number>>;
|
|
30
30
|
captionProps: CaptionProps;
|
|
31
|
+
captionsList?: string;
|
|
31
32
|
}
|
|
32
33
|
export class CaptionList extends Component<Props> {
|
|
33
34
|
private _currentCaptionRef: any = null;
|
|
@@ -138,10 +139,10 @@ export class CaptionList extends Component<Props> {
|
|
|
138
139
|
};
|
|
139
140
|
|
|
140
141
|
render() {
|
|
141
|
-
const {data, highlightedMap} = this.props;
|
|
142
|
+
const {data, highlightedMap, captionsList} = this.props;
|
|
142
143
|
let isSearchCaptionInList = false;
|
|
143
144
|
return (
|
|
144
|
-
<div className={styles.transcriptWrapper} onKeyUp={this._handleKeyUp}>
|
|
145
|
+
<div className={styles.transcriptWrapper} onKeyUp={this._handleKeyUp} aria-label={captionsList || 'Captions List'} role="region">
|
|
145
146
|
{data.map((captionData, index) => {
|
|
146
147
|
const captionProps = this._getCaptionProps(captionData);
|
|
147
148
|
let isSearchCaption = false;
|
|
@@ -168,6 +169,7 @@ export class CaptionList extends Component<Props> {
|
|
|
168
169
|
}}
|
|
169
170
|
onUpKeyPressed={() => this._focusPrevCaption(index)}
|
|
170
171
|
onDownKeyPressed={() => this._focusNextCaption(index)}
|
|
172
|
+
includeNavigationInstructions={index === 0 || index === data.length - 1}
|
|
171
173
|
{...captionProps}
|
|
172
174
|
/>
|
|
173
175
|
);
|
|
@@ -33,7 +33,8 @@ const translates = {
|
|
|
33
33
|
attachTranscript: <Text id="transcript.attach_transcript">Bring Transcript back</Text>,
|
|
34
34
|
detachTranscript: <Text id="transcript.detach_transcript">Popout transcript</Text>,
|
|
35
35
|
toSearchResult: <Text id="transcript.to_search_result">Go to result</Text>,
|
|
36
|
-
hideTranscript: <Text id="transcript.hide_plugin">Hide Transcript</Text
|
|
36
|
+
hideTranscript: <Text id="transcript.hide_plugin">Hide Transcript</Text>,
|
|
37
|
+
captionsList: <Text id="transcript.captions_list">Captions List</Text>
|
|
37
38
|
};
|
|
38
39
|
|
|
39
40
|
export interface TranscriptProps {
|
|
@@ -60,6 +61,7 @@ export interface TranscriptProps {
|
|
|
60
61
|
detachTranscript?: string;
|
|
61
62
|
toSearchResult?: string;
|
|
62
63
|
hideTranscript?: string;
|
|
64
|
+
captionsList?: string;
|
|
63
65
|
downloadDisabled: boolean;
|
|
64
66
|
onDownload: () => void;
|
|
65
67
|
printDisabled: boolean;
|
|
@@ -497,6 +499,7 @@ export class Transcript extends Component<TranscriptProps, TranscriptState> {
|
|
|
497
499
|
onScroll={this._onScroll}
|
|
498
500
|
showItemsIcons={true}
|
|
499
501
|
searchActive={false}
|
|
502
|
+
captionsList={this.props.captionsList}
|
|
500
503
|
/>
|
|
501
504
|
);
|
|
502
505
|
};
|
|
@@ -22,12 +22,9 @@
|
|
|
22
22
|
"attach_transcript": "Tornar a la finestra de transcripció",
|
|
23
23
|
"detach_transcript": "Desplegar transcripció",
|
|
24
24
|
"transcript": "Transcripció",
|
|
25
|
-
"caption_label": "Saltar a aquest punt del vídeo",
|
|
26
|
-
"move_to_search": "Feu clic per anar al resultat de la cerca",
|
|
27
25
|
"to_search_result": "Anar al resultat",
|
|
28
26
|
"to_search_result_label": "Feu clic per anar a aquest punt del vídeo",
|
|
29
|
-
"navigation_instruction": "Premeu Inici per tornar al principi de la transcripció. Premeu Fi per anar a la fi de la transcripció."
|
|
30
|
-
"time_label": "Marca de temps"
|
|
27
|
+
"navigation_instruction": "Premeu Inici per tornar al principi de la transcripció. Premeu Fi per anar a la fi de la transcripció."
|
|
31
28
|
}
|
|
32
29
|
}
|
|
33
30
|
}
|
|
@@ -22,12 +22,9 @@
|
|
|
22
22
|
"attach_transcript": "Transkript zurückholen",
|
|
23
23
|
"detach_transcript": "Transkript öffnen",
|
|
24
24
|
"transcript": "Transkript",
|
|
25
|
-
"caption_label": "An diese Stelle im Video springen",
|
|
26
|
-
"move_to_search": "Klicken, um zum Suchergebnis zu springen",
|
|
27
25
|
"to_search_result": "Zum Ergebnis springen",
|
|
28
26
|
"to_search_result_label": "Klicken, um zu diesem Punkt im Video zu springen",
|
|
29
|
-
"navigation_instruction": "Mit Home zum Transkript-Anfang springen. Mit End zum Transkript-Ende springen."
|
|
30
|
-
"time_label": "Zeitstempel"
|
|
27
|
+
"navigation_instruction": "Mit Home zum Transkript-Anfang springen. Mit End zum Transkript-Ende springen."
|
|
31
28
|
}
|
|
32
29
|
}
|
|
33
30
|
}
|
|
@@ -22,12 +22,11 @@
|
|
|
22
22
|
"attach_transcript": "Bring Transcript back",
|
|
23
23
|
"detach_transcript": "Popout transcript",
|
|
24
24
|
"transcript": "Transcript",
|
|
25
|
-
"caption_label": "Jump to this point in video",
|
|
26
|
-
"move_to_search": "Click to jump to search result",
|
|
27
25
|
"to_search_result": "Go to result",
|
|
28
26
|
"to_search_result_label": "Click to jump to this point in the video",
|
|
29
27
|
"navigation_instruction": "Press Home to navigate to the beginning of the transcript. Press End to jump to the end of the transcript.",
|
|
30
|
-
"
|
|
28
|
+
"jump_to": "Jump to",
|
|
29
|
+
"captions_list": "Captions List"
|
|
31
30
|
}
|
|
32
31
|
}
|
|
33
32
|
}
|
|
@@ -22,12 +22,9 @@
|
|
|
22
22
|
"attach_transcript": "Volver a la ventana de transcripción",
|
|
23
23
|
"detach_transcript": "Mostrar transcripción en la ventana emergente",
|
|
24
24
|
"transcript": "Transcripción",
|
|
25
|
-
"caption_label": "Saltar a este punto del vídeo",
|
|
26
|
-
"move_to_search": "Hacer clic para ir al resultado de la búsqueda",
|
|
27
25
|
"to_search_result": "Ir al resultado",
|
|
28
26
|
"to_search_result_label": "Hacer clic para ir a este punto del vídeo",
|
|
29
|
-
"navigation_instruction": "Pulsar Inicio para volver al comienzo de la transcripción. Pulsar Fin para ir al final de la transcripción."
|
|
30
|
-
"time_label": "Marca de tiempo"
|
|
27
|
+
"navigation_instruction": "Pulsar Inicio para volver al comienzo de la transcripción. Pulsar Fin para ir al final de la transcripción."
|
|
31
28
|
}
|
|
32
29
|
}
|
|
33
30
|
}
|
|
@@ -22,12 +22,9 @@
|
|
|
22
22
|
"attach_transcript": "Tuo tekstitallenne takaisin",
|
|
23
23
|
"detach_transcript": "Kelluva tekstitallenne",
|
|
24
24
|
"transcript": "Tekstitallenne",
|
|
25
|
-
"caption_label": "Siirry tähän kohtaan videossa",
|
|
26
|
-
"move_to_search": "Siirry hakutulokseen napsauttamalla",
|
|
27
25
|
"to_search_result": "Siirry tulokseen",
|
|
28
26
|
"to_search_result_label": "Siirry tähän kohtaan videossa napsauttamalla",
|
|
29
|
-
"navigation_instruction": "Siirry tekstitallenteen alkuun painamalla Etusivu. Siirry tekstitallenteen loppuun painamalla Loppu."
|
|
30
|
-
"time_label": "Aikaleima"
|
|
27
|
+
"navigation_instruction": "Siirry tekstitallenteen alkuun painamalla Etusivu. Siirry tekstitallenteen loppuun painamalla Loppu."
|
|
31
28
|
}
|
|
32
29
|
}
|
|
33
30
|
}
|
|
@@ -22,12 +22,9 @@
|
|
|
22
22
|
"attach_transcript": "Ramener la transcription",
|
|
23
23
|
"detach_transcript": "Transcription pop-out",
|
|
24
24
|
"transcript": "Relevé",
|
|
25
|
-
"caption_label": "Allez à ce point de la vidéo",
|
|
26
|
-
"move_to_search": "Cliquez pour accéder aux résultats de recherche",
|
|
27
25
|
"to_search_result": "Allez au résultat",
|
|
28
26
|
"to_search_result_label": "Cliquez pour passer à ce moment de la vidéo",
|
|
29
|
-
"navigation_instruction": "Appuyez sur Accueil pour revenir au début de la transcription. Appuyez sur Fin pour passer à la fin de la transcription."
|
|
30
|
-
"time_label": "Horodatage"
|
|
27
|
+
"navigation_instruction": "Appuyez sur Accueil pour revenir au début de la transcription. Appuyez sur Fin pour passer à la fin de la transcription."
|
|
31
28
|
}
|
|
32
29
|
}
|
|
33
30
|
}
|
|
@@ -22,12 +22,9 @@
|
|
|
22
22
|
"attach_transcript": "Ramenez la transcription",
|
|
23
23
|
"detach_transcript": "Transcription pop-out",
|
|
24
24
|
"transcript": "Relevé",
|
|
25
|
-
"caption_label": "Passez à ce point de la vidéo",
|
|
26
|
-
"move_to_search": "Cliquez pour accéder aux résultats de recherche",
|
|
27
25
|
"to_search_result": "Allez au résultat",
|
|
28
26
|
"to_search_result_label": "Cliquez pour passer à ce point de la vidéo",
|
|
29
|
-
"navigation_instruction": "Appuyez sur Accueil pour revenir au début de la transcription. Appuyez sur Fin pour passer à la fin de la transcription."
|
|
30
|
-
"time_label": "Horodatage"
|
|
27
|
+
"navigation_instruction": "Appuyez sur Accueil pour revenir au début de la transcription. Appuyez sur Fin pour passer à la fin de la transcription."
|
|
31
28
|
}
|
|
32
29
|
}
|
|
33
30
|
}
|
|
@@ -22,12 +22,10 @@
|
|
|
22
22
|
"attach_transcript": "Ripristina la trascrizione",
|
|
23
23
|
"detach_transcript": "Trascrizione a comparsa",
|
|
24
24
|
"transcript": "Trascrizione",
|
|
25
|
-
|
|
26
|
-
"move_to_search": "Clicca per andare al risultato di ricerca",
|
|
25
|
+
|
|
27
26
|
"to_search_result": "Vai al risultato",
|
|
28
27
|
"to_search_result_label": "Clicca per andare a questo punto del video",
|
|
29
|
-
"navigation_instruction": "Premi Home per andare all'inizio della trascrizione. Premi Fine per andare alla fine della trascrizione."
|
|
30
|
-
"time_label": "Timestamp"
|
|
28
|
+
"navigation_instruction": "Premi Home per andare all'inizio della trascrizione. Premi Fine per andare alla fine della trascrizione."
|
|
31
29
|
}
|
|
32
30
|
}
|
|
33
31
|
}
|
|
@@ -22,12 +22,9 @@
|
|
|
22
22
|
"attach_transcript": "トランスクリプトを元に戻す",
|
|
23
23
|
"detach_transcript": "トランスクリプトを表示する",
|
|
24
24
|
"transcript": "トランスクリプト",
|
|
25
|
-
"caption_label": "ビデオのこのポイントにジャンプする",
|
|
26
|
-
"move_to_search": "クリックして検索結果にジャンプする",
|
|
27
25
|
"to_search_result": "結果に移動する",
|
|
28
26
|
"to_search_result_label": "クリックして、ビデオのこのポイントにジャンプする",
|
|
29
|
-
"navigation_instruction": "Home キーを押すと、トランスクリプトの先頭に移動します。End キーを押すと、トランスクリプトの最後に移動します。"
|
|
30
|
-
"time_label": "タイプスタンプ"
|
|
27
|
+
"navigation_instruction": "Home キーを押すと、トランスクリプトの先頭に移動します。End キーを押すと、トランスクリプトの最後に移動します。"
|
|
31
28
|
}
|
|
32
29
|
}
|
|
33
30
|
}
|
|
@@ -22,12 +22,9 @@
|
|
|
22
22
|
"attach_transcript": "대본을 원래 위치로 가져옵니다",
|
|
23
23
|
"detach_transcript": "기록 팝아웃",
|
|
24
24
|
"transcript": "기록",
|
|
25
|
-
"caption_label": "이 시점으로 이동합니다",
|
|
26
|
-
"move_to_search": "클릭하여 검색 결과로 이동합니다",
|
|
27
25
|
"to_search_result": "결과로 이동합니다",
|
|
28
26
|
"to_search_result_label": "클릭하여 이 시점으로 이동합니다",
|
|
29
|
-
"navigation_instruction": "Home 키를 누르면 대본의 시작으로 이동합니다. End 키를 누르면 대본의 끝으로 이동합니다."
|
|
30
|
-
"time_label": "타임스탬프"
|
|
27
|
+
"navigation_instruction": "Home 키를 누르면 대본의 시작으로 이동합니다. End 키를 누르면 대본의 끝으로 이동합니다."
|
|
31
28
|
}
|
|
32
29
|
}
|
|
33
30
|
}
|
|
@@ -22,12 +22,9 @@
|
|
|
22
22
|
"attach_transcript": "Breng de transcriptie terug",
|
|
23
23
|
"detach_transcript": "Transcript weergeven",
|
|
24
24
|
"transcript": "Transcriptie",
|
|
25
|
-
"caption_label": "Spoel door naar dit punt in de video",
|
|
26
|
-
"move_to_search": "Klik om door te spoelen naar het zoekresultaat",
|
|
27
25
|
"to_search_result": "Ga naar resultaat",
|
|
28
26
|
"to_search_result_label": "Klik om door te spoelen naar dit punt in de video",
|
|
29
|
-
"navigation_instruction": "Klik op startpagina om naar het begin van de transcriptie te navigeren. Druk op einde om naar het einde van de transcriptie door te spoelen."
|
|
30
|
-
"time_label": "Tijdstempel"
|
|
27
|
+
"navigation_instruction": "Klik op startpagina om naar het begin van de transcriptie te navigeren. Druk op einde om naar het einde van de transcriptie door te spoelen."
|
|
31
28
|
}
|
|
32
29
|
}
|
|
33
30
|
}
|
|
@@ -7,12 +7,9 @@
|
|
|
7
7
|
"attach_transcript_text": "Transcrição exibida",
|
|
8
8
|
"attach_transcript_button": "Trazer de volta",
|
|
9
9
|
"attach_transcript": "Trazer a Transcrição de volta",
|
|
10
|
-
"caption_label": "Avançar para este ponto no vídeo",
|
|
11
|
-
"move_to_search": "Clicar para avançar para o resultado da pesquisa",
|
|
12
10
|
"to_search_result": "Ir para o resultado",
|
|
13
11
|
"to_search_result_label": "Clicar para avançar para este ponto do vídeo",
|
|
14
|
-
"navigation_instruction": "Premir Início para navegar até ao início da transcrição. Premir Fim para avançar para o final da transcrição."
|
|
15
|
-
"time_label": "Marcação de data e hora"
|
|
12
|
+
"navigation_instruction": "Premir Início para navegar até ao início da transcrição. Premir Fim para avançar para o final da transcrição."
|
|
16
13
|
}
|
|
17
14
|
}
|
|
18
15
|
}
|
|
@@ -22,12 +22,9 @@
|
|
|
22
22
|
"attach_transcript": "Voltar a Transcrição",
|
|
23
23
|
"detach_transcript": "Transcrição em janela separada",
|
|
24
24
|
"transcript": "Transcrição",
|
|
25
|
-
"caption_label": "Avançar para este ponto no vídeo",
|
|
26
|
-
"move_to_search": "Clicar para avançar para o resultado da pesquisa",
|
|
27
25
|
"to_search_result": "Ir para o resultado",
|
|
28
26
|
"to_search_result_label": "Clicar para avançar para este ponto do vídeo",
|
|
29
|
-
"navigation_instruction": "Pressione Início para ir ao início da transcrição. Pressione Fim para ir ao fim da transcrição."
|
|
30
|
-
"time_label": "Marcação de data e hora"
|
|
27
|
+
"navigation_instruction": "Pressione Início para ir ao início da transcrição. Pressione Fim para ir ao fim da transcrição."
|
|
31
28
|
}
|
|
32
29
|
}
|
|
33
30
|
}
|
|
@@ -22,12 +22,9 @@
|
|
|
22
22
|
"attach_transcript": "Вернуть расшифровку",
|
|
23
23
|
"detach_transcript": "Всплывающая текстовая расшифровка",
|
|
24
24
|
"transcript": "Текстовая расшифровка",
|
|
25
|
-
"caption_label": "Перейти к этой точке в видео",
|
|
26
|
-
"move_to_search": "Нажмите, чтобы перейти к результату поиска",
|
|
27
25
|
"to_search_result": "Перейти к результату",
|
|
28
26
|
"to_search_result_label": "Нажмите, чтобы перейти к этой точке в видео",
|
|
29
|
-
"navigation_instruction": "Нажмите Home, чтобы перейти к началу текстовой расшифровки. Нажмите End, чтобы перейти к концу текстовой расшифровки."
|
|
30
|
-
"time_label": "Временная метка"
|
|
27
|
+
"navigation_instruction": "Нажмите Home, чтобы перейти к началу текстовой расшифровки. Нажмите End, чтобы перейти к концу текстовой расшифровки."
|
|
31
28
|
}
|
|
32
29
|
}
|
|
33
30
|
}
|
|
@@ -22,12 +22,9 @@
|
|
|
22
22
|
"attach_transcript": "还原转录文字",
|
|
23
23
|
"detach_transcript": "弹出转录文字",
|
|
24
24
|
"transcript": "转录文字",
|
|
25
|
-
"caption_label": "跳至视频此位置",
|
|
26
|
-
"move_to_search": "点击跳转至搜索结果",
|
|
27
25
|
"to_search_result": "前往结果",
|
|
28
26
|
"to_search_result_label": "点击跳转至视频此位置",
|
|
29
|
-
"navigation_instruction": "按 Home 键跳转至转录文字开头。按 End 键跳转至转录文字末尾。"
|
|
30
|
-
"time_label": "时间戳"
|
|
27
|
+
"navigation_instruction": "按 Home 键跳转至转录文字开头。按 End 键跳转至转录文字末尾。"
|
|
31
28
|
}
|
|
32
29
|
}
|
|
33
30
|
}
|
|
@@ -22,12 +22,9 @@
|
|
|
22
22
|
"attach_transcript": "帶文字內容返回",
|
|
23
23
|
"detach_transcript": "彈出轉錄視窗",
|
|
24
24
|
"transcript": "逐字稿",
|
|
25
|
-
"caption_label": "跳轉至影片中的這個位置",
|
|
26
|
-
"move_to_search": "點擊跳轉至搜尋結果",
|
|
27
25
|
"to_search_result": "前往結果",
|
|
28
26
|
"to_search_result_label": "點擊跳轉至影片中的這個位置",
|
|
29
|
-
"navigation_instruction": "按下首頁導覽至文字內容開頭。按下結束跳轉至文字內容末端。"
|
|
30
|
-
"time_label": "時間戳記"
|
|
27
|
+
"navigation_instruction": "按下首頁導覽至文字內容開頭。按下結束跳轉至文字內容末端。"
|
|
31
28
|
}
|
|
32
29
|
}
|
|
33
30
|
}
|