detectLanguage
خط غالب یک متن را از روی نسبت نویسهها تعیین میکند. آماری محض است: نه مدلی، نه واژهنامهای. از آن برای انشعاب میان «کدام توکنساز / کدام مدل ویژهٔ زبان / کدام اندازههای حروفچینی» استفاده کنید.
API
detectLanguage(text, sampleSize?)
| پارامتر | توضیح | نوع | پیشفرض |
|---|---|---|---|
text | متنی که بررسی میشود | string | الزامی |
sampleSize | تعداد نویسههای نمونه | number | 20000 |
مقدار 'zh' \| 'ja' \| 'ko' \| 'en' \| 'other' را برمیگرداند.
navigatorLanguage()
زبان رابط کاربری مرورگر، نگاشتهشده به همان دستهها. وقتی محتوایی برای بررسی نباشد، همین مقدار پیشفرض است. در SSR مقدار 'other' برمیگردد.
نمونه
js
import { detectLanguage, navigatorLanguage } from 'ranuts';
const lang = book.content ? detectLanguage(book.content) : navigatorLanguage();
const model = { zh: 'title-zh-v1', ja: 'title-ja-v1', ko: 'title-ko-v1', en: 'title-en-v1' }[lang];یادداشتها
- فقط ابتدای متن نمونهبرداری میشود. زبان یک نوشته از آغاز تا پایان یکدست است؛ پیمودن کتابی یکمیلیوننویسهای برای دانستن چیزی که همان بند نخست میگوید، اتلاف است.
- متن چینی با کمی انگلیسی، چینی میماند. برای آنکه حکم به انگلیسی برگردد، الفبای لاتین باید آشکارا غالب باشد (بیش از سه برابر). آمیختن انگلیسی در متن چینی رایج است؛ عکس آن نه.
- درون CJK، کانا و هانگول تکلیف را روشن میکنند. نویسههای هان بهتنهایی چینی را از ژاپنی جدا نمیکنند، چون ژاپنی هم کانجی مینویسد. اما کانا جدا میکند: ژاپنی برای هر حرف اضافه و هر صرف از کانا بهره میبرد و چینی اصلاً از آن استفاده نمیکند؛ در کرهای هانگول همین نقش را دارد. متنی که فقط هان دارد و هیچ خط نشانهای در آن نیست، چینی خوانده میشود — از آن سه، تنها چینی است که تماماً با هان نوشته میشود.
- یک عنوان نقلشده حکم را وارونه نمیکند. خط نشانه باید دستکم ۵ درصد نویسههای CJK را در بر بگیرد؛ پس صفحهای چینی که نام فیلمی ژاپنی را نقل کرده، چینی میماند.
- اینها خطهایی هستند که نام زبان بر تن دارند. اسپانیایی و پرتغالی و آلمانی همگی
'en'برمیگردانند: خط لاتین مشترک دارند، همان بخشبندی و همان شکست سطر را میخواهند، و هیچجای پاییندست این تابع نمیتواند آنها را از هم بازشناسد. سیریلیک، عربی، تایلندی و متنهای تماماً عددی در'other'میافتند. این دستهبندی درشتِ خط است، نه شناسایی زبان.