apply_tool
Translate iOS/macOS app strings by applying translations to Xcode String Catalogs (.xcstrings files) for target languages.
Instructions
MCP tool to translate and apply translations to xcstrings file.
Args:
file_path (str): Path to the .xcstrings file
target_language (str): Target language code
app_description (str): Optional description of the app for better translation context
Returns:
str: Application result with translated keys or error message
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | ||
| target_language | Yes | ||
| app_description | No |
Implementation Reference
- The handler function for the MCP tool 'apply_tool'. It is decorated with @mcp.tool() for registration and implements the core logic: input validation, warning for existing translations, calling translate_and_apply helper, and formatting results.@mcp.tool() def apply_tool(file_path: str, target_language: str, app_description: str = "") -> str: """ MCP tool to translate and apply translations to xcstrings file. Args: file_path (str): Path to the .xcstrings file target_language (str): Target language code app_description (str): Optional description of the app for better translation context Returns: str: Application result with translated keys or error message """ try: if not validate_xcstrings_file(file_path): return f"Error: Invalid file path or not an .xcstrings file: {file_path}" if not validate_language_code(target_language): return f"Error: Invalid language code: {target_language}" # Check if target language already exists supported_languages = get_supported_languages(file_path) if target_language in supported_languages: warning_msg = f"Warning: {target_language} translations already exist in this file.\n" warning_msg += f"Using apply_tool will overwrite existing translations.\n" warning_msg += f"Consider using apply_missing_tool instead to only translate missing keys.\n\n" return warning_msg else: warning_msg = "" # Translate and apply in one step app_desc = app_description if app_description else None applied_translations, backup_path, summary, skipped_keys = translate_and_apply(file_path, target_language, app_description=app_desc) if not applied_translations and not skipped_keys: return "Error: Translation failed or returned no results" result = [ f"Summary: {summary}", f"Backup created: {backup_path}", ] if applied_translations: result.append(f"\nTranslated strings ({len(applied_translations)}):\n") for key, value in applied_translations.items(): result.append(f"{key}: {value}") if skipped_keys: result.append(f"\n\nSkipped strings ({len(skipped_keys)}):\n") for key, reason in skipped_keys.items(): result.append(f"{key}: {reason}") return "\n".join(result) except Exception as e: return format_error_message(e, "Failed to apply translations")