
vue-i18n과 react-i18next
💡
vue-i18n의 useI18n 훅에서는 기본적으로 번역 키를 찾지 못했을 때 에러를 발생시키지 않고, 대신 지정된 대체 문자열을 반환하거나 키 자체를 반환한다. 그러나 vue-i18n에는 키를 찾지 못했을 때 에러를 발생시키도록 설정하는 옵션이 존재
vue-i18n 에서 키가 없는 경우 에러를 발생시키는 방법
vue-i18n에서는 키를 찾지 못했을 때 에러를 발생시키는missingWarn및fallbackWarn옵션을 제공. 해당 옵션들을false로 설정하여 경고가 아닌 에러를 발생시키도록 가능missingWarn옵션missingWarn옵션은 번역 키가 없을 경우 경고를 표시할지에 대한 설정입니다. 기본값은true이며,false로 설정하면 경고가 발생하지 않습니다.
에러 핸들링을 위한
missing옵션
missing옵션을 사용하여 직접 에러를 발생시킬 수 있다.missing옵션은 번역을 찾을 수 없을 때 호출되는 함수이며 해당 함수를 사용하여 커스텀 로직을 추가할 수 있다.missing 옵션 예시
import { createI18n } from 'vue-i18n';
const i18n = createI18n({
locale: 'en',
messages: {
en: {
welcome: 'Welcome',
},
},
missing: (locale, key, vm, values) => {
// 키가 누락된 경우 예외를 발생시킵니다.
throw new Error(`Missing translation key: ${key}`);
},
});
export default i18n;useI18n훅을 사용하는 경우, 이 훅을 호출할 때는i18n인스턴스가 설정된 후 호출되므로, 위의i18n설정만 제대로 되어 있다면 별도로 추가 설정 없이도useI18n을 통해missing옵션이 동작useI18n에서의 사용 예시
import { useI18n } from 'vue-i18n';
export default {
setup() {
const { t } = useI18n();
try {
const message = t('nonexistent.key'); // 없는 키를 호출할 경우 에러 발생
} catch (error) {
console.error(error.message); // "Missing translation key: nonexistent.key"
}
},
};예시(기존)
//i18n.ts
export default createI18n({
legacy: false,
globalInjection: true,
locale: process.env.I18N_LOCALE || 'en',
fallbackLocale: process.env.I18N_FALLBACK_LOCALE || 'en',
messages: loadLocaleMessages(),
missing: () => `{defaultValue}`,
});missingWarn: true
missing
export default createI18n({ legacy: false, globalInjection: true, locale: process.env.VUE_APP_I18N_LOCALE || 'en', fallbackLocale: process.env.VUE_APP_I18N_FALLBACK_LOCALE || 'en', messages: loadLocaleMessages(), missing: (locale: any, key: any) => { // 분기처리를 통해 'en' locale일 때 다국어 key가 없으면 에러를 일으킬 수 있다. if (locale === 'en') { throw new Error(`Missing translation key: ${key}`); } else { console.warn(`Missing translation for key: ${key} in locale: ${locale}`); } }, });
React의
react-i18next라이브러리에서도 비슷하게 적용 가능missingKeyHandler:react-i18next에서는 번역 키가 없을 경우 호출될 콜백을 설정 가능. 이 옵션을 사용하면 키가 없을 때 직접 커스텀 처리 가능keySeparator: 기본적으로 이 옵션은 키 구분자 역할을 합니다만, 키가 존재하지 않으면 특정 처리를 할 수 있는 로직 추가 가능react-i18next의 에러 처리:react-i18next에서는missingKeyHandler로 키가 없을 때 처리하는 방법을 제공하고, 그 외에도debug모드를 활성화하면 콘솔에 경고를 출력하여 디버깅을 도와줌.
예시
import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
// i18n 초기화 설정
i18n.use(initReactI18next).init({
resources: {
en: {
translation: {
key1: "Hello",
},
},
},
lng: "en", // 기본 언어 설정
fallbackLng: "en", // fallback 언어 설정
missingKeyHandler: function(lng, ns, key, fallbackValue) {
throw new Error(`Missing key: ${key} for language: ${lng}`);
},
debug: true, // 디버깅 모드 활성화
});missingKeyHandler: 이 옵션은 번역 키가 없을 경우 호출. 위 예제에서는 키가 없을 경우Error를 던져서 에러를 발생시킴debug:debug: true로 설정하면i18next는 번역이 누락된 키에 대해 콘솔에 경고 메시지를 출력.