285 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
			
		
		
	
	
			285 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
# @coze-arch/i18n
 | 
						|
 | 
						|
A comprehensive internationalization (i18n) solution for the Coze platform, providing unified text localization and language management across all applications in the monorepo.
 | 
						|
 | 
						|
## Features
 | 
						|
 | 
						|
- **🌍 Multi-language Support**: Built-in support for English and Chinese (Simplified) with easy extensibility
 | 
						|
- **🎯 Type-safe Translations**: Full TypeScript support with auto-generated types for translation keys
 | 
						|
- **⚡ Multiple Integration Modes**: Support for both Eden.js projects and standalone applications
 | 
						|
- **🔌 Plugin Architecture**: Extensible plugin system with language detection and ICU formatting
 | 
						|
- **📱 React Integration**: Built-in React provider and context for seamless component integration
 | 
						|
- **🛡️ Fallback Handling**: Robust fallback mechanisms for missing translations
 | 
						|
- **🎨 Design System Integration**: Seamless integration with Coze Design components
 | 
						|
 | 
						|
## Get Started
 | 
						|
 | 
						|
### Installation
 | 
						|
 | 
						|
Add the package to your project:
 | 
						|
 | 
						|
```json
 | 
						|
{
 | 
						|
  "dependencies": {
 | 
						|
    "@coze-arch/i18n": "workspace:*"
 | 
						|
  }
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
Then run:
 | 
						|
 | 
						|
```bash
 | 
						|
rush update
 | 
						|
```
 | 
						|
 | 
						|
### Basic Usage
 | 
						|
 | 
						|
#### For Eden.js Projects
 | 
						|
 | 
						|
Configure in your `edenx.config.ts`:
 | 
						|
 | 
						|
```typescript
 | 
						|
import { locale } from '@coze-arch/i18n/locales';
 | 
						|
 | 
						|
export default {
 | 
						|
  intl: {
 | 
						|
    mode: 'offline',
 | 
						|
    clientOptions: {
 | 
						|
      namespace: 'i18n',
 | 
						|
    },
 | 
						|
    intlOptions: {
 | 
						|
      fallbackLng: 'en',
 | 
						|
      ns: 'i18n',
 | 
						|
      lng: 'en',
 | 
						|
      resources: locale,
 | 
						|
    },
 | 
						|
  },
 | 
						|
};
 | 
						|
```
 | 
						|
 | 
						|
Use in your components:
 | 
						|
 | 
						|
```typescript
 | 
						|
import { I18n } from '@coze-arch/i18n';
 | 
						|
 | 
						|
