0

나는 즉시 반응 할 수 있어야하는 Electron React/Redux 응용 프로그램을 개발 중입니다. 현재 우리는 일부 문자열을 상수 (대화 상자 내용과 같은 React 구성 요소가 아닌 구성 요소의 경우)로 저장하고 템플릿에서 생성 된 메뉴를 가지고 있습니다 (아래 참조).전자 응용 프로그램에서 언어 변경 (i18n 반응)

import T from 'i18n-react'; 
T.setTexts({ 
    menu: { 
    file: { 
     label: '&File', 
     new: '&New...', 
     open: '&Open...', 
     // etc. 
    } 
    } 
}); 

이것은 다음의 템플릿이 될 것입니다 : 우리는 현재 사용중인 사용하기 쉬운 듯 이것은 우리의 메뉴에 대한 영어 번역을로드의 예 등을 복수화 같은 일부 고급 기능입니다 지원 라이브러리를 국제화을-반응 메뉴 :

const template = [{ 
    label: T.translate('menu.file.label'), //'&File' 
    submenu: [{ 
    label: T.translate('menu.file.new'), //'&New...' 
    accelerator: 'Ctrl+N', 
    click:() => { /*some code*/ }, 
    }], 
    // etc. 
}] 
const menu = Electron.remote.Menu.buildFromTemplate(template) 
Electron.remote.Menu.setApplicationMenu(menu) 

문제는 번역 된 문자열이 일반 상수 문자열이라는 것입니다. 따라서 T.setTexts를 사용하여 즉석에서 언어를 변경하면 문자열이 변경되지 않습니다.

React.render(
    <T.span text={{ key: "greeting", myName: "i18n-react" }}/>, 
    document.getElementById('content') 
); 

하지만 어떻게 내가 전자 메뉴를 설득 않는 등 대화 상자가 변경하려면 다음 반응 구성 요소는 객체 (문서에서 예)뿐만 아니라 문자열을 저장하기 때문에, (아마도) 미세입니까?

답변

0

i18n-react에 대한 판단을 원하지 않지만이 라이브러리는 언어 변경에 대한 재주문을 제공하지 않을 수 있습니다. 즉, 사용하기위한 것이 아니기 때문에 초기 setText에 제공된 언어로만 번역을 제공합니다.

너는 더 성숙하고 그것의 usecase를 밖으로 지원하는 https://github.com/i18next/react-i18next으로 볼지도 모르다.

관련 문제