117 module font trên Odoo Apps Store thực chất bán gì: độ phủ hệ chữ và glyph chiếm 91% lượt tải, báo cáo là nơi người ta chịu trả tiền, còn tiếng Việt thì không có module nào.
Phần 2 khép lại với việc OCA có ba module font và không module nào chạy được trên Odoo 19. Apps Store thì gặp vấn đề ngược lại. Hàng bán thì nhiều, riêng nhắm tới 19.0 đã có 58 module, và với phần lớn trong số đó bạn không đọc được một dòng mã nguồn nào trước khi trả tiền.
Nên bài viết này chuyển sang đo đạc, lập bản đồ mọi module font trên store: thứ gì bán được, mỗi module đụng vào tầng nào, và tiền chảy về đâu. Giả định ban đầu hóa ra là sai, và các con số nói thẳng điều đó.
Số liệu bên dưới đến từ một lần thu thập trên apps.odoo.com ngày 31/7/2026, với 10 từ khóa và 117 module thuần về font sau khi lọc. Giá là giá store hiển thị tại thời điểm đó, và store có đổi tiền tệ theo vùng nên bạn có thể thấy khác. Số lượng cũng thay đổi. Hãy xem tất cả như hình dạng của thị trường chứ không phải một bảng giá.
Cách chúng tôi đếm
Chúng tôi tìm trên store bằng một scraper tự viết cho việc này, một CLI Typer nhỏ lưu kết quả vào SQLite để chạy lại phân tích được. Mười từ khóa (font, fonts, custom font, google font, font family, font size, report font, web font, typography và arabic font) trả về 168 mục. Sau khi đọc hết phần mô tả, chúng tôi loại 51 mục. Ba mươi sáu mục chỉ nhắc tới font thoáng qua: trình thiết kế biên lai POS, theme backend, và một trường hợp là gói bảng lương Peru. Mười lăm mục còn lại là module font biểu tượng, vốn cũng đóng gói dưới dạng file font nhưng giải quyết bài toán khác và có bài riêng. Còn lại 117 module thuần về font.
Một hạn chế cần nói thẳng, và đó chính là toàn bộ khác biệt giữa bài này với phần 2. Hai phần ba số mục là hàng trả phí, mà một module trả phí là một kho nén đóng, mua rồi mới đọc được. Ở phần 2, chúng tôi mở được mọi module OCA và trích dẫn được cái bundle nó móc vào. Với 80 mục trả phí ở đây thì không, nên mọi khẳng định về việc một module làm gì đều là lời của người bán, lấy từ phần mô tả.
Các con số thật sự nói gì
Cách sắp xếp hiển nhiên là theo ba tầng ở phần 1, xếp hạng từng tầng theo mức phổ biến. Dữ liệu từ chối cách đó:
| Module | Giá | Odoo | Lượt tải |
|---|---|---|---|
| Chinese TrueType fonts (Elico Corp) | MIỄN PHÍ | 7.0 | 11.036 |
| Nati arabic font | MIỄN PHÍ | 19.0 | 3.235 |
| SAR Symbol Font | MIỄN PHÍ | 18.0 | 2.016 |
| Fix Google Fonts (Bytist GmbH) | MIỄN PHÍ | 16.0 | 695 |
| Replace Google Fonts (HAV Media GmbH) | MIỄN PHÍ | 15.0 | 278 |
Không module nào trong số đó nói về thương hiệu. Ba module đầu tồn tại để ký tự hiện lên màn hình thay vì thành ô vuông, dấu hỏi hoặc chẳng gì cả. Hai module còn lại tồn tại để một tòa án Đức khỏi quan tâm tới chuyện website của bạn lấy font từ đâu, chuyện này có riêng một mục ở dưới.
Có một điểm cần làm rõ trước. Store công bố lượt tải cho các mục miễn phí và lượt mua cho các mục trả phí, không bao giờ cả hai: cả 37 module miễn phí ở đây đều có lượt tải, cả 80 module trả phí đều có lượt mua hoặc không có gì. Hai chỉ số này không so sánh được và không cộng vào nhau được, nên mọi phần dưới đây đều ghi rõ đang nói con số nào.
Tính trên các mục miễn phí, độ phủ hệ chữ và glyph chiếm 17.939 trong 19.660 lượt tải, tức 91%. So với đó, các module tồn tại để một instance Odoo trông giống thương hiệu của khách chỉ là sai số làm tròn.
Trong bảng chữ cái Latin, font có cảm giác như chuyện trang trí, thứ chỉnh lại sau khi xong tính năng. Với phần lớn những người cài các module này, font là ranh giới giữa một hóa đơn đọc được và một hóa đơn không dùng được.
Hình dạng thị trường theo tầng, dùng bản đồ ở phần 1 cộng thêm hai bề mặt phần 1 chưa phủ:
| Tầng | Module | Lượt tải (miễn phí) | Lượt mua (trả phí) | Khoảng giá trả phí |
|---|---|---|---|---|
| Hệ chữ và glyph | 40 | 17.939 | 1 | 5,69 $ đến 597,01 $ |
| Website | 30 | 1.287 | 82 | 5,69 $ đến 150,00 $ |
| Báo cáo PDF | 29 | 406 | 143 | 1,47 $ đến 750,00 $ |
| Giao diện backend | 10 | không có | 38 | 0,97 $ đến 23,46 $ |
| Point of Sale | 6 | 22 | 14 | 12,53 $ đến 17,08 $ |
Hai trong số 117 module không vào được nhóm nào, một trình thiết kế template và một widget đổi màu biểu tượng, nên để ra ngoài. Giao diện backend không có số lượt tải vì không có mục miễn phí nào.
Đặt cạnh nhau, ranh giới rất rõ. Nhu cầu miễn phí dồn về hệ chữ, 17.939 lượt tải. Nhu cầu trả tiền dồn về báo cáo, 143 trong tổng 278 lượt mua ghi nhận trên cả tập, so với đúng một lượt mua trải trên toàn bộ 21 module hệ chữ có phí. Người ta tải font về để chữ hiện ra, và trả tiền cho module để báo cáo trông đúng ý mình.
Hệ chữ và glyph
Tiếng Trung, và vấn đề này cũ tới mức nào
Module font được tải nhiều nhất trong lịch sử Odoo là l10n_cn_fonts của Elico Corp, với 11.036 lượt tải. Nó nhắm tới Odoo 7. Phần mô tả nói nó “thay các font PDF Type1 tiêu chuẩn bằng font TrueType có ký tự unicode cho tiếng Trung giản thể”, và đóng gói kèm DroidSansFallback.ttf.
Type1 và RML xếp nó vào thời tiền QWeb: lỗi thời chừng một thập kỷ, vẫn đứng đầu bảng mọi thời đại. Không có gì thay thế được nó ở quy mô đó, bằng chứng rõ nhất cho thấy độ phủ hệ chữ là một nhu cầu thường trực chưa được đáp ứng, chứ không phải một khoảng trống nhất thời.
Tiếng Ả Rập, miễn phí đấu với trả phí
Tiếng Ả Rập là hệ chữ có cạnh tranh thương mại mạnh nhất trên store. Bên miễn phí, nati_arabic_font có 3.235 lượt tải và, hiếm thấy ở đây, đã nhắm tới 19.0.
Bên trả phí, STRIDE Business Solutions niêm yết mười SKU riêng biệt giá từ 45,56 $ đến 68,33 $, mỗi mục một họ font: Amiri, Almarai, Beiruti, Cairo, IBM Plex, Noto Kufi, Noto Sans, Readex Pro, Tajawal và Zain. Lấy ba họ font trong danh mục đó là đã hơn 200 $.
Một trong những cái tên ấy đáng để bạn dừng lại. Bản lõi Odoo vốn đã đóng gói Tajawal: nó nằm trong res.company.font như một lựa chọn chọn được và file thì nằm trong web/static/fonts/google/Tajawal, đúng như phần 2 đã nói. Mục Tajawal của STRIDE có giá 68,33 $.
Công bằng với người bán, hai thứ này không giống nhau. Bản lõi chỉ đưa Tajawal ra qua bộ chọn Document Layout, vốn chỉ với tới báo cáo PDF; mục trả phí quảng cáo “Web & PDF”, tức phủ cả những bề mặt bộ chọn kia không với tới. Bài học ở đây không phải module đó vô giá trị, mà là bạn cần biết mình đang thiếu bề mặt nào trước khi tiêu tiền, vì một phần thứ đang bán thì đã cài sẵn rồi.
Một ký hiệu tiền tệ cũng là một phụ thuộc về font
Nhóm thú vị nhất trong tập dữ liệu là một chùm module font Saudi miễn phí trên 18.0, dẫn đầu là SAR Symbol Font với 2.016 lượt tải, cùng các module anh em tên Alwatad, Almasmak, Alawwal, Year of Camel và Year of Hand Craft. Cũng có một bản tương đương cho Oman.
Chúng tồn tại vì Ả Rập Xê Út đưa ra một ký hiệu tiền tệ Riyal mới, mà một ký hiệu mới là một glyph mới. Chừng nào font chưa mang nó thì ký hiệu chưa hiện ra được, nên mọi hóa đơn, biên lai và màn hình có hiển thị số tiền đều bị ảnh hưởng cùng lúc. Mục Saudi Font ghi rằng nó “chạy trong báo cáo PDF”, “tương thích với giao diện Point of Sale” và “hiện trong hóa đơn cùng mọi view của hệ thống”.
Đọc theo bản đồ tầng ở phần 1, đó là một module cố ý trải khắp mọi tầng, vì yêu cầu ở đây không thuộc về thẩm mỹ và cũng chẳng tôn trọng những ranh giới đó. Một cơ quan quản lý tiền tệ đổi một glyph, và mọi bề mặt hiển thị trong ERP phải chạy theo. Đây là minh họa mạnh nhất của cả loạt bài cho luận điểm ở phần 1: font không phải chuyện trang điểm.
Tiếng Thái, nơi OCA và store chồng lên nhau
Tiếng Thái là hệ chữ duy nhất được phủ thật ở cả hai phía. Store có Font Noto Sans Thai and Sarabun (miễn phí, 19.0, 224 lượt tải), Thai Google Fonts (miễn phí, 148), một mục trả phí Thai Report Fonts giá 8,89 $, và chính l10n_th_fonts của OCA với 164 lượt tải.
Module OCA đó đáng nhắc lại, vì phần 2 suýt bỏ sót nó. Tìm “font” trong tên các repository của OCA không bao giờ ra nó: nó nằm trong OCA/l10n-thailand, xếp theo một quốc gia chứ không theo tính năng. Tìm trên store thì ra ngay. Khi săn một module OCA mà về tay không, hãy tìm cả trên store: store đánh chỉ mục theo việc module làm gì, còn GitHub theo chỗ ai đó đã xếp nó vào.
Khoảng trống: tiếng Việt
Tìm trong tập dữ liệu xem có gì phủ tiếng Việt, kết quả là không có module nào. Không miễn phí, không trả phí, không trên bất kỳ phiên bản nào.
Đây không phải một hệ chữ không có vấn đề. Tiếng Việt dùng dấu chồng mà nhiều font mang không đầy đủ, và nó hỏng đúng theo kiểu phần 1 đã cảnh báo: bộ render thay font âm thầm, nên chữ trông vẫn đúng với người dựng báo cáo và đến tay khách hàng thì mất dấu hoặc sai dấu. Phần 2 tìm thấy đúng mối nguy đó ngay trong OCA, nơi account_financial_report gán cứng font-family: Helvetica, Arial cho layout riêng của nó.
Chưa ai đóng gói cách sửa. Module tiếng Thái của OCA là một khuôn mẫu chạy được: đưa file TTF vào, khai báo chúng, chèn stylesheet vào bundle báo cáo.
# __manifest__.py
"assets": {
"web.report_assets_common": [
"l10n_vn_fonts/static/src/scss/fonts_style.scss",
],
},
// static/src/scss/fonts_style.scss
@font-face {
font-family: "Be Vietnam Pro";
src: url("../../fonts/BeVietnamPro-Regular.ttf") format("truetype");
}
Toàn bộ cơ chế chỉ có vậy, đúng hai mươi dòng phần 1 đã đăng. Với một hệ thống Odoo tiếng Việt in hóa đơn, đó là ranh giới giữa đúng và sai một cách lặng lẽ, và nó là một đóng góp đang bỏ ngỏ chờ ai đó làm.
Google Fonts, GDPR và tự host
Có một chùm module miễn phí tồn tại để chặn Odoo lấy font từ Google:
| Module | Nhà cung cấp | Odoo | Lượt tải |
|---|---|---|---|
| Fix Google Fonts | Bytist GmbH | 16.0 | 695 |
| Replace Google Fonts | HAV Media GmbH | 15.0 | 278 |
| Local google fonts | Miguel Martinez Lopez | 18.0 | 113 |
Hai trong ba nhà cung cấp là công ty Đức, và đó không phải ngẫu nhiên. Tòa án Đức đã coi việc nhúng Google Fonts là hành vi truyền địa chỉ IP của khách truy cập cho bên thứ ba khi chưa có sự đồng ý, và những lá thư cảnh báo sau đó biến việc tự host thành một yêu cầu tuân thủ chứ không còn là một tinh chỉnh hiệu năng.
Phần 1 có nói Odoo tải font Google đã chọn về thành một ir.attachment rồi phục vụ cục bộ, nên một website nguyên bản vốn đã ở trạng thái khá ổn. Các module này tồn tại cho những trường hợp rìa mà hành vi đó bỏ sót, và số lượt tải của chúng cho thấy các trường hợp rìa ấy là có thật. Với khách hàng ở EU, hãy kiểm tra bất kể bạn có cài gì hay không: kiểu hỏng ở đây là pháp lý chứ không phải thị giác.
Bản đồ tầng, phiên bản store
Sau phần hệ chữ, đây là phần còn lại của bản đồ ở phần 1.
Font giao diện backend. Tầng mà OCA không có gì và bản lõi cũng không có thiết lập nào, còn store thì lấp vào với giá lẻ: Fonts Utils giá 0,97 $ trên 19.0, Ubuntu Font for Odoo giá 1,06 $, Custom Font Family giá 8,54 $, và Backend fonts giá 20,99 $. Cả mười module đều trả phí, nên tầng này chỉ ghi nhận 38 lượt mua. Đặt cạnh chừng hai mươi dòng SCSS ở phần 1, một đô la là cái giá công bằng để khỏi phải viết chúng, miễn là module còn sống qua lần nâng cấp kế tiếp của bạn.
Báo cáo PDF. Nhóm trả phí lớn nhất và trải giá rộng nhất, từ 1,47 $ đến 750 $. Keypress IT Services bán cỡ chữ báo cáo và kiểu chữ báo cáo thành hai module riêng, mỗi cái 19,93 $; Zyrado chào Qweb Reports Custom Font giá 17,28 $. Trước khi mua, hãy đọc lại phần 2: bộ chọn Document Layout của bản lõi cho chọn tám họ font đóng gói sẵn miễn phí, và web_font_size_report_layout của OCA lo phần cỡ chữ trên 16.0 và 17.0.
Website. Ba mươi module, phần lớn là trình quản lý Google Fonts và giao diện tải font lên. Geminate Consultancy Services bán Website Font Manager giá 56,93 $ và Web Font Manager giá 45,54 $. Đây là chỗ website_local_font của OCA đứng lại ở 17.0, nên trên 18.0 và 19.0, store lấp một khoảng trống thật chứ không phải làm trùng.
Point of Sale. Một tầng nhỏ mà phần 1 chưa lập bản đồ, đáng nhắc vì POS là bề mặt hiển thị riêng: một màn hình cảm ứng và một máy in biên lai, không cái nào hành xử như backend hay như PDF. Sáu module, chủ yếu là chỉnh cỡ chữ, giá từ 12,53 $ đến 17,08 $, cộng thêm một module miễn phí POS Font Size Accessibility trên 19.0.
Đọc một mục hàng trước khi mua
Không có mã nguồn để đọc, phần mô tả là bằng chứng duy nhất của bạn. Năm bước kiểm tra, theo thứ tự:
- Kiểm tra bản lõi trước. Trường hợp Tajawal ở trên là toàn bộ lập luận: một mục giá 68,33 $ cho một họ font Odoo vốn đã có sẵn. Bộ chọn Document Layout ở phần 2 phủ tám họ font miễn phí.
- Kiểm tra OCA thứ hai. Miễn phí, đọc được mã nguồn, đôi khi là cùng một module.
website_local_fontvàweb_font_size_report_layoutđều có trên store, nhắc ta rằng OCA cũng phân phối qua đó chứ không chỉ qua GitHub. - Phần mô tả có nêu tên cơ chế không? Những mục tốt thì có. Mục Saudi Font ghi rõ nó ảnh hưởng tới những bề mặt nào; mục của STRIDE ghi “Web & PDF”. Những mục hứa hẹn một font mà không nêu tên bundle mới là thứ khiến bạn bất ngờ lúc nâng cấp.
- Kiểm tra phiên bản. 58 trong 117 module nhắm tới 19.0, nên khác với OCA, khả năng cao bạn sẽ tìm được thứ còn hợp thời. Hãy xác nhận chứ đừng mặc định, vì khá nhiều module vẫn nằm ở 13.0 đến 16.0.
- Đọc cả danh mục của người bán, không chỉ module. Tiêu đề dài nhất trong tập dữ liệu này có 217 ký tự, một chuỗi biến thể từ khóa ngăn nhau bằng dấu gạch đứng. Một nhà cung cấp bán mười SKU gần như y hệt nhau, mỗi cái 68,33 $, mỗi cái một họ font, trong khi một gói duy nhất là đủ. Calcobase xuất hiện dưới hai cách viết tên của chính mình, làm các mục hàng bị chia đôi. Phân loại của store cũng thiếu nhất quán đến mức
ReportvàReporting,Point of Salevàpoint of salescùng tồn tại. Chẳng điều nào chứng minh một module là tệ, nhưng chúng cho bạn biết người bán cẩn thận tới đâu, và đó là thứ gần nhất với một lần review code mà bạn có được ở đây.
Tóm lại
- Font trên store chủ yếu là bài toán đọc được chữ. Riêng hệ chữ chiếm 91% tổng lượt tải, còn mức mua bán trả phí thì nhỏ về con số tuyệt đối: 278 lượt mua trên toàn bộ các mục trả phí, trong đó hệ chữ chiếm đúng một.
- Hệ chữ: phủ tốt cho tiếng Trung, tiếng Ả Rập và tiếng Thái. Các glyph tiền tệ như ký hiệu Riyal mới của Saudi cũng là bài toán font, và nó cắt ngang mọi tầng cùng lúc.
- Tiếng Việt thì không có gì. Khuôn mẫu
l10n_th_fontslà bản mẫu, khoảng hai mươi dòng. - Giao diện backend: tầng mà cả bản lõi lẫn OCA đều bỏ qua, được các module trả phí lấp vào với giá khởi điểm dưới một đô la.
- Báo cáo: nhóm trả phí nhộn nhịp nhất, và cũng là nhóm mà bản lõi thường đã có sẵn câu trả lời cho bạn.
- Website: một khoảng trống thật trên 18.0 và 19.0 từ khi
website_local_fontđứng lại, cộng thêm một chùm module tự host do GDPR thúc đẩy.
Ba bài viết, một trình tự thao tác. Hãy kiểm tra xem bản lõi đã làm được gì, vì nó làm nhiều hơn phần lớn người ta tưởng. Kiểm tra OCA tiếp theo, vì nó miễn phí và bạn đọc được mã nguồn. Mua trên store khi nó lấp một khoảng trống thật, và hãy đọc phần mô tả như đọc một bản hợp đồng. Tự viết khi không cách nào phù hợp, mà sau phần 1 thì bạn đã biết viết thế nào.
Thứ đáng giữ lại là bản đồ từ phần 1. Backend, báo cáo, website, và giờ thêm POS, mỗi tầng một bundle riêng, mỗi tầng đều cần font được khai báo ở nơi bề mặt đó nhìn thấy. Mọi module ở đây đều là một câu trả lời đóng gói sẵn cho cùng câu hỏi ấy.