लेख

Laravel स्थानीयकरण चरण-दर-चरण मार्गदर्शिका, उदाहरणों के साथ ट्यूटोरियल

लारवेल परियोजना का स्थानीयकरण कैसे करें, लारवेल में परियोजना कैसे विकसित करें और इसे कई भाषाओं में प्रयोग करने योग्य बनाएं। इस लेख में हम उदाहरण के साथ देखते हैं कि अनुवाद फ़ाइलों के साथ कैसे काम करें, भाषा स्विचर कैसे बनाएं और बहुत कुछ।

लारवेल विभिन्न भाषाओं और संस्कृतियों के अनुकूल होने के लिए स्थानीय होने के लिए डिज़ाइन किया गया एक एप्लिकेशन है। स्थानीयकरण अनुवाद के माध्यम से एक विशिष्ट भाषा के लिए अंतर्राष्ट्रीयकृत अनुप्रयोगों को तैयार करता है।

आवश्यक शर्तें

  • इस लेख में हम इसका उल्लेख करेंगे लारवेल संस्करण 8.x;
  • इस ट्यूटोरियल का सफलतापूर्वक अनुसरण करने के लिए, आपको PHP प्रोग्रामिंग भाषा और Laravel फ्रेमवर्क का आवश्यक ज्ञान होना चाहिए।
  • आपका डोमेन है localhost. यदि नहीं, तो बदल दें localhost आपके अपने डोमेन नाम या आईपी पते के साथ (आपके इंस्टॉलेशन के आधार पर)।

अनुवाद फ़ाइलों के साथ काम करना

लारवेल में, कई अन्य रूपरेखाओं की तरह, हम अलग-अलग भाषाओं के अनुवादों को अलग-अलग फाइलों में संग्रहीत कर सकते हैं। Laravel अनुवाद फ़ाइलों को व्यवस्थित करने के दो तरीके हैं:

  • एक पुराना दृष्टिकोण जो फ़ाइलों को निम्न स्थान पर संग्रहीत करता है: resources/lang/{en,fr,ru}/{myfile.php};
  • एक नया दृष्टिकोण जो फ़ाइलों को निम्न स्थान पर संग्रहीत करता है: resources/lang/{fr.json, ru.json};

उन भाषाओं के लिए जो क्षेत्र के अनुसार भिन्न हैं, आपको उनका नाम देना चाहिए directory/file आईएसओ 15897 के अनुसार भाषा का। उदाहरण के लिए, यूके अंग्रेजी के लिए आप उपयोग करेंगे en_GB के बजाय en-gb. इस लेख में, हम दूसरे दृष्टिकोण पर ध्यान केंद्रित करेंगे, लेकिन वही पहले के लिए जाता है (अनुवाद कुंजियों को नाम देने और पुनर्प्राप्त करने के तरीके को छोड़कर)। 

सरल अनुवाद

अब, पर चलते हैं resources/views/welcome.blade.phpफ़ाइल और की सामग्री को बदलें bodyहमारे साथ टैग करें, जैसे:

<body class="antialiased">
    <div class="relative flex items-top justify-center min-h-screen bg-gray-100 dark:bg-gray-900 sm:items-center py-4 sm:pt-0">
        <div class="max-w-6xl mx-auto sm:px-6 lg:px-8">
            <div class="flex justify-center pt-8 sm:justify-start sm:pt-0">
                Welcome to our website
            </div>
        </div>
    </div>
</body>

हम अपना स्थानीयकरण स्वागत संदेश तैयार करके शुरू करेंगे, जो Laravel में वास्तव में आसान है। आपको केवल निम्नलिखित कोड के साथ "हमारी वेबसाइट में आपका स्वागत है" टेक्स्ट को बदलना है: {{ __('Welcome to our website') }}. यह लारवेल को डिफ़ॉल्ट रूप से "हमारी वेबसाइट में आपका स्वागत है" प्रदर्शित करने का निर्देश देगाdefiयदि अंग्रेजी के अलावा कोई अन्य भाषा सेट है तो इस स्ट्रिंग का अनुवाद देखें (हम उस पर बाद में विचार करेंगे)। अंग्रेजी को डिफ़ॉल्ट भाषा के रूप में सेट किया जाएगाdefiहमारे ऐप का निश, इसलिए डिफ़ॉल्ट सेटिंगdefiअंत में हम बस "हमारी वेबसाइट पर आपका स्वागत है" टेक्स्ट प्रदर्शित करेंगे। यदि स्थान भिन्न है, तो हम मिलान अनुवाद ढूंढने का प्रयास करेंगे और यह एक क्षण में तैयार हो जाएगा।

