UNPKG

react-google-translate-mj

Version:

A React package for automatic website translation using Google Translate API

282 lines (216 loc) 7.15 kB
# React Google Translate MJ A lightweight React package for automatic website translation using Google Translate API, with no API key required. This package makes it easy to add multi-language support to your React applications with minimal configuration. ![npm](https://img.shields.io/npm/v/react-google-translate-mj) ![license](https://img.shields.io/npm/l/react-google-translate-mj) ## Features - 🌐 Free text translation between any languages - 🔑 No API key required - ⚡ Lightweight and performant - 🎯 Easy-to-use components - 🔄 Real-time language switching - 📱 Automatic OS language detection - 📝 Support for HTML and rich text - 🌍 RTL languages support - ⚛️ Built for React 18+ ## Installation ```bash # Using npm npm install react-google-translate-mj # Using yarn yarn add react-google-translate-mj ``` ## Quick Start ```jsx import { TranslateProvider, TranslateText } from 'react-google-translate-mj'; function App() { return ( <TranslateProvider defaultLanguage="en"> <h1> <TranslateText>Hello World!</TranslateText> </h1> </TranslateProvider> ); } ``` ## Components and Hooks ### TranslateProvider The root component that provides translation context. ```jsx <TranslateProvider defaultLanguage="en" // Required: Default language code targetLanguage="fr" // Optional: Initial target language > {/* Your app content */} </TranslateProvider> ``` ### TranslateText Component to wrap any text that needs translation. ```jsx <TranslateText> This text will be automatically translated </TranslateText> // With HTML content <TranslateText> <p>This is a <strong>formatted</strong> text with <a href="#">link</a></p> </TranslateText> ``` ### useTranslator Hook Access translation functions and state in your components. ```jsx import { useTranslator } from 'react-google-translate-mj'; function LanguageSelector() { const { currentLanguage, // Current active language setLanguage, // Function to change language defaultLanguage, // Default language set in provider isTranslating // Translation status } = useTranslator(); return ( <select value={currentLanguage} onChange={(e) => setLanguage(e.target.value)} > <option value="en">English</option> <option value="fr">Français</option> <option value="es">Español</option> </select> ); } ``` ### useAutoTranslate Hook Hook for manual text translation. ```jsx import { useAutoTranslate } from 'react-google-translate-mj'; function TranslatedText({ text }) { const translatedText = useAutoTranslate(text); return <p>{translatedText}</p>; } ``` ## Advanced Usage ### With React Router ```jsx import { TranslateProvider, TranslateText, useTranslator } from 'react-google-translate-mj'; import { BrowserRouter, Routes, Route, Link } from 'react-router-dom'; function Layout() { const { setLanguage, currentLanguage } = useTranslator(); return ( <div> <nav> <Link to={`/${currentLanguage}/home`}> <TranslateText>Home</TranslateText> </Link> </nav> <select onChange={(e) => setLanguage(e.target.value)} value={currentLanguage}> <option value="en">English</option> <option value="fr">Français</option> </select> <Outlet /> </div> ); } function App() { return ( <BrowserRouter> <TranslateProvider defaultLanguage="en"> <Routes> <Route path="/:lang/*" element={<Layout />}> {/* Your routes */} </Route> </Routes> </TranslateProvider> </BrowserRouter> ); } ``` ### RTL Language Support The package automatically handles RTL languages. Just wrap your content with TranslateText: ```jsx function Content() { const { currentLanguage } = useTranslator(); return ( <div dir={currentLanguage === 'ar' || currentLanguage === 'fa' ? 'rtl' : 'ltr'}> <TranslateText> This text will be properly aligned based on the language </TranslateText> </div> ); } ``` ## Supported Languages The package supports all languages available in Google Translate. Common language codes: - English: 'en' - French: 'fr' - Spanish: 'es' - German: 'de' - Italian: 'it' - Portuguese: 'pt' - Russian: 'ru' - Chinese: 'zh' - Japanese: 'ja' - Korean: 'ko' - Arabic: 'ar' - Persian: 'fa' ## Performance Optimization The package includes built-in optimizations: - Caches translations to minimize API calls - Only translates text when language changes - Batches translation requests - Minimal re-renders using React.memo ## Browser Support - Chrome (latest) - Firefox (latest) - Safari (latest) - Edge (latest) - IE 11 (with appropriate polyfills) ## Contributing Contributions are welcome! Please feel free to submit a Pull Request. ## License MIT © [MJ Hassanzadeh](https://github.com/hassanzadeh-mj) ## Support If you find this package helpful, please consider: - Starring the [GitHub repository](https://github.com/hassanzadeh-mj/free-google-translate) - Creating an issue for any bugs or feature requests - Contributing to the codebase ## Server-Side Implementation This package now includes server-side translation handling for better security and performance. Here's how to set it up: ### Express.js Setup ```typescript import express from 'express'; import translateHandler from 'react-google-translate-mj/dist/server/api/translate'; const app = express(); app.use(express.json()); // Add the translation endpoint app.post('/api/translate', translateHandler); ``` ### Next.js Setup Create a file at `pages/api/translate.ts`: ```typescript import type { NextApiRequest, NextApiResponse } from 'next'; import { serverTranslate } from 'react-google-translate-mj/dist/server/translate'; export default async function handler(req: NextApiRequest, res: NextApiResponse) { if (req.method !== 'POST') { return res.status(405).json({ error: 'Method not allowed' }); } try { const { text, from, to } = req.body; if (!text || !to) { return res.status(400).json({ error: 'Missing required parameters' }); } const translatedText = await serverTranslate({ text, from, to, }); return res.status(200).json({ translatedText }); } catch (error) { console.error('Translation API error:', error); return res.status(500).json({ error: 'Translation failed' }); } } ``` ### Benefits of Server-Side Translation 1. **Better Security**: API requests are made from your server instead of client browsers 2. **Improved Performance**: Built-in caching mechanism reduces redundant API calls 3. **Rate Limiting Control**: Better control over translation request rates 4. **Error Handling**: Centralized error handling and logging 5. **IP Protection**: Your server IP is used instead of user IPs