Skip to main content

Laravel i18n: अंतरराष्ट्रीयकरण और स्थानीयकरण की संपूर्ण गाइड

पहली लोकेल फ़ाइल से प्रोडक्शन तक: Laravel की अनुवाद प्रणाली कॉन्फ़िगर करें, बहुवचन संभालें, JSON फ़ॉलबैक बग ठीक करें और क्षेत्रीय वैरिएंट के लिए बेहतर लोकेल फ़ॉलबैक चेन जोड़ें।

1

Laravel की अनुवाद प्रणाली को समझें

Laravel में पहले से मौजूद अनुवाद प्रणाली दो फ़ाइल फ़ॉर्मैट का समर्थन करती है: PHP ऐरे और JSON। PHP फ़ाइलों में सुविधा के अनुसार व्यवस्थित नेस्टेड कुंजियाँ (auth.failed, validation.required) इस्तेमाल होती हैं। JSON फ़ाइलों में स्रोत स्ट्रिंग को कुंजी के रूप में इस्तेमाल किया जाता है, जो सरल है लेकिन नेस्टिंग का समर्थन नहीं करता।

Terminal
composer create-project laravel/laravel my-app
cd my-app

# Laravel includes i18n out of the box
# No extra packages needed for basic usage
Laravel की अनुवाद प्रणाली lang/ डायरेक्टरी (Laravel 9+) या resources/lang/ (Laravel 8 और उससे पहले) में होती है। फ़्रेमवर्क डायरेक्टरी का अपने-आप पता लगा लेता है। यदि दोनों मौजूद हों, तो lang/ को प्राथमिकता मिलती है।
2

लोकेल सेटिंग्स कॉन्फ़िगर करें

config/app.php में अपने एप्लिकेशन का डिफ़ॉल्ट लोकेल और फ़ॉलबैक लोकेल सेट करें। सक्रिय लोकेल में अनुवाद कुंजी न मिलने पर फ़ॉलबैक लोकेल इस्तेमाल होता है। अपने एप्लिकेशन के समर्थित लोकेल कॉन्फ़िगर करें और यूज़र के पसंदीदा लोकेल का पता लगाकर उसे सेट करने के लिए मिडलवेयर जोड़ें।

config/app.php
// config/app.php
return [
    'locale' => 'en',            // Default locale
    'fallback_locale' => 'en',   // Fallback when key is missing
    'faker_locale' => 'en_US',

    // Available locales (for your language switcher)
    'available_locales' => ['en', 'de', 'ja', 'es', 'fr', 'pt-BR'],
];
app/Http/Middleware/SetLocale.php
// app/Http/Middleware/SetLocale.php
namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class SetLocale
{
    public function handle(Request $request, Closure $next)
    {
        $locale = $request->segment(1); // e.g. /de/about

        if (in_array($locale, config('app.available_locales'))) {
            app()->setLocale($locale);
        }

        return $next($request);
    }
}
3

अनुवाद फ़ंक्शन इस्तेमाल करें

Laravel स्ट्रिंग का अनुवाद करने के तीन तरीके देता है: __() हेल्पर फ़ंक्शन (अनुशंसित), trans() फ़ंक्शन और @lang Blade डायरेक्टिव। तीनों अनुवाद कुंजी और वैकल्पिक रिप्लेसमेंट पैरामीटर स्वीकार करते हैं। PHP कोड और Blade टेम्पलेट में __() इस्तेमाल करें तथा जब HTML को एस्केप करने की आवश्यकता न हो, तब Blade में @lang इस्तेमाल करें।

lang/en/messages.php
// lang/en/messages.php
return [
    'welcome' => 'Welcome to our application',
    'greeting' => 'Hello, :name!',
    'nav' => [
        'home' => 'Home',
        'about' => 'About',
        'settings' => 'Settings',
    ],
];

// lang/de/messages.php
return [
    'welcome' => 'Willkommen in unserer Anwendung',
    'greeting' => 'Hallo, :name!',
    'nav' => [
        'home' => 'Startseite',
        'about' => 'Über uns',
        'settings' => 'Einstellungen',
    ],
];
नए कोड में trans() के बजाय __() को प्राथमिकता दें। __() PHP और JSON दोनों अनुवाद फ़ाइलों के साथ काम करता है, जबकि trans() केवल PHP फ़ाइलों के साथ काम करता है। Blade टेम्पलेट में @lang डायरेक्टिव {'{ __() }'} के बराबर है, लेकिन इसका सिंटैक्स थोड़ा अधिक साफ़ है।
4

बहुवचन संभालें

Laravel बहुवचन रूपों के लिए पाइप से अलग किए गए सिंटैक्स का इस्तेमाल करता है। इसका सबसे सरल रूप 'apples' => 'There is one apple|There are many apples' है। स्पष्ट रेंज के लिए 'apples' => '{0} No apples|{1} One apple|[2,*] :count apples' इस्तेमाल करें। trans_choice() हेल्पर या Str::plural() संख्या के आधार पर सही रूप चुनता है।

lang/en.json
// lang/en.json
{
    "Welcome back!": "Welcome back!",
    "You have :count new notifications": "You have :count new notifications",
    "Copyright :year :company": "Copyright :year :company"
}

