155 lines
3.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { usePageData } from 'vuepress/client'
import { computed } from 'vue'
import type {
PlumeThemePageData,
} from '../../shared/index.js'
/**
* Default locale config for `vuepress-plugin-reading-time2` plugin
*/
export const readingTimeLocales = {
'en': {
word: 'About $word words',
less1Minute: 'Less than 1 minute',
time: 'About $time min',
},
'zh-CN': {
word: '约$word字',
less1Minute: '小于1分钟',
time: '约$time分钟',
},
'zh-TW': {
word: '約$word字',
less1Minute: '小於1分鐘',
time: '约$time分鐘',
},
'de': {
word: 'Ungefähr $word Wörter',
less1Minute: 'Weniger als eine Minute',
time: 'Ungefähr $time min',
},
'de-at': {
word: 'Um die $word Wörter',
less1Minute: 'Weniger als eine Minute',
time: 'Ungefähr $time min',
},
'vi': {
word: 'Khoảng $word từ',
less1Minute: 'Ít hơn 1 phút',
time: 'Khoảng $time phút',
},
'uk': {
word: 'Про $word слова',
less1Minute: 'Менше 1 хвилини',
time: 'Приблизно $time хв',
},
'ru': {
word: 'Около $word слов',
less1Minute: 'Меньше 1 минуты',
time: 'Около $time мин',
},
'br': {
word: 'Por volta de $word palavras',
less1Minute: 'Menos de 1 minuto',
time: 'Por volta de $time min',
},
'pl': {
word: 'Około $word słów',
less1Minute: 'Mniej niż 1 minuta',
time: 'Około $time minut',
},
'sk': {
word: 'Okolo $word slov',
less1Minute: 'Menej ako 1 minúta',
time: 'Okolo $time minút',
},
'fr': {
word: 'Environ $word mots',
less1Minute: 'Moins de 1 minute',
time: 'Environ $time min',
},
'es': {
word: 'Alrededor de $word palabras',
less1Minute: 'Menos de 1 minuto',
time: 'Alrededor de $time min',
},
'ja': {
word: '$word字程度',
less1Minute: '1分以内',
time: '約$time分',
},
'tr': {
word: 'Yaklaşık $word kelime',
less1Minute: '1 dakikadan az',
time: 'Yaklaşık $time dakika',
},
'ko': {
word: '약 $word 단어',
less1Minute: '1분 미만',
time: '약 $time 분',
},
'fi': {
word: 'Noin $word sanaa',
less1Minute: 'Alle minuutti',
time: 'Noin $time minuuttia',
},
'hu': {
word: 'Körülbelül $word szó',
less1Minute: 'Kevesebb, mint 1 perc',
time: 'Körülbelül $time perc',
},
'id': {
word: 'Sekitar $word kata',
less1Minute: 'Kurang dari 1 menit',
time: 'Sekitar $time menit',
},
'nl': {
word: 'Ongeveer $word woorden',
less1Minute: 'Minder dan 1 minuut',
time: 'Ongeveer $time minuten',
},
}
export function useReadingTime() {
const page = usePageData<PlumeThemePageData>()
return computed<{ times: string, words: string }>(() => {
if (!page.value.readingTime)
return { times: '', words: '' }
const locale = readingTimeLocales[page.value.lang] ?? readingTimeLocales.en
const minutes = page.value.readingTime.minutes
const words = page.value.readingTime.words
const times = (minutes < 1 ? locale.less1Minute : locale.time).replace(
'$time',
Math.round(minutes),
)
return {
times,
words: locale.word.replace('$word', words),
}
})
}