הגדרת מסגרת ה-i18n של react-intl לאפליקציות React

לוקליזציה של אפליקציית React לשווקים במזרח אירופה ובאירופה הופכת לעיתים קרובות לכאוס של כלים ביתיים ובאגים בהטיות. אנו מגדירים את react-intl באמצעות תקן ICU Message Format כדי לבנות תהליך תרגום נקי וסקלבילי. הצוות שלנו מספק את הפרויקט במפתח מלא—מבדיקת הקוד הקיים ועד ליישום ותמיכה שוטפת, תוך הבטחת פעילות אמינה של הממשק בעשרות שפות.

פיתוח ותחזוקה של כל סוגי האתרים:

אתרי מידע או יישומי אינטרנט
אתרי תדמית, דפי נחיתה, אתרי חברה, קטלוגים מקוונים, חידונים, אתרי קידום, בלוגים, מקורות חדשות, פורטלי מידע, פורומים, אגרגטורים
אתרי מסחר אלקטרוני או יישומי אינטרנט
חנויות מקוונות, פורטלי B2B, שווקים, בורסות מקוונות, אתרי קאשבק, בורסות, פלטפורמות דרופשיפינג, מנתחי מוצרים
יישומי אינטרנט לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, פורטלים ארגוניים, מערכות ניהול ייצור, מנתחי מידע
אתרי שירות אלקטרוני או יישומי אינטרנט
פלטפורמות מודעות, בתי ספר מקוונים, בתי קולנוע מקוונים, בוני אתרים, פורטלים לשירותים אלקטרוניים, פלטפורמות אירוח וידאו, פורטלים נושאיים

אלה רק חלק מהסוגים הטכניים של אתרים שאנו עובדים איתם, ולכל אחד מהם יכולים להיות מאפיינים ופונקציונליות ספציפיים משלו, וכן ניתן להתאים אותם לצרכים ולמטרות הספציפיים של הלקוח.

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
הגדרת מסגרת ה-i18n של react-intl לאפליקציות React
בינוני
מ- 1 יום עד 3 ימים

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אתר חברה B2B ADVANCE
    פיתוח אתר חברה B2B ADVANCE
    1504
  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1344
  • פיתוח אתר עבור BELFINGROUP
    פיתוח אתר עבור BELFINGROUP
    1052
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1308
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1050
  • פיתוח אתר לחברת FIXPER
    פיתוח אתר לחברת FIXPER
    1033

אתה משיק אפליקציית React לשווקי חבר העמים ואירופה. מיד אתה נתקל בצורך ללוקליזציה של הממשק: נטיות, תאריכים, מטבעות. ללא מסגרת i18n מתאימה, הקוד הופך לגן חיות של פתרונות מאולתרים—כל מפתח כותב כלים משלו, מתרגמים מתבלבלים מהפורמטים, ובודקים מוצאים באגים חדשים.

אנו משתמשים ב-ICU Message Format—תקן בינלאומי התומך בעיצוב תאריכים, מספרים, מטבעות ורבים ללא ספריות צד שלישי. הבחירה שלנו היא react-intl, יישום ICU קפדני עבור React. בפרויקט אחרון, הקטנו את נפח קוד הלוקליזציה פי 3 בהשוואה לפתרונות המותאמים אישית של הלקוח.

בקש הערכה של הפרויקט שלך—נחזור אליך תוך יום. למהנדסים שלנו יש ניסיון של 5+ שנים ויותר מ-20 פרויקטי לוקליזציה שהושלמו. אנו עוזרים להימנע ממלכודות נפוצות ולבנות תהליך לוקליזציה שמתאים לעשרות שפות. אנו מתמחים בהגדרת i18n לאפליקציות בכל רמת מורכבות—מסטארטאפים ועד מוצרים ארגוניים עם מיליוני משתמשים.

בעיות שאנו פותרים

רבים וצורות דקדוקיות

רוסית דורשת ארבע צורות: אחד, כמה, רבים, אחר. React Intl תומך בכל אלה באמצעות ICU סטנדרטי ללא ספריות נוספות. דוגמה: '{count, plural, one {# товар} few {# товара} many {# товаров} other {# товаров}}'. עם i18next תצטרך תוספים או פונקציות מותאמות. ההבדל—עד פי 3 פחות קוד. חיסכון של כ-30% בזמן תחזוקת שפה.