लारवेल स्थानीयकरण

लेकिन लारवेल को कैसे पता चलता है कि वर्तमान भाषा कौन सी है या कौन सी भाषाएं एप्लिकेशन में उपलब्ध हैं? यह ऐप में स्थानीय कॉन्फ़िगरेशन को देखकर करता है config/app.php. इस फ़ाइल को खोलें और इन दो साहचर्य सरणी कुंजियों को देखें:

/*
|--------------------------------------------------------------------------
| Application Locale Configuration
|--------------------------------------------------------------------------
|
| The application locale determines the default locale that will be used
| by the translation service provider. You are free to set this value
| to any of the locales which will be supported by the application.
|
*/
'locale' => 'en',
/*
|--------------------------------------------------------------------------
| Application Fallback Locale
|--------------------------------------------------------------------------
|
| The fallback locale determines the locale to use when the current one
| is not available. You may change the value to correspond to any of
| the language folders that are provided through your application.
|
*/
'fallback_locale' => 'en',

कुंजियों के ऊपर दिखाए गए विवरण स्व-व्याख्यात्मक होने चाहिए, लेकिन संक्षेप में, कुंजी locale स्थानीय पूर्व शामिल हैdefiआपके एप्लिकेशन का विवरण (कम से कम, यदि कोड में कोई अन्य स्थान सेट नहीं किया गया है)। और यह fallback_locale यह तब सक्रिय होता है जब हम अपने एप्लिकेशन में कोई गैर-मौजूद लोकेल सेट करते हैं।

जबकि हमारे पास यह फाइल खुली हुई है, आइए हमारी सुविधा के लिए एक नई कुंजी जोड़ें, जिसमें हमारे एप्लिकेशन का समर्थन करने वाले सभी स्थान सूचीबद्ध होंगे। स्थानीय स्विचर जोड़ते समय हम इसका उपयोग बाद में करेंगे। हालाँकि, यह एक वैकल्पिक कार्य है क्योंकि Laravel को हमें ऐसा करने की आवश्यकता नहीं है।

/*
|--------------------------------------------------------------------------
| Available locales
|--------------------------------------------------------------------------
|
| List all locales that your application works with
|
*/
'available_locales' => [
  'English' => 'en',
  'Italian' => 'it',
  'French' => 'fr',
],

अब हमारा एप्लिकेशन तीन भाषाओं का समर्थन करता है: अंग्रेजी, इतालवी और फ्रेंच।

अनुवाद फ़ाइलें

अब जबकि हमने वे सभी स्थान स्थापित कर लिए हैं जिनके साथ हम काम करेंगे, हम आगे बढ़ सकते हैं और अपने पूर्व स्वागत संदेश का अनुवाद कर सकते हैंdefiरात्रि.

आइए फ़ोल्डर में नई स्थानीयकरण फ़ाइलें जोड़कर प्रारंभ करें resources/lang. सबसे पहले एक फाइल बनाएं resources/lang/it.json और संबंधित अनुवाद इस प्रकार जोड़ें:

{
  "Welcome to our website": "Benvenuto nel nostro sito web"
}

अगला, एक फ़ाइल बनाएँ resources/lang/fr.json:

{

"हमारी वेब साईट में स्वागत है": "हमारी साइट पर आपका स्वागत है"

}

जैसा कि आप देख सकते हैं, हम हमेशा पूर्व संदेश का संदर्भ देते हैंdefiनिटो जिसे हमने फ़ाइल में जोड़ा है welcome.blade.php (कौन था {{ __('Welcome to our website') }}). जिस कारण हमें फाइल नहीं बनानी पड़ती है en.json ऐसा इसलिए है क्योंकि लारवेल को पहले से ही पता होता है कि हम पूर्व सेटिंग द्वारा कौन से संदेश पास करते हैंdefiसमारोह में समाप्त हुआ __() वे हमारे स्थानीय पूर्व के लिए हैंdefiनितो एन.

