У меня есть большое блестящее приложение, которое используется несколькими пользователями, и я использую пакетосвещение для управления учетными данными. Некоторые пользователи просили перевести пользовательский интерфейс на свой собственный язык. Требуемые языки (в зависимости от пользователя): Engli sh, французский и голландский.
Перевод требуется только для компонентов пользовательского интерфейса. Мне было интересно, есть ли способ сохранить языковые предпочтения в базе данных учетных данных sqlite пакета shinyapp, а затем перевести весь пользовательский интерфейс на основе этого значения, см. Минимальный пример ниже для иллюстрации. Блестящий администратор должен иметь возможность создать нового пользователя через страницу администратора и выбрать язык ...
credentials <- data.frame(
user = c("shiny", "shinymanager"),
password = c("azerty", "12345"),
language = c("en","fr") # example.
stringsAsFactors = FALSE
)
Основываясь на этом, как я могу эффективно переводить свои компоненты пользовательского интерфейса? (желательно хранить файлы перевода в отдельном файле сценария / Json или в любом другом месте.
Обратите внимание, что здесь я не беспокоюсь о странице входа на блестящий менеджер (где пользователь еще не зарегистрирован, поэтому его языковые предпочтения не могут через базу данных sqlite).
[EDIT]
# server.R
shinyServer(function(input, output, session){
#### Credential login ####
res_auth <- secure_server(
check_credentials = check_credentials(sqlite_path, passphrase = "password")
)
output$lang <- renderPrint({
reactiveValuesToList(res_auth)$language # see the credential file above
})
В основном я хочу, чтобы в приведенном ниже пользовательском интерфейсе было изменено значение «Это панель вкладок» на «Ceci est un onglet», если выводится $ lang is == "fr". Сложность, с которой я столкнулся здесь, заключается в том, что касается реактивности и процесса оценки сервера. В идеале я бы не использовал оцененный сервером интерфейс (т.е. с uiOutput & renderUi), так как это увеличивает сложность код и язык не меняются после запуска интерфейса после входа в систему.
userinterface <- navbarPage('Dashboard', id="page", collapsible=TRUE, inverse=FALSE,
tabPanel("This is a tab panel", module.ui("mymoduleui")) #some ui in module.ui
)
ui <- secure_app(userinterface,
enable_admin = TRUE)