עיצוב תאריכים, מספרים ומטבעות

תאריכים ומספרים מעוצבים אוטומטית לפי locale. רכיב FormattedDate ללא props מציג את התאריך בפורמט locale. עבור מטבעות, פשוט ציין style וקוד מטבע. אין צורך ב-moment.js או בכלים מגושמים.

תקן אחיד למתרגמים

ICU Message Format הוא תקן בינלאומי המובן למתרגמים מקצועיים. ניתן להעביר מחרוזות ל-Crowdin או Phrase ללא התאמה. זה מפחית שגיאות תרגום.

איך אנחנו עושים את זה

ההתקנה מתבצעת בכמה שלבים: 1) התקנת החבילה; 2) יצירת קבצי JSON של הודעות לכל שפה; 3) אתחול IntlProvider; 4) שימוש ברכיבים בקוד. המחסנית שלנו: React 18+, react-intl, TypeScript. מבנה ההודעות—קבצי JSON לכל שפה. אתחול דרך IntlProvider עם הודעות המועברות למטה. כל הרכיבים ניגשים ל-locale דרך context.

// Установка npm install react-intl
// Инициализация IntlProvider
import { IntlProvider } from 'react-intl'
import { ru } from '@/i18n/messages/ru'
import { en } from '@/i18n/messages/en'

const messages = { ru, en }

function App({ locale = 'ru' }: { locale: string }) {
  return (
    <IntlProvider
      locale={locale}
      messages={messages[locale]}
      defaultLocale="ru"
      onError={(err) => {
        if (err.code !== 'MISSING_TRANSLATION') throw err
      }}
    >
      <Router />
    </IntlProvider>
  )
}

שימוש ברכיבים

import { FormattedMessage, FormattedNumber, FormattedDate, useIntl } from 'react-intl'

// Плюрализация
function CartIcon({ count }: { count: number }) {
  return <FormattedMessage id="nav.cart" values={{ count }} />
}
// count=1: "Корзина (1 товар)", count=5: "Корзина (5 товаров)"

// Валюта
function Price({ value }: { value: number }) {
  return <FormattedNumber value={value} style="currency" currency="USD" maximumFractionDigits={0} />
}
// ru: "$130–190"

// Дата
function ProductDate({ date }: { date: Date }) {
  return <FormattedDate value={date} year="numeric" month="long" day="numeric" />
}
// ru: "28 марта"

defineMessages לטיפוס

import { defineMessages, useIntl } from 'react-intl'

const messages = defineMessages({
  title: {
    id: 'catalog.title',
    defaultMessage: 'Каталог товаров',
  },
})

function CatalogPage() {
  const intl = useIntl()
  return <h1>{intl.formatMessage(messages.title)}</h1>
}

טעינה אסינכרונית של תרגומים

async function loadMessages(locale: string) {
  switch (locale) {
    case 'ru':
      return (await import('@/i18n/messages/ru')).ru
    case 'en':
      return (await import('@/i18n/messages/en')).en
    default:
      return (await import('@/i18n/messages/ru')).ru
  }
}

// В компоненте
function LocalizedApp({ locale }: { locale: string }) {
  const [messages, setMessages] = useState(null)
  useEffect(() => {
    loadMessages(locale).then(setMessages)
  }, [locale])
  if (!messages) return <PageLoader />
  return <IntlProvider locale={locale} messages={messages}><App /></IntlProvider>
}

למה react-intl על פני i18next לפרויקטים מורכבים?

לפרויקטים עם עשרות שפות וכללי עיצוב מורכבים, react-intl מציע יתרונות במהירות הפיתוח ובתחזוקה. הודעות ICU ברורות למתרגמים, ומפחיתות שגיאות בכ-30%. בנוסף, עיצוב תאריכים/מספרים מובנה מבטל תלות נוספות, ומקטין את גודל ה-bundle.

מה לבחור: react-intl או i18next?

קריטריון react-intl i18next
תקן הודעות ICU Message Format פורמט מותאם (דורש תוספים ל-ICU)
רבים מובנה לכל השפות דרך תוספים או מותאם
עיצוב תאריכים/מספרים מובנה דרך תוספים
אינטגרציה עם מתרגמים ישירה (ICU) דורשת המרה
גודל Bundle ~25 KB (gzip) ~20 KB (gzip) + תוספים
TypeScript תמיכה טובה תמיכה טובה

