logologo
शुरू करें
मार्गदर्शिका
विकास
प्लगइन
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
शुरू करें
मार्गदर्शिका
विकास
प्लगइन
API
logologo

क्विक स्टार्ट

Plugin डेवलपमेंट अवलोकन
अपना पहला Plugin लिखें
प्रोजेक्ट डायरेक्टरी स्ट्रक्चर

सर्वर-साइड डेवलपमेंट

अवलोकन
Plugin
कलेक्शन डेटा टेबल
डेटाबेस ऑपरेशन
DataSourceManager डेटा सोर्स प्रबंधन
ResourceManager रिसोर्स प्रबंधन
ACL परमिशन कंट्रोल
Middleware
Cache
Event
Context रिक्वेस्ट कॉन्टेक्स्ट
माइग्रेशन अपग्रेड स्क्रिप्ट
Logger
Telemetry
I18n इंटरनेशनलाइजेशन
Command लाइन
CronJobManager शेड्यूल्ड टास्क प्रबंधन
Test

क्लाइंट-साइड डेवलपमेंट

अवलोकन
Plugin
Context
Router
ACL परमिशन कंट्रोल
DataSourceManager डेटा सोर्स प्रबंधन
Resource
Request
Styles & Themes
Logger
I18n इंटरनेशनलाइजेशन
Test

अन्य

Plugin अपग्रेड गाइड
भाषा सूची
डिपेंडेंसी प्रबंधन
बिल्ड
Previous PageTelemetry
Next PageCommand लाइन
TIP

यह दस्तावेज़ AI द्वारा अनुवादित किया गया है। किसी भी अशुद्धि के लिए, कृपया अंग्रेजी संस्करण देखें

#I18n अंतर्राष्ट्रीयकरण

NocoBase प्लगइन में, फ्रंटएंड और बैकएंड दोनों के लिए बहुभाषी अंतर्राष्ट्रीयकरण (i18n) का समर्थन किया जाता है। एक एकीकृत तंत्र के माध्यम से, आप प्लगइन में आसानी से बहुभाषी सामग्री लागू कर सकते हैं।

#बहुभाषी फ़ाइल प्रबंधन

प्लगइन की बहुभाषी फ़ाइलें src/locale डायरेक्टरी में एक समान रूप से संग्रहीत की जाती हैं। यह सलाह दी जाती है कि उन्हें भाषा फ़ाइल के अनुसार नाम दें, उदाहरण के लिए:

|- /plugin-hello
  |- /src
    |- /locale
      |- en-US.json   # अंग्रेजी भाषा
      |- zh-CN.json   # चीनी भाषा

प्रत्येक भाषा फ़ाइल एक JSON ऑब्जेक्ट निर्यात करती है, जिसमें उस भाषा के लिए सभी अनुवाद प्रविष्टियाँ शामिल होती हैं, उदाहरण के लिए:

// zh-CN.json
{
  "Hello": "你好",
  "World": "世界",
  "Enter your name": "请输入你的名字",
  "Your name is {{name}}": "你的名字是 {{name}}"
}
// en-US.json
{
  "Hello": "Hello",
  "World": "World",
  "Enter your name": "Enter your name",
  "Your name is {{name}}": "Your name is {{name}}"
}

पहली बार भाषा फ़ाइलें जोड़ते समय, उन्हें प्रभावी होने के लिए आपको एप्लिकेशन को रीस्टार्ट करना होगा। आप API के माध्यम से अनुवाद प्रविष्टियों को सत्यापित कर सकते हैं: http://localhost:13000/api/app:getLang?locale=zh-CN

#ग्लोबल i18n इंस्टेंस

app.i18n ग्लोबल i18n इंस्टेंस है, जो CLI या प्लगइन के ग्लोबल परिदृश्यों के लिए उपयुक्त है। इसे कमांड-लाइन इंटरैक्शन को लागू करने के लिए inquirer के साथ जोड़ा जा सकता है:

import select from '@inquirer/select';
import input from '@inquirer/input';

export class PluginSampleI18nServer extends Plugin {
  load() {
    this.app.command('test-i18n').action(async () => {
      const answer1 = await select({
        message: 'Select a language',
        choices: [
          { name: '中文', value: 'zh-CN' },
          { name: 'English', value: 'en-US' }
        ]
      });

      await this.app.changeLanguage(answer1);

      const answer2 = await input({
        message: app.i18n.t('Enter your name')
      });

      console.log(app.i18n.t('Your name is {{name}}', { name: answer2 }));
    });
  }
}

app.i18n.t(text, options) का उपयोग टेक्स्ट का अनुवाद करने के लिए किया जाता है, और यह टेम्पलेट वैरिएबल का समर्थन करता है।

#रिक्वेस्ट कॉन्टेक्स्ट i18n

प्रत्येक रिक्वेस्ट का ctx.i18n ग्लोबल i18n इंस्टेंस का एक क्लोन है, जो क्लाइंट की भाषा के आधार पर बहुभाषी जानकारी के साथ स्वतंत्र रूप से प्रतिक्रिया देता है।

क्लाइंट भाषा सेट करें

  • क्वेरी स्ट्रिंग:
GET /?locale=en-US HTTP/1.1
Host: localhost:13000
  • रिक्वेस्ट हेडर (अनुशंसित):
GET / HTTP/1.1
Host: localhost:13000
X-Locale: en-US

मिडलवेयर में उपयोग करें

export class PluginSampleI18nServer extends Plugin {
  load() {
    this.app.use(async (ctx, next) => {
      if (ctx.path === '/api/test-i18n') {
        ctx.body = ctx.t('Hello', { ns: '@my-project/plugin-hello' });
      }
      await next();
    });
  }
}

http://localhost:13000/api/test-i18n?locale=zh-CN पर एक्सेस करने पर 你好 (नमस्ते) वापस मिलेगा।

#प्लगइन आंतरिक i18n

प्लगइन के भीतर सीधे plugin.t(key, options) का उपयोग अनुवाद प्राप्त करने के लिए किया जा सकता है:

export class PluginSampleI18nServer extends Plugin {
  load() {
    this.app.use(async (ctx, next) => {
      if (ctx.path === '/api/plugin-i18n') {
        ctx.body = this.plugin.t('Hello');
      }
      await next();
    });
  }
}

plugin.t(text) ctx.t(text, { ns }) के बराबर है।

#संबंधित API

  • app.i18n
  • app.t(text, options)
  • ctx.i18n
  • ctx.t(text, options)
  • plugin.t()
  • tExpr(text, options)