Laravel में स्थानीय परिवर्तन

इस बिंदु पर, लारवेल को पता नहीं है कि स्थानों को कैसे बदला जाए, इसलिए अभी के लिए, आइए सीधे पथ के अंदर अनुवाद करें। स्वागत पथ पूर्व संशोधित करेंdefiजैसा कि नीचे दिखाया गया है:

Route::get('/{locale?}', function ($locale = null) {
    if (isset($locale) && in_array($locale, config('app.available_locales'))) {
        app()->setLocale($locale);
    }
    
    return view('welcome');
});

अब हम किसी भी उपलब्ध भाषा को पहले पथ खंड के रूप में निर्दिष्ट करते हुए अपनी वेबसाइट पर जा सकते हैं: उदाहरण के लिए, localhost/rulocalhost/fr. आपको स्थानीयकृत सामग्री देखनी चाहिए। यदि आप एक असमर्थित स्थान निर्दिष्ट करते हैं या कोई स्थान निर्दिष्ट नहीं करते हैं, तो Laravel उपयोग करेगा enडिफ़ॉल्ट रूप सेdefiनीता.

middleware

हो सकता है कि प्रत्येक साइट लिंक के लिए स्थान बदलना वह न हो जो आप चाहते हैं, और यह सौंदर्य की दृष्टि से स्वच्छ न दिखे। इसलिए हम एक विशेष भाषा स्विचर के माध्यम से भाषा सेटिंग करेंगे और अनुवादित सामग्री को प्रदर्शित करने के लिए उपयोगकर्ता सत्र का उपयोग करेंगे। इसलिए, अंदर एक नया मिडलवेयर बनाएँ app/Http/Middleware/Localization.phpफ़ाइल या चलाकर artisan make:middleware Localization.

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Session;

class Localization
{
    /**
    * Handle an incoming request.
    *
    * @param  \Illuminate\Http\Request  $request
    * @param  \Closure  $next
    * @return mixed
    */
    public function handle(Request $request, Closure $next)
    {
        if (Session::has('locale')) {
            App::setLocale(Session::get('locale'));
        }
        return $next($request);
    }
}

यदि यह चयन सत्र में मौजूद है, तो यह मिडलवेयर लारवेल को उपयोगकर्ता द्वारा चयनित लोकेल का उपयोग करने का निर्देश देगा।

चूँकि हमें हर अनुरोध पर ऐसा करने की आवश्यकता है, इसलिए हमें इसे प्री मिडलवेयर स्टैक में भी जोड़ना होगाdefiमें समाप्त हुआ app/http/Kernel.phpके लिए webमिडलवेयर समूह:

