You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询Shiny应用多语言适配方案:如何将英文界面转为葡萄牙语

Best Approaches to Add Multilingual Support (English → Portuguese) to Your Shiny App

Hey there! Great question—adapting your Shiny app to support both English and Portuguese is totally feasible, and there are a few solid methods depending on your app’s complexity. Let’s dive into the most practical options:

This is the go-to tool for Shiny internationalization—it’s purpose-built for this exact use case, handles translations cleanly, and makes switching languages a breeze.

Steps to Implement:

  • First, install and load the package:
    install.packages("shiny.i18n")
    library(shiny.i18n)
    
  • Create a translation file (e.g., translations.csv) with your English and Portuguese strings. It should look like this:
    keyenpt
    titleMy AppMeu Aplicativo
    welcome_msgWelcome!Bem-vindo!
    submit_btnSubmitEnviar
  • Initialize the translator in your app:
    i18n <- Translator$new(translation_csvs_path = "translations.csv")
    i18n$set_translation_language("en") # Default to English
    
  • Update your UI to use translated strings with i18n$t():
    ui <- fluidPage(
      titlePanel(i18n$t("title")),
      selectInput("lang", "Choose Language:", choices = c("English" = "en", "Portuguese" = "pt")),
      h3(i18n$t("welcome_msg")),
      actionButton("submit", i18n$t("submit_btn"))
    )
    
  • Add server logic to switch languages dynamically:
    server <- function(input, output, session) {
      observeEvent(input$lang, {
        i18n$set_translation_language(input$lang)
        session$reload() # Reloads the app to apply new translations
      })
    }
    

2. Manual Reactive Language Management (For Small Apps)

If you want to avoid adding extra packages and your app is relatively simple, you can manage translations with reactive values.

Example Implementation:

  • Define translation lists for each language:
    lang_text <- list(
      en = list(
        title = "My App",
        welcome = "Welcome to the app!",
        filter = "Filter Data"
      ),
      pt = list(
        title = "Meu Aplicativo",
        welcome = "Bem-vindo ao aplicativo!",
        filter = "Filtrar Dados"
      )
    )
    
  • Use a reactive value to track the current language and update UI elements:
    ui <- fluidPage(
      uiOutput("page_title"),
      selectInput("lang", "Idioma/Language:", choices = c("English" = "en", "Português" = "pt")),
      uiOutput("welcome_text"),
      actionButton("filter_btn", uiOutput("filter_label"))
    )
    
    server <- function(input, output, session) {
      current_lang <- reactiveVal("en")
    
      observeEvent(input$lang, {
        current_lang(input$lang)
      })
    
      output$page_title <- renderUI({
        titlePanel(lang_text[[current_lang()]]$title)
      })
    
      output$welcome_text <- renderUI({
        h3(lang_text[[current_lang()]]$welcome)
      })
    
      output$filter_label <- renderUI({
        lang_text[[current_lang()]]$filter
      })
    }
    

3. Custom Translation Function (Flexible for Dynamic Content)

For more control—like handling HTML content or dynamic strings—you can write a simple helper function to fetch translations.

Example:

# Define translation lookup
translate <- function(key, lang = "en") {
  translations <- list(
    en = list(greeting = "Hello, {name}!", download = "Download Report"),
    pt = list(greeting = "Olá, {name}!", download = "Baixar Relatório")
  )
  translations[[lang]][[key]]
}

# Use in UI/server with dynamic values
server <- function(input, output, session) {
  current_lang <- reactiveVal("en")

  output$dynamic_greeting <- renderText({
    greeting <- translate("greeting", current_lang())
    sprintf(greeting, input$user_name)
  })
}

Pro Tips for Smooth Multilingual Support

  • Centralize all text: Keep translations in one place (csv, list, or yaml file) instead of hardcoding strings—this makes updates way easier.
  • Localize numbers/dates: Use format() with locale parameters (e.g., format(Sys.Date(), "%d/%m/%Y", locale = "pt_BR") for Portuguese date formatting).
  • Test thoroughly: Make sure every UI element, error message, and dynamic text works in both languages.
  • Save user preferences: If your app has user accounts, store their chosen language in a database or browser localStorage so they don’t have to switch every time.

内容的提问来源于stack exchange,提问作者Joni Hoppen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:25:53