// lang/de.json
{
    "Welcome back!": "Willkommen zurück!",
    "You have :count new notifications": "Sie haben :count neue Benachrichtigungen",
    "Copyright :year :company": "Copyright :year :company"
}
Laravel की अंतर्निहित बहुवचन प्रणाली अधिकतर भाषाओं के केवल सरल one/other नियम सही ढंग से संभालती है। जटिल बहुवचन रूपों वाली भाषाओं (अरबी में 6, रूसी में 4 और पोलिश में 3) के लिए आपको सभी आवश्यक CLDR बहुवचन श्रेणियाँ परिभाषित करनी होंगी। इनके बिना यूज़र को व्याकरण की दृष्टि से गलत टेक्स्ट दिखाई देता है।
5

लोकेल फ़ॉलबैक चेन जोड़ें

Laravel का अंतर्निहित फ़ॉलबैक सक्रिय लोकेल से सीधे fallback_locale पर जाता है—बीच में कोई चरण नहीं होता। कोई कुंजी न मिलने पर pt-BR यूज़र को पूरी तरह उपयुक्त pt-PT अनुवाद के बजाय अंग्रेज़ी दिखाई देती है। laravel-locale-chain लोड होने के समय कॉन्फ़िगर की जा सकने वाली फ़ॉलबैक चेन के अनुवादों को डीप-मर्ज करके इसे ठीक करता है।

resources/views/example.blade.php
{{-- Simple translation --}}
<h1>{{ __('messages.welcome') }}</h1>

{{-- With variables --}}
<p>{{ __('messages.greeting', ['name' => $user->name]) }}</p>

{{-- Using @lang directive --}}
<h2>@lang('messages.nav.home')</h2>

{{-- JSON translations (use the string itself as key) --}}
<p>{{ __('Welcome back!') }}</p>

{{-- Pluralization --}}
{{ trans_choice('{0} No items|{1} One item|[2,*] :count items', $count) }}

{{-- Inside Blade components --}}
<x-button>{{ __('messages.nav.settings') }}</x-button>
6

अनुवादों को ऑटोमेट करें

Laravel i18n सेटअप पूरा होने के बाद AI की मदद से अपनी लोकेल फ़ाइलों का अनुवाद करें। अपने AI सहायक को स्रोत लोकेल फ़ाइल दें या अपनी CI/CD पाइपलाइन में i18n Agent CLI इस्तेमाल करें। PHP और JSON दोनों अनुवाद फ़ाइलें समर्थित हैं।

config/locale-chain.php
// Install locale chain package
composer require i18n-agent/laravel-locale-chain

// config/locale-chain.php
return [
    'chains' => [
        'pt-BR' => ['pt-BR', 'pt', 'en'],
        'zh-Hant-TW' => ['zh-Hant-TW', 'zh-Hant', 'zh', 'en'],
        'es-419' => ['es-419', 'es', 'en'],
    ],
];

// In AppServiceProvider::boot()
use I18nAgent\LocaleChain\LocaleChainServiceProvider;

// The package automatically deep-merges translations
// across the chain: pt-BR -> pt -> en
अनुवाद क्रमिक रूप से करें—नई कुंजियाँ जोड़ने पर सभी फ़ाइलें दोबारा जनरेट करने के बजाय केवल अंतर का अनुवाद करें। इससे मनुष्यों द्वारा समीक्षित अनुवाद सुरक्षित रहते हैं और अनावश्यक बदलाव से बचा जा सकता है।

आम समस्याएँ

हार्डकोड किया गया एकवचन/बहुवचन लॉजिक

trans_choice() इस्तेमाल करने के बजाय $count == 1 ? 'item' : 'items' लिखने से उन भाषाओं में अनुवाद टूट जाता है जिनमें 0 एकवचन है (फ़्रेंच), 3+ बहुवचन रूप हैं (रूसी, पोलिश) या 6 रूप हैं (अरबी)। हमेशा Laravel का बहुवचन सिंटैक्स इस्तेमाल करें और सभी आवश्यक रूप परिभाषित करें।

JSON अनुवाद फ़ॉलबैक नहीं करते

Laravel का fallback_locale केवल PHP अनुवाद फ़ाइलों के लिए काम करता है। JSON अनुवादों में स्रोत स्ट्रिंग को कुंजी के रूप में इस्तेमाल किया जाता है, इसलिए अनुवाद न मिलने पर फ़ॉलबैक लोकेल में खोजने के बजाय कुंजी ही (अंग्रेज़ी टेक्स्ट) लौटती है। इसका अर्थ है कि JSON अनुवादों में वास्तविक लोकेल फ़ॉलबैक नहीं होता। इसे ठीक करने के लिए laravel-locale-chain इस्तेमाल करें।

प्राथमिकता को समझे बिना PHP और JSON मिलाना

जब एक ही कुंजी PHP और JSON दोनों फ़ाइलों में मौजूद हो, तो PHP को प्राथमिकता मिलती है। इससे भ्रमित करने वाला व्यवहार हो सकता है, जिसमें JSON फ़ाइल अपडेट करने का कोई प्रभाव नहीं पड़ता क्योंकि PHP फ़ाइल उसे ओवरराइड कर देती है। हर सुविधा नेमस्पेस के लिए एक फ़ॉर्मैट चुनें और उसी का लगातार इस्तेमाल करें।

i18n Agent अभी आज़माएँ

अपनी अनुवाद फ़ाइल यहाँ छोड़ें

JSON, YAML, PO, XML, CSV, Markdown, Properties

या ब्राउज़ करने के लिए क्लिक करें

लक्षित भाषाएँ

साइन अप की ज़रूरत नहींतुरंत अनुमान

Laravel i18n के अक्सर पूछे जाने वाले प्रश्न