--- title: "Translation Table Workflow" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Translation Table Workflow} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>", eval = FALSE ) ``` ```{r setup} library(polyglotr) library(dplyr) ``` # Translation Table Workflow This vignette demonstrates how to use `create_translation_table()` to translate a vector of phrases across multiple languages, creating a comprehensive multilingual reference table. This is particularly useful for localization projects and multilingual data preparation workflows. ## Overview The `create_translation_table()` function allows you to: - Translate multiple phrases simultaneously across several target languages - Generate organized tabular output for easy reference - Support multilingual workflows and localization projects - Create consistent translations for UI elements, documentation, or data labels ## Basic Usage Let's start with a simple example translating common UI elements: ```{r basic_example} # Define phrases to translate ui_phrases <- c("Welcome", "Login", "Password", "Submit", "Cancel", "Help") # Define target languages languages <- c("es", "fr", "de", "it") # Create translation table translation_table <- create_translation_table(ui_phrases, languages) print(translation_table) ``` This creates a data frame with the original English phrases and their translations in Spanish (es), French (fr), German (de), and Italian (it). ## Multiple API Comparison While `create_translation_table()` uses Google Translate by default, you can compare results across different translation APIs for quality assurance. Here's how to create an enhanced function that supports multiple APIs: ```{r api_comparison} # Enhanced function to support multiple translation APIs create_translation_table_multi_api <- function(words, languages, apis = c("google", "mymemory")) { results <- data.frame(original_word = words) for (language in languages) { for (api in apis) { column_name <- paste0(language, "_", api) if (api == "google") { results[[column_name]] <- sapply(words, function(x) { google_translate(x, target_language = language, source_language = "en") }) } else if (api == "mymemory") { results[[column_name]] <- sapply(words, function(x) { mymemory_translate(x, target_language = language, source_language = "en") }) } } } return(results) } # Sample phrases for comparison phrases <- c("Good morning", "Thank you very much", "How are you today?") # Create comparison table with multiple APIs comparison_table <- create_translation_table_multi_api( words = phrases, languages = c("fr", "es"), apis = c("google", "mymemory") ) print(comparison_table) # You can also use the standard function and add MyMemory translations google_table <- create_translation_table(phrases, c("fr", "es")) # Add MyMemory translations for comparison google_table$fr_mymemory <- sapply(phrases, function(x) { mymemory_translate(x, target_language = "fr", source_language = "en") }) google_table$es_mymemory <- sapply(phrases, function(x) { mymemory_translate(x, target_language = "es", source_language = "en") }) print("Standard function with added MyMemory translations:") print(google_table) ``` ## Advanced Multilingual Workflow For larger localization projects, you can organize your workflow systematically: ```{r advanced_workflow} # Define categories of phrases navigation_phrases <- c("Home", "About", "Contact", "Services", "Portfolio") form_phrases <- c("First Name", "Last Name", "Email Address", "Phone Number", "Message") action_phrases <- c("Save", "Delete", "Edit", "Share", "Download", "Print") # Define comprehensive language set target_languages <- c("es", "fr", "de", "it", "pt", "nl", "sv", "no") # Create separate translation tables for each category navigation_table <- create_translation_table(navigation_phrases, target_languages) form_table <- create_translation_table(form_phrases, target_languages) action_table <- create_translation_table(action_phrases, target_languages) # Add category identifier navigation_table$category <- "Navigation" form_table$category <- "Forms" action_table$category <- "Actions" # Combine into master translation table master_table <- rbind(navigation_table, form_table, action_table) # Display summary print(paste("Total phrases translated:", nrow(master_table))) print(paste("Languages covered:", length(target_languages))) ``` ## Working with Tibbles and Tidyverse For more advanced data manipulation, you can use the tidyverse ecosystem: ```{r tidyverse_workflow} library(tibble) library(dplyr) # Create a more structured approach content_data <- tibble( phrase_id = 1:8, category = c("greetings", "greetings", "farewells", "farewells", "questions", "questions", "responses", "responses"), priority = c("high", "medium", "high", "medium", "high", "medium", "high", "medium"), english = c("Hello", "Good morning", "Goodbye", "See you later", "What is your name?", "Where are you from?", "My name is...", "I am from...") ) # Create translations for priority languages first priority_languages <- c("es", "fr", "de") translations <- create_translation_table(content_data$english, priority_languages) # Combine with original metadata final_table <- bind_cols(content_data, translations[, -1]) # Remove duplicate original_word column # Filter and organize as needed high_priority <- final_table %>% filter(priority == "high") %>% select(phrase_id, category, english, es, fr, de) print(high_priority) ``` ## Export Options Translation tables can be exported in various formats for different use cases: ```{r export_examples} # For web development - JSON-like structure phrases <- c("Welcome", "Login", "Logout") web_translations <- create_translation_table(phrases, c("es", "fr", "de")) # Create key-value structure for each language create_json_structure <- function(table, lang) { keys <- tolower(gsub(" ", "_", table$original_word)) values <- table[[lang]] structure <- setNames(values, keys) return(structure) } spanish_json <- create_json_structure(web_translations, "es") french_json <- create_json_structure(web_translations, "fr") print("Spanish translations:") print(spanish_json) # For documentation purposes - wide format table doc_table <- web_translations %>% rename(English = original_word, Spanish = es, French = fr, German = de) print("Documentation table:") print(doc_table) ``` ## Best Practices When working with translation tables: 1. **Consistency**: Use the same source language throughout your project 2. **Context**: Group related phrases for better translation context 3. **Validation**: Compare multiple APIs for critical translations 4. **Organization**: Use categories and metadata to organize large translation sets 5. **Backup**: Save translation tables as they represent significant work ## Conclusion The `create_translation_table()` function provides a powerful foundation for multilingual workflows. By combining it with tidyverse tools and structured approaches, you can efficiently manage localization projects of any size. The tabular format makes it easy to review, validate, and export translations for various applications.