سلام رفقا
حتما دیدید که توی برخی از سایتها توی اون فیلدهایی که حتما به انگلیسی پر بشند نیازی به تغییر زبان کیبورد نیست! ینی حتی اگر زبان کیبورد کاربر فارسی هم باشه میتونید انگلیسی تایپ کنید.
من برای این کد توی اینترنت گشتم ولی چیزی پیدا نکردم اونایی هم که پیدا کردم بهینه نبودن و با ساختن یک ارایه از همه حروفها و replace کردنشون با حروف انگلیسی نوشته شده بودن که کلی خط میشد.
بنابراین تصمیم گرفتم خودم یکی بنویسم که حتی برای زبان های غیر فارسی هم جواب بده، که نتیجش شد کد زیر.
البته من این کد رو توی پروژه انگولاری شرکت پیاده کردم که میتونید با کمی تغییر توی هر پروژه جاوا اسکریپتی دیگه ازش استفاده کنید.
برای اینکار من تابع زیر رو به رویداد keyUp فیلد متنی مورد نظر متصل کردم
inputValue: string = '';
toEnglishChars(e:KeyboardEvent) {
let char = e.code.toString().split('Key');
if (char.length > 1 && !(e.code == 'KeyA' && e.ctrlKey == true)) {
if (char[1].toLowerCase() == e.key.toLowerCase()) { // اگر زبان کیبوردانگلیسی است
this.editForm.patchValue({
dbName: this.inputValue+e.key
});
} else { // اگر زبان کیبورد انگلیسی نیست
if (e.shiftKey) {
this.editForm.patchValue({
dbName: this.inputValue+char[1]
});
} else {
this.editForm.patchValue({
dbName: this.inputValue+char[1].toLowerCase()
});
}
}
}
// to Allow the shortcut select all in input text
if (e.code == 'KeyA' && e.ctrlKey == true) {
(<any>e.target).select();
} else {
this.dbNameValue = this.editForm.value.dbName? this.editForm.value.dbName: '';
} }
کد htm:
<input type="text" class="k-textbox"
(keyup)="toEnglishChars($event)"
="return /[a-z0-9]/i.test(event.key)"
formControlName="dbName"
/>
فقط یک نکته اینجا هست که هنگام تایپ یک لحظه حرف فارسی نماید دادمیشه و بعد با حرف انگلیسی جایگزین میشه که برای حل این مشکل من در رویداد یک کد Regix گذاشتم.