* The application's route middleware groups.
*
* @var array
*/
protected $middlewareGroups = [
  'web' => [
      \App\Http\Middleware\EncryptCookies::class,
      \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
      \Illuminate\Session\Middleware\StartSession::class,
      // \Illuminate\Session\Middleware\AuthenticateSession::class,
      \Illuminate\View\Middleware\ShareErrorsFromSession::class,
      \App\Http\Middleware\VerifyCsrfToken::class,
      \Illuminate\Routing\Middleware\SubstituteBindings::class,
      \App\Http\Middleware\Localization::class, /* <--- add this */
  ],

पाठ्यक्रम बदलें

इसके बाद, हमें लोकेल बदलने के लिए पथ जोड़ने की जरूरत है। हम एक क्लोजर पाथ का उपयोग कर रहे हैं, लेकिन यदि आप चाहें तो आप अपने कंट्रोलर के अंदर ठीक उसी कोड का उपयोग कर सकते हैं:

Route::get('language/{locale}', function ($locale) {
    app()->setLocale($locale);
    session()->put('locale', $locale);

    return redirect()->back();
});

इसके अलावा, हमारे पूर्व स्वागत पथ में पहले से जोड़े गए लोकेल टॉगल को हटाना न भूलेंdefiरात:

Route::get('/', function () {
    return view('welcome');
});

एक बार यह हो जाने के बाद, उपयोगकर्ता के लिए वर्तमान में सेट की गई भाषा को बदलने का एकमात्र तरीका दर्ज करना है localhost/language/{locale}।  localeचयन सत्र के भीतर संग्रहीत किया जाएगा और उपयोगकर्ताओं को रीडायरेक्ट करेगा कि वे कहां से आए हैं (चेक करें Localizationमध्यस्थ)। इसे आज़माने के लिए, पर जाएँ localhost/language/ru(जब तक आपकी सत्र कुकी आपके ब्राउज़र में मौजूद है) और आपको अनुवादित सामग्री दिखाई देगी। आप स्वतंत्र रूप से वेबसाइट पर घूम सकते हैं या पृष्ठ को ताज़ा करने का प्रयास कर सकते हैं और देख सकते हैं कि चयनित भाषा संरक्षित है।

कम्यूटेटर

अब हमें कुछ ऐसा बनाने की आवश्यकता है जिस पर क्लिक करके उपयोगकर्ता यूआरएल में मैन्युअल रूप से स्थानीय कोड दर्ज करने के बजाय भाषा बदलने के लिए क्लिक कर सके। ऐसा करने के लिए, हम एक बहुत ही सरल भाषा परीक्षक जोड़ेंगे। इसलिए नया बनाएं resources/views/partials/language_switcher.blade.phpफ़ाइल निम्न कोड के साथ:

<div class="flex justify-center pt-8 sm:justify-start sm:pt-0">
    @foreach($available_locales as $locale_name => $available_locale)
        @if($available_locale === $current_locale)
            <span class="ml-2 mr-2 text-gray-700">{{ $locale_name }}</span>
        @else
            <a class="ml-1 underline ml-2 mr-2" href="language/{{ $available_locale }}">
                <span>{{ $locale_name }}</span>
            </a>
        @endif
    @endforeach
</div>

"स्वागत" दृश्य में नव निर्मित स्विचर शामिल करें:

<body class="antialiased">
    <div class="relative flex items-top justify-center min-h-screen bg-gray-100 dark:bg-gray-900 sm:items-center py-4 sm:pt-0">
        <div class="max-w-6xl mx-auto sm:px-6 lg:px-8">
            @include('partials/language_switcher')
            <div class="flex justify-center pt-8 sm:justify-start sm:pt-0">
                {{ __('Welcome to our website') }}
            </div>
        </div>
    </div>
</body>

खोलें app/Providers/AppServiceProvider.phpफाइल करें और साझा करने के लिए कोड जोड़ें जब हमारा भाषा स्विचर तैयार होगा। विशेष रूप से, हम वर्तमान लोकेल को साझा करेंगे जिसे फ़ाइल के रूप में एक्सेस किया जा सकता है {{ $current_locale }}.

नवाचार समाचार पत्र
नवाचार पर सबसे महत्वपूर्ण समाचार देखना न भूलें। उन्हें ईमेल द्वारा प्राप्त करने के लिए साइन अप करें।

PHP Laravel में उन्नत अनुवाद विकल्प

हम मुख्य रूप से साथ काम करेंगे resources/views/welcome.blade.php, इसलिए जब तक अन्यथा निर्दिष्ट न किया जाए, सब कुछ हमारे स्वागत योग्य दृश्य में होना चाहिए।

अनुवाद तार में पैरामीटर्स

उदाहरण के लिए, केवल एक सामान्य संदेश प्रदर्शित करने के बजाय अपने काल्पनिक उपयोगकर्ता (अमांडा) को नमस्ते कहें:

{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}

ध्यान दें कि हमने लोअरकेस में पहले अक्षर के साथ नाम का उपयोग किया है, लेकिन अपरकेस में पहले अक्षर के साथ प्लेसहोल्डर। इस तरह, Laravel आपको वास्तविक शब्द को स्वचालित रूप से बड़ा करने में मदद कर सकता है। यह तब होगा जब प्लेसहोल्डर अपरकेस अक्षर से शुरू होता है, उदाहरण के लिए, :Name"कैरोलीन" या पूरी तरह से पूंजीकृत शब्द का उत्पादन करता है,  :NAME, "कैरोलाइन" का उत्पादन करता है।

हम अपनी अनुवाद फ़ाइलों को भी अपडेट करते हैं resources/lang/fr.jsonresources/lang/it.json , क्योंकि इस समय हम कहीं भी केवल अंग्रेज़ी संस्करण ही देखेंगे क्योंकि अनुवाद कुंजियाँ अनुवादों से मेल नहीं खाती हैं।

फ्रेंच:

{

   "Welcome to our website, :Name": "Bienvenue sur notre site, :Name"

}

इतालवी:

{

   "Welcome to our website, :Name": "Benvenuto sul nostro sito web, :Name"

}

बहुवचन

कार्रवाई में बहुवचन देखने के लिए, आइए टेक्स्ट का एक नया अनुच्छेद जोड़ें। 

बहुवचन करने के लिए, आपको फ़ंक्शन का उपयोग करना चाहिए trans_choice के बजाय __(), उदाहरण के लिए:

{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
<br>
{{ trans_choice('There is one apple|There are many apples', 2) }}

जैसा कि आप देख सकते हैं, बहुवचन रूपों को एक से अलग किया जाता है |.

अब, क्या होगा अगर हमें कई बहुवचन रूपों की आवश्यकता है? 

यह भी संभव है:

{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24) }}