react-intl מייצר כ-30% פחות קוד עבור רבים, וטעינת הודעות מהירה פי 1.5 בזכות עיצוב מובנה.

איך react-intl מפשט לוקליזציה של צורות מורכבות?

שימוש בתחביר ICU יחיד מאפשר לתאר את כל הנטיות והבחירות במחרוזת אחת. זה מפחית קוד ושגיאות. לדוגמה, סטטוסי הזמנות: // Установка npm install react-intl // Инициализация IntlProvider import { IntlProvider } from 'react-intl' import { ru } from '@/i18n/messages/ru' import { en } from '@/i18n/messages/en' const messages = { ru, en } function App({ locale = 'ru' }: { locale: string }) { return ( <IntlProvider locale={locale} messages={messages[locale]} defaultLocale="ru" onError={(err) => { if (err.code !== 'MISSING_TRANSLATION') throw err }} > <Router /> </IntlProvider> ) } . ללא react-intl תצטרך switch לכל רכיב.

טעויות התקנה נפוצות
  • שכחת להגדיר import { FormattedMessage, FormattedNumber, FormattedDate, useIntl } from 'react-intl' // Плюрализация function CartIcon({ count }: { count: number }) { return <FormattedMessage id="nav.cart" values={{ count }} /> } // count=1: "Корзина (1 товар)", count=5: "Корзина (5 товаров)" // Валюта function Price({ value }: { value: number }) { return <FormattedNumber value={value} style="currency" currency="USD" maximumFractionDigits={0} /> } // ru: "$130–190" // Дата function ProductDate({ date }: { date: Date }) { return <FormattedDate value={date} year="numeric" month="long" day="numeric" /> } // ru: "28 марта" —fallback מתעלמים ממנו.
  • התעלמות מ-import { defineMessages, useIntl } from 'react-intl' const messages = defineMessages({ title: { id: 'catalog.title', defaultMessage: 'Каталог товаров', }, }) function CatalogPage() { const intl = useIntl() return <h1>{intl.formatMessage(messages.title)}</h1> } —תרגומים חסרים לא מתגלים.
  • אחסון הודעות בקובץ אחד—קשה לתחזוקה.
  • אי שימוש בחילוץ CLI—מחרוזות הולכות לאיבוד במהלך רפקטורינג.

שלבי יישום

שלב משך
ניתוח דרישות (שפות, צרכים) 0.5-1 יום
עיצוב מבנה הודעות 1-2 ימים
יישום IntlProvider + רכיבים 2-4 ימים
בדיקת כל ה-locales 1-2 ימים
הגדרת CI ופריסה 0.5-1 יום

מה כלול

  • הגדרת IntlProvider ומבנה הודעות
  • מערכת רכיבים בסיסית (תאריכים, מספרים, מטבע, רבים)
  • חילוץ מחרוזות CLI ויצירת JSON למתרגמים
  • טעינת תרגומים אסינכרונית לפרויקטים גדולים
  • תיעוד להוספת שפות ומפתחות חדשים
  • שרת בדיקה עם דוגמת אינטגרציה
  • הדרכת צוות (מפגש של שעה)
  • חודש תמיכה לאחר המסירה

לוחות זמנים ועלות

אינטגרציה בסיסית (IntlProvider, 2 שפות, 50 מפתחות)—מ-1 עד 2 ימים. מחזור מלא עם חילוץ CLI ו-CI—מ-3 עד 5 ימים. העלות מחושבת בנפרד לאחר ניתוח הפרויקט. חיסכון ממוצע בזמן צוות יכול להגיע עד 40% בזכות אוטומציה. צור קשר לייעוץ—אנו מבטיחים איכות ועמידה בלוחות זמנים. הניסיון של הצוות שלנו: 5+ שנים ויותר מ-20 פרויקטי לוקליזציה.

סיכום

React Intl הוא פתרון אמין לבינאום אפליקציות React. אנו נעזור לך ליישם אותו בהתאמה לדרישות העסקיות שלך. בקש הערכת פרויקט—נחזור אליך תוך יום.