function MyComponent() {
 | 
						|
  const title = I18n.t('common.title');
 | 
						|
  const greeting = I18n.t('common.greeting', { name: 'User' });
 | 
						|
 | 
						|
  return <h1>{title}</h1>;
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
#### For Standalone Applications
 | 
						|
 | 
						|
Initialize before rendering:
 | 
						|
 | 
						|
```typescript
 | 
						|
import { initI18nInstance, I18n } from '@coze-arch/i18n/raw';
 | 
						|
import { createRoot } from 'react-dom/client';
 | 
						|
 | 
						|
initI18nInstance({
 | 
						|
  lng: 'en',
 | 
						|
  ns: 'i18n'
 | 
						|
}).then(() => {
 | 
						|
  const root = createRoot(document.getElementById('root'));
 | 
						|
  root.render(<App />);
 | 
						|
});
 | 
						|
```
 | 
						|
 | 
						|
Use translations:
 | 
						|
 | 
						|
```typescript
 | 
						|
import { I18n } from '@coze-arch/i18n/raw';
 | 
						|
 | 
						|
function App() {
 | 
						|
  const message = I18n.t('welcome.message');
 | 
						|
  return <div>{message}</div>;
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
#### React Provider Integration
 | 
						|
 | 
						|
```typescript
 | 
						|
import { I18nProvider } from '@coze-arch/i18n/i18n-provider';
 | 
						|
import { I18n } from '@coze-arch/i18n';
 | 
						|
 | 
						|
function App() {
 | 
						|
  return (
 | 
						|
    <I18nProvider i18n={I18n}>
 | 
						|
      <YourComponents />
 | 
						|
    </I18nProvider>
 | 
						|
  );
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
## API Reference
 | 
						|
 | 
						|
### Core I18n Instance
 | 
						|
 | 
						|
#### `I18n.t(key, options?, fallback?)`
 | 
						|
 | 
						|
Translate a text key with optional interpolation and fallback.
 | 
						|
 | 
						|
```typescript
 | 
						|
// Basic translation
 | 
						|
I18n.t('common.save')
 | 
						|
 | 
						|
// With interpolation
 | 
						|
I18n.t('user.greeting', { name: 'John' })
 | 
						|
 | 
						|
// With fallback
 | 
						|
I18n.t('missing.key', {}, 'Default text')
 | 
						|
```
 | 
						|
 | 
						|
#### `I18n.setLang(language, callback?)`
 | 
						|
 | 
						|
Change the current language.
 | 
						|
 | 
						|
```typescript
 | 
						|
I18n.setLang('zh-CN', () => {
 | 
						|
  console.log('Language changed');
 | 
						|
});
 | 
						|
```
 | 
						|
 | 
						|
#### `I18n.setLangWithPromise(language)`
 | 
						|
 | 
						|
Change language with Promise-based API.
 | 
						|
 | 
						|
```typescript
 | 
						|
await I18n.setLangWithPromise('en');
 | 
						|
```
 | 
						|
 | 
						|
#### `I18n.language`
 | 
						|
 | 
						|
Get the current language.
 | 
						|
 | 
						|
```typescript
 | 
						|
const currentLang = I18n.language; // 'en' | 'zh-CN'
 | 
						|
```
 | 
						|
 | 
						|
#### `I18n.getLanguages()`
 | 
						|
 | 
						|
Get available languages.
 | 
						|
 | 
						|
```typescript
 | 
						|
const languages = I18n.getLanguages(); // ['zh-CN', 'zh', 'en-US']
 | 
						|
```
 | 
						|
 | 
						|
#### `I18n.dir()`
 | 
						|
 | 
						|
Get text direction for current language.
 | 
						|
 | 
						|
```typescript
 | 
						|
const direction = I18n.dir(); // 'ltr' | 'rtl'
 | 
						|
```
 | 
						|
 | 
						|
### Initialization Functions
 | 
						|
 | 
						|
#### `initI18nInstance(config?)`
 | 
						|
 | 
						|
Initialize i18n for standalone applications.
 | 
						|
 | 
						|
```typescript
 | 
						|
interface I18nConfig {
 | 
						|
  lng: 'en' | 'zh-CN';
 | 
						|
  ns?: string;
 | 
						|
  // Additional i18next options
 | 
						|
}
 | 
						|
 | 
						|
await initI18nInstance({
 | 
						|
  lng: 'en',
 | 
						|
  ns: 'i18n'
 | 
						|
});
 | 
						|
```
 | 
						|
 | 
						|
### React Components
 | 
						|
 | 
						|
#### `I18nProvider`
 | 
						|
 | 
						|
React context provider for i18n integration.
 | 
						|
 | 
						|
```typescript
 | 
						|
interface I18nProviderProps {
 | 
						|
  children?: ReactNode;
 | 
						|
  i18n: Intl;
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
### Type Utilities
 | 
						|
 | 
						|
#### `I18nKeysNoOptionsType`
 | 
						|
 | 
						|
Type for translation keys that don't require interpolation options.
 | 
						|
 | 
						|
#### `I18nKeysHasOptionsType`
 | 
						|
 | 
						|
Type for translation keys that require interpolation options.
 | 
						|
 | 
						|
## Development
 | 
						|
 | 
						|
### Updating Translations
 | 
						|
 | 
						|
Pull the latest translations from the remote source:
 | 
						|
 | 
						|
```bash
 | 
						|
rush pull-i18n
 | 
						|
```
 | 
						|
 | 
						|
This will update the locale files in `src/resource/locales/`.
 | 
						|
 | 
						|
### Adding New Locale Keys
 | 
						|
 | 
						|
1. Add new keys to the remote translation system
 | 
						|
2. Run `rush pull-i18n` to sync locally
 | 
						|
3. The TypeScript types will be automatically updated
 | 
						|
 | 
						|
### Testing
 | 
						|
 | 
						|
Run the test suite:
 | 
						|
 | 
						|
```bash
 | 
						|
rushx test
 | 
						|
```
 | 
						|
 | 
						|
Run tests with coverage:
 | 
						|
 | 
						|
```bash
 | 
						|
rushx test:cov
 | 
						|
```
 | 
						|
 | 
						|
### Project Structure
 | 
						|
 | 
						|
```
 | 
						|
src/
 | 
						|
├── index.ts              # Main export for Eden.js projects
 | 
						|
├── raw/                  # Standalone application exports
 | 
						|
├── i18n-provider/        # React context provider
 | 
						|
├── intl/                 # Core i18n implementation
 | 
						|
├── resource/             # Locale data and resources
 | 
						|
└── global.d.ts          # Global type definitions
 | 
						|
```
 | 
						|
 | 
						|
## Dependencies
 | 
						|
 | 
						|
### Core Dependencies
 | 
						|
 | 
						|
- **i18next**: Core internationalization framework
 | 
						|
- **i18next-browser-languagedetector**: Automatic language detection in browsers
 | 
						|
- **i18next-icu**: ICU message formatting support
 | 
						|
- **@coze-studio/studio-i18n-resource-adapter**: Internal resource adapter for locale data
 | 
						|
- **@coze-arch/coze-design**: Design system integration
 | 
						|
 | 
						|
### Peer Dependencies
 | 
						|
 | 
						|
- **react**: React framework support
 | 
						|
- **react-dom**: React DOM rendering
 | 
						|
 | 
						|
## License
 | 
						|
 | 
						|
Internal package - ByteDance Ltd.
 | 
						|
 | 
						|
---
 | 
						|
 | 
						|
For questions or support, please contact the Coze Architecture team.
 |