इस मामले में, हम संख्याओं की अनुमति देते हैं 01, और यहां ये 219, और अंत में 20 के बाद से। बेशक, आप जितने चाहें उतने नियम जोड़ सकते हैं।

तो क्या हुआ अगर हम प्लेसहोल्डर्स को हमारे बहुवचन रूपों में चाहते हैं? 

{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24, ['form' => 'is']) }}

यदि आवश्यक हो तो प्लेसहोल्डर का उपयोग करके हम `trans_choice` में पास की गई गणना का भी उपयोग कर सकते हैं :count विशेष:

{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 1, ['form' => 'is']) }}

अंत में, अपनी अनुवाद फ़ाइलों को मूल अनुवाद में किए गए किसी भी बदलाव से अपडेट करना न भूलें।

इतालवी:

{
  "Welcome to our website, :Name": "Benvenuto nel nostro sito, :Name",
  "{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples": "{0} Nessuna mela|{1} C'è:count mela|[2,19] Ci sono :count mele"
}

फ्रेंच:

{    
  "Welcome to our website, :Name": "Bienvenue sur notre site, :Name",
  "{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples": "{0} Il n'y a pas de pommes|{1} Il n'y :form :count pomme|[2,19] Il y :form :count pommes"
}

Laravel में स्थानीय तारीखों के साथ कार्य करना

तिथियों का पता लगाने के लिए, हम की शक्ति का उपयोग करेंगे कार्बन , जो डिफ़ॉल्ट रूप से लारवेल के साथ आता हैdefiनीता. इसकी जाँच पड़ताल करो कार्बन प्रलेखन ; आप बहुत सी दिलचस्प चीजें कर सकते हैं। उदाहरण के लिए, हम अपने लोकेल को दिनांक और समय के नियमों के साथ सेट कर सकते हैं।

हमारे सरल उदाहरण के लिए, हम चयनित भाषा के लिए स्थानीयकृत वर्तमान तिथि दिखाएंगे। हमारे में routes/web.php, हम स्वागत पृष्ठ पथ को अपडेट करते हैं और स्थानीयकृत दिनांक संदेश को हमारे पास भेजते हैं view स्वागत:

<?php
Route::get('/', function () {
    $today = \Carbon\Carbon::now()
        ->settings(
            [
                'locale' => app()->getLocale(),
            ]
        );

    // LL is macro placeholder for MMMM D, YYYY (you could write same as dddd, MMMM D, YYYY)
    $dateMessage = $today->isoFormat('dddd, LL');

    return view('welcome', [
        'date_message' => $dateMessage
    ]);
});

आइए अपडेट करते हैं resources/views/welcome.blade.php तिथि प्रदर्शन जोड़ना, जैसे:

