- Lỗi trong trình biên tập web của Medium khiến chỉ chữ cái viết hoa tiếng Ba Lan Ś không nhập được là kết quả của sự chồng chéo giữa quy ước nhập liệu, môi trường nhập khẩu PC, thói quen dùng phím tắt lưu, và cách Windows xử lý phím Right Alt
- Tiếng Ba Lan dùng bảng chữ cái Latinh cộng thêm 9 ký tự có dấu; trong môi trường PC thời kỳ đầu, thay vì bàn phím chuyên dụng, “programmer’s layout” dùng tổ hợp Alt+chữ cái Latinh trên thực tế đã trở thành chuẩn
- Do Windows ánh xạ Right Alt nội bộ như Ctrl+Alt, Right Alt+S dùng để nhập Ś nhìn từ hệ thống lại giống như Ctrl+Alt+S
- Medium chặn Ctrl+S và gọi
preventDefault() để ngăn hộp thoại lưu của trình duyệt, nhưng vì không kiểm tra có Alt hay không nên đã chặn luôn chính việc nhập ký tự
- Cách sửa chỉ là một thay đổi nhỏ: thêm
!e.altKey vào điều kiện chặn Ctrl+S; lỗi này cho thấy các quy ước điện toán xoay quanh 26 chữ cái tiếng Anh có thể tạo ra ngoại lệ và ma sát cho người dùng ngôn ngữ khác
Chữ Ś biến mất trên Medium
- Một người dùng báo cáo rằng khi bắt đầu viết bài bằng tiếng Ba Lan trên Medium, các ký tự khác nhập được nhưng riêng Ś thì không
- Medium không đối xử đặc biệt với ngôn ngữ nào, nên ban đầu việc chỉ một ký tự trong 32 chữ cái tiếng Ba Lan gặp vấn đề trông có vẻ kỳ lạ
- Nguyên nhân không phải là lỗi của một tính năng đơn lẻ, mà là kết quả của nhiều thập kỷ phương thức nhập liệu và cách hệ điều hành xử lý chồng lên nhau
Tiếng Ba Lan và các ký tự bổ sung
- Tiếng Ba Lan là ngôn ngữ Slav được sử dụng nhiều thứ hai sau tiếng Nga, đứng trước tiếng Ukraina
- Khác với tiếng Nga và tiếng Ukraina, tiếng Ba Lan dựa trên bảng chữ cái tiếng Anh/Latinh nhưng bổ sung một số ký tự
- Các từ gốc tiếng Ba Lan vốn không có Q, V, X, nhưng các chữ này vẫn được giữ lại cho tiếng Latinh và từ mượn
- Thay vào đó, tiếng Ba Lan dùng thêm 9 ký tự có dấu dựa trên chữ cái Latinh
- Máy đánh chữ đầu thế kỷ 20 phải hỗ trợ các ký tự bổ sung này; một số ký tự có phím riêng, nhưng số còn lại dùng chung với phím số
- Chữ hoa đôi khi được “mô phỏng” bằng cách gõ chữ Latinh rồi dùng backspace quay lại để chồng dấu lên
- Để dành chỗ cho các chữ bổ sung, một số dấu câu như dấu chấm phẩy và dấu ngoặc cũng bị hy sinh
Môi trường PC ở Ba Lan thời cộng sản và programmer’s layout
- Môi trường máy tính cá nhân thời kỳ đầu ở Ba Lan những năm 1980 bị hạn chế bởi thu nhập khả dụng thấp và lệnh cấm nhập khẩu thương mại máy tính phương Tây
- Máy tính từ phương Tây vào Ba Lan thường đi kèm nguyên tài liệu hướng dẫn gốc, phần mềm chưa dịch và bàn phím kiểu Mỹ
- Các nước như Pháp và Đức nhận được bàn phím tùy biến phản ánh bố cục máy đánh chữ của họ, nhưng Ba Lan phải tìm cách nhập 9 ký tự bổ sung trên bàn phím kiểu Mỹ
- Ctrl vốn đã được dùng rộng rãi cho phím tắt, còn Alt tương đối ít dùng hơn, nên tổ hợp Alt trên thực tế đã trở thành chuẩn
- 8 ký tự có dấu được gán cho chữ cái Latinh tương ứng
- Ký tự còn lại được gán cho một phím ở vị trí gần đó
- Bố cục cũ được gọi là “typist’s layout”, còn cách mới là “programmer’s layout”
- Có thể vì người dùng PC thời kỳ đầu chủ yếu là lập trình viên
- Cũng có thể vì nó giữ nguyên các dấu câu thường dùng trong lập trình
- Programmer’s layout bất tiện về công thái học vì chỉ có phím Alt bên trái, buộc phải bấm các phím gần đó bằng cùng một bàn tay, nhưng nó dễ hiểu mà không cần cải tạo phần cứng hay dán nhãn phím nên đã được chấp nhận rộng rãi
- Về sau, typist’s keyboard chuyên dụng xuất hiện, nhưng hầu như không ai chuyển sang dùng; diễn biến này tương tự cách QWERTY, dù không tối ưu, đã phổ biến rộng rãi
Thói quen Ctrl+S và xung đột với trình biên tập web
- Trước khi tự động lưu trở nên phổ biến, thói quen tự lưu tài liệu là rất quan trọng
- Trong thập niên 1980–1990, thao tác lưu chậm, làm hao mòn dần các phương tiện như đĩa, và đôi khi chiếm CPU mạnh đến mức khó làm việc khác
- Người dùng hình thành thói quen nhấn Command+S hoặc Ctrl+S mỗi khi tạm dừng trong lúc viết
- Có người nhấn sau mỗi đoạn
- Có người nhấn sau mỗi câu, rồi về sau là sau mỗi vài từ
- Với trình biên tập dựa trên web, thói quen này dẫn đến vấn đề: trình duyệt mở hộp thoại lưu HTML của trang web hiện tại
- Medium trước đây cũng chặn việc này bằng cách phát hiện Ctrl+S hoặc Command+S trong mã trình biên tập, gọi thao tác lưu và chặn hành vi mặc định
if ((e.metaKey || e.ctrlKey) && e.keyCode === goog.events.KeyCodes.S) {
this._editors.save()
e.preventDefault()
}
- Đoạn mã này chạy thao tác lưu của trình biên tập và chặn hộp thoại lưu của trình duyệt khi
metaKey trên Mac hoặc ctrlKey trên Windows/Linux được nhấn cùng S
- Vấn đề là trong một số môi trường, thao tác nhập chữ Ś tiếng Ba Lan không đơn giản trông như Alt+S
Cách Windows xử lý Right Alt
- Windows 3.x và Windows 95 cho phép truy cập nhanh các mục menu và điều khiển trong hộp thoại bằng Alt+ký tự được gạch chân
- Ở Ba Lan, Alt vốn đã được dùng để nhập ký tự có dấu, nên xung đột với phím tắt của Windows
- Khi bàn phím phát triển, một phím Alt phụ xuất hiện bên phải phím cách, cho phép dùng Alt trái cho phím tắt Windows và Alt phải cho nhập tiếng Ba Lan
- Tuy nhiên, chức năng Right Alt vẫn phải khả dụng trên các bàn phím cũ chỉ có một phím Alt, nên Microsoft ánh xạ Right Alt bên trong Windows thành tổ hợp Ctrl+Alt nhấn đồng thời, vốn hiếm khi được dùng
- Vì quyết định này, Right Alt+S dùng để nhập Ś tiếng Ba Lan nhìn từ hệ thống lại giống như Ctrl+Alt+S
- Đoạn mã chặn Ctrl+S của Medium không kiểm tra Alt có được nhấn cùng hay không, và kết quả là chặn việc nhập Ś như thể đang xử lý chặn phím tắt lưu
Cách sửa: khi Alt được nhấn thì không xem là Ctrl+S
- Sau khi xác định được nguyên nhân, việc sửa khá đơn giản
- Thay vì chặn Ctrl+S vô điều kiện, điều kiện được đổi để chỉ chặn khi Ctrl được nhấn nhưng Alt không được nhấn
if ((e.metaKey || (e.ctrlKey && !e.altKey)) && e.keyCode === goog.events.KeyCodes.S) {
this._editors.save()
e.preventDefault()
}
- Sau thay đổi, thao tác nhập Right Alt+S không còn khớp điều kiện chặn lưu Ctrl+S
- Medium đã sửa lỗi này, và về sau điều kiện đó được thêm nhiều chú thích để con người có thể hiểu được
Vấn đề lớn hơn phía sau một điều kiện nhỏ
- Chủ nghĩa cộng sản sụp đổ ở Ba Lan vào năm 1989, và nay cả cá nhân lẫn công ty đều có thể nhập khẩu máy tính hợp pháp
- Windows và Mac mua tại Ba Lan hiện nay hỗ trợ đầy đủ tiếng Ba Lan, và hệ điều hành cũng đã được bản địa hóa
- Dù vậy, trong phần cài đặt hệ thống vẫn còn programmer’s layout, và nó vẫn là bố cục phổ biến nhất trong hai bố cục
- Lỗi nhỏ này liên quan đến thực tế rằng các quy ước điện toán kiểu Mỹ đã phát triển xoay quanh 26 chữ cái không dấu của tiếng Anh
- Tiếng Ba Lan phải thỏa hiệp khi di chuyển giữa các bố cục phái sinh của QWERTY, còn những ngôn ngữ dùng hệ chữ viết xa tiếng Anh hơn có thể ở trong điều kiện bất lợi hơn
1 bình luận
Các ý kiến trên Hacker News
Tôi cho rằng việc tiếng Ba Lan dùng chữ cái Latin và chỉ biểu thị các âm bổ sung bằng những biến thể Slav nhỏ đã giúp Ba Lan dễ hướng về phương Tây hơn nhiều
Người Ba Lan trung bình gần gũi về văn hóa với các láng giềng phía tây hơn rất nhiều so với người Ukraine hay người Nga, có lẽ ẩm thực là ngoại lệ duy nhất
Không biết trong tương lai xa Ukraine có đi cùng con đường đó không
Các học giả cho rằng tiếng Ba Lan bắt đầu phát triển thành một ngôn ngữ riêng vào khoảng cùng thời kỳ, và cho đến thế kỷ 13 vẫn có thể giao tiếp với các láng giềng phía nam mà không gặp vấn đề lớn
Chính tả tiếng Ba Lan hình thành vào thế kỷ 15–16, và Stanisław Zaborowski cùng Jan Kochanowski từng cố đưa thêm chữ cái để phản ánh chính xác hơn âm vị tiếng Ba Lan thời đó, nhưng bảng chữ cái họ đề xuất khá dài
Trong thời kỳ bị chia cắt chiếm đóng, có sự Nga hóa mạnh mẽ nhằm xóa bỏ tiếng Ba Lan và văn hóa Ba Lan, đồng thời cũng có các nỗ lực đưa chữ Kirin vào, nhưng cuối cùng đều thất bại; văn học thời đó có nhiều tác phẩm xoay quanh chủ nghĩa ái quốc và tình yêu quê hương
Cuộc cải cách ngôn ngữ năm 1936 đã đưa tiếng Ba Lan đến gần hình thức mà chúng ta biết ngày nay; trong thời kỳ cộng sản, ngôi thứ hai số nhiều được đưa vào ngôn ngữ chính thức, tương tự vykání trong tiếng Séc và tiếng Slovakia, nhưng nó thiếu tự nhiên và mang màu sắc chính trị rõ nên không tồn tại lâu
Tiếng Ba Lan có các phương ngữ, nhưng sau Thế chiến II, do di cư mà khác biệt mờ dần, khiến tiếng Ba Lan chuẩn cũng được định hình trong giai đoạn đó; ngày nay có nhiều từ vay mượn từ tiếng Anh, đến mức hater được bản địa hóa tự nhiên thành hejter
Câu này sẽ khiến khá nhiều người Ba Lan nổi giận
Vấn đề thật sự là trình duyệt không cung cấp một cách đơn giản để kiểm tra tổ hợp phím, và các nhà phát triển cũng không tự làm
Trên nhiều trang, tổ hợp phím dự định vẫn được kích hoạt ngay cả khi có thêm phím bổ trợ như alt hay shift
Đoạn mã ở đây cũng chỉ sửa vấn đề lớn hơn trên Windows, còn alt+cmd+s vẫn bị chặn
Cần có một đề xuất để trình duyệt expose một thuộc tính trong các sự kiện keydown/up/press chứa mã tổ hợp phím như "CTRL+S", "CTRL+ALT+S"
Khi đó nhà phát triển có thể rẽ nhánh theo thuộc tính đó thay vì tự kiểm tra key code và phím bổ trợ
Các web developer cũng nên tự tạo thuộc tính như vậy trong code của mình để so sánh, thay vì tự kiểm tra từng phím bổ trợ. Như vậy sẽ tránh được các bug như trong bài gốc và dùng cũng tiện hơn nhiều
Hãy tưởng tượng thiệt hại sẽ lớn đến đâu nếu developer có thêm nhiều lựa chọn dễ can thiệp hơn
Nếu cần chặn phím thì đã có API cấp thấp rồi, dừng ở đó là tốt hơn
Trong khi đó, HTML có thuộc tính accesskey để chỉ định phím tắt: https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/...
Copilot 365 mới cũng y hệt vậy. Mỗi lần tôi định nhập "Ć" thì Copilot lại bật ra, khiến tôi phải đóng ứng dụng liên tục
Sau khi chuyển sang, tôi chưa từng ngoái lại
Viết trên SteamOS
Cảm ơn Microsoft. Thật vui khi thấy khâu đảm bảo chất lượng vận hành tốt như vậy
Sự thật thú vị: khi áp dụng chuẩn hóa phân rã chuẩn tắc của Unicode, 8 trong 9 chữ cái tiếng Ba Lan (ż, ó, ć, ę, ś, ą, ź, ń) được phân rã thành chữ cái cơ sở + dấu phụ kết hợp, nhưng ł thì vẫn giữ nguyên
Vì vậy tokenizer unicode61 remove_diacritics của sqlite không thể chuẩn hóa văn bản tiếng Ba Lan cho tìm kiếm toàn văn
Tôi không chắc, nhưng remove_diacritics của sqlite có lẽ hoạt động bằng cách chuyển sang NCD rồi loại bỏ các ký tự kết hợp khỏi chuỗi, giống cách tôi từng tự triển khai
Tôi đoán các trường hợp đặc biệt khác không phân rã được như ħ hay ø cũng sẽ hoạt động tương tự
Lviv = 2,5 triệu
Vinnytsia = 1,5 triệu
Ivano-Frankivsk = 1,3 triệu
Khmelnytskyi = 1,2 triệu
Rivne = 1,1 triệu
Ternopil = 1 triệu
Volyn = 1 triệu
Chernivtsi = 800 nghìn
Zakarpattia = 800 nghìn (đã loại người gốc Hungary)
Như vậy đã có 11,2 triệu người Tây Ukraina mà tiếng Ukraina chiếm áp đảo, và kể cả bỏ qua hoàn toàn các vùng còn lại thì vẫn nhiều hơn số người nói tiếng Séc. Hơn nữa, các vùng còn lại cũng không hoàn toàn là vùng nói tiếng Nga, và bây giờ lại càng không
Đáng tiếc là không chỉ Medium, mà nhiều ứng dụng Windows cũng vậy. Ví dụ trong Active Presenter, chỉ cần nhập một chữ, có lẽ là Ó, thì việc quay màn hình dừng lại, khiến nhiều khi không thể ghi lại cảnh gõ tiếng Ba Lan
Các ứng dụng khác cũng tương tự, dường như gán tổ hợp Alt + Ctrl + chữ làm phím tắt và bằng cách nào đó ghi đè driver bố cục bàn phím
Đã là năm 2026 mà đột nhiên không thể nhập chữ Ś hoa trong Edge cho Mac. Cảm giác như quay lại quá khứ khoảng 25 năm
nvidia overlay có phím tắt Alt+Z, và nó hoạt động với cả Alt trái lẫn Alt phải, nên người dùng tiếng Ba Lan không thể nhập “ż” trừ khi mở overlay hoặc gán lại phím, khá là khó chịu
Nvidia làm ơn sửa đi
Tóm lại là thế này:
Trên Windows, vì tổ hợp Alt đã được dùng sẵn nên nó trở thành Alt phải+s, và dù bản thân Windows không dùng Alt phải, thay vì có mã Alt phải riêng, Windows lại viết lại phím đó thành tổ hợp ctrl+alt
Nếu muốn tóm tắt thì ít nhất phải nói đúng chi tiết quan trọng nhất. Mọi người chỉ nhấn Alt, nhưng Windows đổi thành “giờ đang nhấn ctrl+alt”, khiến alt+s trông giống ctrl+s và kèm theo Alt, thứ mà không ai kiểm tra khi chặn và giết sự kiện