@herongxhr/sayhi
Version:
A framework-agnostic greeting generator based on time, date, and weekday with multi-language support
146 lines (112 loc) • 4.4 kB
Markdown
# Greeting Generator
A lightweight, framework-agnostic TypeScript library to generate dynamic greetings based on time, date, and weekday. Supports multi-language configurations and customizable time slots.
## Installation
```bash
npm install greeting-generator
```
## Usage
### Basic Example
```javascript
import { GreetingGenerator } from "greeting-generator";
// Initialize with default settings (Chinese, 'zh-CN')
const greeter = new GreetingGenerator();
// Generate a greeting based on the current time, date, and weekday
console.log(greeter.generateGreeting()); // e.g., "早上好" (if morning)
// Switch language to English
greeter.setLocale("en-US");
console.log(greeter.generateGreeting()); // e.g., "Good morning" (if morning)
```
### Custom Configuration
You can customize the language and time slots when creating an instance:
```javascript
import { GreetingGenerator } from 'greeting-generator';
import { type Composer } from 'vue-i18n'
import i18n from '@/locales'
const greeter = new GreetingGenerator({
locale: 'zh-CN',
languages: {
'ja-JP': {
timeslots: {
morning: 'おはよう',
afternoon: 'こんにちは',
evening: 'こんばんは',
night: 'おやすみ',
},
dates: {
'01-01': '新年おめでとう',
},
weekdays: {
0: '日曜日',
},
},
'zh-CN': {
weekdays: { 0: '', 1: '', 2: '', 3: '', 4: '', 5: '', 6: '' },
},
},
})
const greeting = computed(() => {
const locale = (i18n.global as Composer).locale.value
greeter.setLocale(locale) // 切换语言
return greeter.generateGreeting()
})
```
### Features
- **Dynamic Greetings**: Generates greetings based on time of day (e.g., "Good morning"), special dates (e.g., "Happy New Year"), and weekdays (e.g., "Happy Monday").
- **Multi-Language Support**: Comes with default languages (e.g., 'zh-CN', 'en-US') and allows custom language definitions.
- **Customizable Time Slots**: Define your own time ranges for morning, afternoon, evening, and night.
- **Framework-Agnostic**: Works in any JavaScript environment (Node.js, browsers, etc.).
## Configuration
### `GreetingGenerator(options)`
Constructor options:
- `options.locale`: Initial language code (default: `'zh-CN'`). Must match a key in `languages`.
- `options.timeSlots`: Custom time slot definitions (default: morning 6-12, afternoon 12-18, evening 18-22, night 22-6).
- Format: `{ [key: string]: { start: number; end: number } }`.
- `options.languages`: Custom language data to override or extend defaults.
- Format: `{ [locale: string]: { timeslots: Record<string, string>, dates?: Record<string, string>, weekdays?: Record<number, string> } }`.
### Default Language Pack
The library includes default greetings for `zh-CN` and `en-US`. You can extend or override them via the `languages` option. Example structure from `languages.ts`:
```javascript
{
'zh-CN': {
timeslots: {
morning: '早上好',
afternoon: '下午好',
evening: '晚上好',
night: '晚安'
},
dates: {
'01-01': '新年快乐'
},
weekdays: {
0: '星期日'
}
},
'en-US': {
timeslots: {
morning: 'Good morning',
afternoon: 'Good afternoon',
evening: 'Good evening',
night: 'Good night'
},
dates: {
'01-01': 'Happy New Year'
},
weekdays: {
0: 'Sunday'
}
}
}
```
## API
### Methods
- **`generateGreeting(): string`**
Generates a greeting based on the current date, weekday, and time. Combines date, weekday, and time slot parts (if defined), joined by spaces.
- Example: `"新年快乐 星期日 早上好"` (if it's January 1st, Sunday, morning).
- **`setLocale(locale: string): void`**
Switches to a different language. Throws an error if the locale is not found in the language pack.
- Example: `greeter.setLocale('en-US')`.
## Notes
- The greeting consists of three parts: date (e.g., "Happy New Year"), weekday (e.g., "Sunday"), and time slot (e.g., "Good morning"). Empty parts are omitted.
- Time slots are evaluated based on a 24-hour clock, with special handling for the "night" slot (spanning midnight).
## License
MIT