{{ __('Welcome to our website, :Name', ['name' => 'amanda']) }}
<br>
{{ trans_choice('{0} There :form :count apples|{1} There :form just :count apple|[2,19] There :form :count apples', 1, ['form' => 'is']) }}
<br>
{{ $date_message }}

के होम पेज पर भाषा बदलने की कोशिश कर रहा है localhost, हम देखेंगे कि दिनांक अब स्थानीयकृत हैं, उदाहरण के लिए:

NumberFormatter के साथ संख्याओं और मुद्राओं को फ़ॉर्मेट करना

विभिन्न देशों में, लोग संख्याओं को प्रदर्शित करने के लिए विभिन्न स्वरूपों का उपयोग करते हैं, उदाहरण के लिए:

  • युनाइटेड स्टेट्स → 123.123,12
  • फ़्रांस → 123 123,12

इसलिए, अपने Laravel ऐप में इन अंतरों को दर्शाने के लिए, आप उपयोग कर सकते हैं नंबरफॉर्मेटर नेल मोडो सेगुएंटे:

<?php
$num = NumberFormatter::create('en_US', NumberFormatter::DECIMAL);

$num2 = NumberFormatter::create('fr', NumberFormatter::DECIMAL);

आप किसी विशेष भाषा में संख्या भी लिख सकते हैं और "एक सौ तेईस हजार एक सौ तेईस बिंदु एक दो" जैसा कुछ प्रदर्शित कर सकते हैं:

<?php
$num = NumberFormatter::create('en_US', NumberFormatter::SPELLOUT);
$num2 = NumberFormatter::create('fr', NumberFormatter::SPELLOUT);

इसके अलावा, NumberFormatter आपको आसानी से मुद्राओं का पता लगाने की अनुमति देता है, उदाहरण के लिए:

<?php
$currency1 = NumberFormatter::create('fr', NumberFormatter::CURRENCY);
$currency2 = NumberFormatter::create('en_US', NumberFormatter::CURRENCY);

के लिए fr आप यूरो देखेंगे, जबकि के लिए en_US मुद्रा अमेरिकी डॉलर में होगी।

Ercole Palmeri

नवाचार समाचार पत्र
नवाचार पर सबसे महत्वपूर्ण समाचार देखना न भूलें। उन्हें ईमेल द्वारा प्राप्त करने के लिए साइन अप करें।

हाल के लेख

बच्चों के लिए रंग भरने वाले पन्नों के लाभ - सभी उम्र के लोगों के लिए जादू की दुनिया

रंग भरने के माध्यम से बढ़िया मोटर कौशल विकसित करना बच्चों को लेखन जैसे अधिक जटिल कौशल के लिए तैयार करता है। रंग भरना…

2 मई 2024

भविष्य यहाँ है: कैसे शिपिंग उद्योग वैश्विक अर्थव्यवस्था में क्रांति ला रहा है

नौसैनिक क्षेत्र एक सच्ची वैश्विक आर्थिक शक्ति है, जो 150 अरब के बाज़ार की ओर बढ़ चुका है...

1 मई 2024

आर्टिफिशियल इंटेलिजेंस द्वारा संसाधित सूचना के प्रवाह को विनियमित करने के लिए प्रकाशक और ओपनएआई ने समझौते पर हस्ताक्षर किए

पिछले सोमवार को, फाइनेंशियल टाइम्स ने OpenAI के साथ एक समझौते की घोषणा की। एफटी अपनी विश्व स्तरीय पत्रकारिता को लाइसेंस देता है...

अप्रैल 30 2024

ऑनलाइन भुगतान: यहां बताया गया है कि स्ट्रीमिंग सेवाएं आपको हमेशा के लिए भुगतान कैसे कराती हैं

लाखों लोग स्ट्रीमिंग सेवाओं के लिए मासिक सदस्यता शुल्क का भुगतान करते हैं। यह आम राय है कि आप...

अप्रैल 29 2024

अपनी भाषा में इनोवेशन पढ़ें

नवाचार समाचार पत्र
नवाचार पर सबसे महत्वपूर्ण समाचार देखना न भूलें। उन्हें ईमेल द्वारा प्राप्त करने के लिए साइन अप करें।

Seguici