Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.zopio.dev/llms.txt

Use this file to discover all available pages before exploring further.

View Internationalization

The View package includes comprehensive internationalization support, allowing you to create multilingual UI components.

Overview

The View package’s internationalization features include:
  • Integration with next-intl for translations
  • Support for multiple locales (English, Turkish, Spanish, German)
  • Translation files for all view components
  • Hooks for accessing translations in React components
  • Automatic locale detection and switching

Configuration

The View package uses the same internationalization configuration as the rest of the framework:
// Default configuration
const i18nConfig = {
  defaultLocale: 'en',
  supportedLocales: ['en', 'tr', 'es', 'de']
};

Translation Files

Translation files are stored in both the dictionaries/ and locales/ directories:
view/
  ├── locales/
  │   ├── en.json
  │   ├── tr.json
  │   ├── es.json
  │   └── de.json
Each locale file contains translations for view components:
// en.json
{
  "view": {
    "common": {
      "title": "View",
      "description": "Schema-driven UI components",
      "submit": "Submit",
      "cancel": "Cancel",
      "save": "Save",
      "delete": "Delete",
      "edit": "Edit",
      "view": "View",
      "search": "Search",
      "filter": "Filter",
      "sort": "Sort",
      "page": "Page",
      "of": "of",
      "loading": "Loading...",
      "error": "Error",
      "noData": "No data available"
    },
    "form": {
      "required": "This field is required",
      "invalid": "This field is invalid",
      "success": "Form submitted successfully",
      "error": "An error occurred while submitting the form"
    },
    "table": {
      "rowsPerPage": "Rows per page",
      "of": "of",
      "noResults": "No results found"
    },
    "detail": {
      "notFound": "Record not found"
    },
    "import": {
      "selectFile": "Select file",
      "dragAndDrop": "or drag and drop",
      "fileSelected": "File selected",
      "startImport": "Start import",
      "importing": "Importing...",
      "success": "Import successful",
      "error": "Import failed"
    },
    "export": {
      "exportAs": "Export as",
      "exporting": "Exporting...",
      "success": "Export successful",
      "error": "Export failed"
    },
    "auditLog": {
      "user": "User",
      "action": "Action",
      "timestamp": "Timestamp",
      "details": "Details",
      "noLogs": "No audit logs found"
    },
    "designer": {
      "addField": "Add field",
      "editField": "Edit field",
      "deleteField": "Delete field",
      "fieldProperties": "Field properties",
      "preview": "Preview",
      "code": "Code",
      "save": "Save schema",
      "load": "Load schema",
      "export": "Export schema",
      "import": "Import schema"
    }
  }
}

API Reference

useViewTranslations

Hook for accessing translations in React components.
function useViewTranslations(namespace: string = 'view'): (key: string, params?: Record<string, unknown>) => string;

setViewLocale

Function for setting the current locale.
function setViewLocale(locale: string): void;

getViewLocale

Function for getting the current locale.
function getViewLocale(): string;

withViewTranslations

Higher-order component for providing translations to components.
function withViewTranslations<P>(
  Component: React.ComponentType<P & { t: (key: string, params?: Record<string, unknown>) => string }>,
  namespace: string = 'view'
): React.ComponentType<P>;

Examples

Using useViewTranslations in a Component

import { useViewTranslations } from '@repo/view';

function MyComponent() {
  const t = useViewTranslations();
  
  return (
    <div>
      <h1>{t('common.title')}</h1>
      <p>{t('common.description')}</p>
      <button>{t('common.submit')}</button>
    </div>
  );
}

Using Translations with Parameters

import { useViewTranslations } from '@repo/view';

function Pagination({ page, totalPages }) {
  const t = useViewTranslations();
  
  return (
    <div>
      {t('table.pagination', { page, totalPages })}
    </div>
  );
}

Setting the Locale

import { setViewLocale, getViewLocale } from '@repo/view';

function LanguageSwitcher() {
  const currentLocale = getViewLocale();
  
  const handleLocaleChange = (locale) => {
    setViewLocale(locale);
    window.location.reload();
  };
  
  return (
    <div>
      <button onClick={() => handleLocaleChange('en')} disabled={currentLocale === 'en'}>
        English
      </button>
      <button onClick={() => handleLocaleChange('tr')} disabled={currentLocale === 'tr'}>
        Türkçe
      </button>
      <button onClick={() => handleLocaleChange('es')} disabled={currentLocale === 'es'}>
        Español
      </button>
      <button onClick={() => handleLocaleChange('de')} disabled={currentLocale === 'de'}>
        Deutsch
      </button>
    </div>
  );
}

Using withViewTranslations HOC

import { withViewTranslations } from '@repo/view';

function MyComponent({ t }) {
  return (
    <div>
      <h1>{t('common.title')}</h1>
      <p>{t('common.description')}</p>
      <button>{t('common.submit')}</button>
    </div>
  );
}

export default withViewTranslations(MyComponent);

Integration with Next.js

The View package integrates with Next.js internationalization using next-international and next-intl:
// app/[locale]/layout.tsx
import { NextIntlClientProvider } from 'next-intl';
import { getMessages } from 'next-intl/server';

export default async function LocaleLayout({
  children,
  params: { locale }
}) {
  const messages = await getMessages();
  
  return (
    <NextIntlClientProvider locale={locale} messages={messages}>
      {children}
    </NextIntlClientProvider>
  );
}

Adding New Translations

To add translations for a new key:
  1. Add the key to all locale files (en.json, tr.json, es.json, de.json)
  2. Use the key in your components with useViewTranslations
// Add to locale files
// en.json
{
  "view": {
    "myFeature": {
      "title": "My Feature",
      "description": "This is my new feature"
    }
  }
}

// Use in component
import { useViewTranslations } from '@repo/view';

function MyFeature() {
  const t = useViewTranslations();
  
  return (
    <div>
      <h1>{t('myFeature.title')}</h1>
      <p>{t('myFeature.description')}</p>
    </div>
  );
}

Adding Support for New Languages

To add support for a new language:
  1. Create a new locale file in the locales/ directory (e.g., fr.json)
  2. Add the locale to the supported locales in the configuration
  3. Translate all keys from the English locale file
// fr.json
{
  "view": {
    "common": {
      "title": "Vue",
      "description": "Composants d'interface utilisateur basés sur des schémas",
      "submit": "Soumettre",
      "cancel": "Annuler",
      "save": "Enregistrer",
      "delete": "Supprimer",
      "edit": "Modifier",
      "view": "Voir",
      "search": "Rechercher",
      "filter": "Filtrer",
      "sort": "Trier",
      "page": "Page",
      "of": "sur",
      "loading": "Chargement...",
      "error": "Erreur",
      "noData": "Aucune donnée disponible"
    },
    // ... translate all other keys
  }
}
Update the configuration to include the new locale:
// i18nConfig.ts
export const i18nConfig = {
  defaultLocale: 'en',
  supportedLocales: ['en', 'tr', 'es', 'de', 'fr']
};