Vietnamese slug cho Discourse


(Khoa Nguyen) #1

Em cũng chiến đấu với Discourse gần đây. Có viết 1 cái improve nhỏ cho Discourse để hỗ trợ Vietnamese slug. Nhưng mà pull request hoài mà không chấp nhận. Admin hay anh em nào giúp em hoàn thành để pull request vào core Discourse luôn. Code hiện tại hoạt động rất tốt.

Code:
https://github.com/thangngoc89/discourse/blob/master/lib/slug.rb

Website của em : ask.hoidapyhoc.com

Các lỗi còn tồn tại: chỉ hỗ trợ unicode dựng sẵn (1 byte) , chưa chơi với unicode tổ hợp (2 byte).
(Không thể theo cách này được vì 2 byte)


Một lý do khiến DayNhauHoc bị hạ điểm về SEO
(Lê Trần Đạt) #2

Jeff không đồng ý với slug này đâu đâu. @thangngoc89 phải thay vào

 if ['zh_CN', 'ja'].include?(SiteSetting.default_locale)

thành

 if ['zh_CN', 'ja', 'vi'].include?(SiteSetting.default_locale)

Nếu stringex có 'vi'

Cái này là tuyệt đối không được.

#For Vietnamese slug 
vietnamese   = "àáạảãâầấậẩẫăằắặẳẵèéẹẻẽêềếệểễìíịỉĩòóọỏõôồốộổỗơờớợởỡùúụủũưừứựửữỳýỵỷỹđÀÁẠẢÃÂẦẤẬẨẪĂẰẮẶẲẴÈÉẸẺẼÊỀẾỆỂỄÌÍỊỈĨÒÓỌỎÕÔỒỐỘỔỖƠỜỚỢỞỠÙÚỤỦŨƯỪỨỰỬỮỲÝỴỶỸĐêùà"
replacements = "aaaaaaaaaaaaaaaaaeeeeeeeeeeeiiiiiooooooooooooooooouuuuuuuuuuuyyyyydAAAAAAAAAAAAAAAAAEEEEEEEEEEEIIIIIOOOOOOOOOOOOOOOOOUUUUUUUUUUUYYYYYDeua"
string = string.tr(vietnamese, replacements)
#End Vietnamese slug

(Lập Trình Sư) #3

cái này không phải là chức năng trong core nên reject là hoàn toàn dễ hiểu mà.

bạn phát triển riêng thành module plugin là được :slight_smile:

thêm cả code style của bạn hardcode hơi quá, nhét cả text unicode vô trong string nữa là không được.

thiếu cả không có tests suite.


(Lê Trần Đạt) #4

Ngày trước Jeff không đồng ý, nhưng sau này thì họ đồng ý slug cho các ngôn ngữ khác tiếng anh.

Nhưng theo post của @thangngoc89 trên meta.discourse.org thì em nghĩ là có giải pháp. Với điều kiện mình khai báo cho stringex


(Khoa Nguyen) #5

Do em không có rành về Ruby (chỉ nghiên cứu khi đến với Discourse) nên không rõ nữa.
@ltd anh có thể tiếp tục nghiên cứu không nhỉ?


(Khoa Nguyen) #6

@laptrinhio trong php mình có contribute vào cái Slugify. Bây giờ làm project nào thì chỉ cần require nó là được. Ruby thì mình mù tịt


(Lê Trần Đạt) #7

Cái stringex vi này có vẻ không ổn lắm:

Đạt cũng không rành Ruby, nhưng mình phải giải quyết theo cách sử dụng stringex cho nó gọn code chứ không thể làm 2 cái mảng như thế này được

#For Vietnamese slug 
vietnamese   = "àáạảãâầấậẩẫăằắặẳẵèéẹẻẽêềếệểễìíịỉĩòóọỏõôồốộổỗơờớợởỡùúụủũưừứựửữỳýỵỷỹđÀÁẠẢÃÂẦẤẬẨẪĂẰẮẶẲẴÈÉẸẺẼÊỀẾỆỂỄÌÍỊỈĨÒÓỌỎÕÔỒỐỘỔỖƠỜỚỢỞỠÙÚỤỦŨƯỪỨỰỬỮỲÝỴỶỸĐêùà"
replacements = "aaaaaaaaaaaaaaaaaeeeeeeeeeeeiiiiiooooooooooooooooouuuuuuuuuuuyyyyydAAAAAAAAAAAAAAAAAEEEEEEEEEEEIIIIIOOOOOOOOOOOOOOOOOUUUUUUUUUUUYYYYYDeua"
string = string.tr(vietnamese, replacements)
#End Vietnamese slug

P/S: Đã star cái này lại và nghiên cứu :+1:


(Khoa Nguyen) #8

@ltd cái Stringex đúng là rất không ổn.
Ngó phát qua php thì nó sẽ ra thế này


(Lê Trần Đạt) #9

Không, @thangngoc89 hiểu sai vấn đề rồi, cách họ translate vẫn rất ổn.

Trước hết mình phải pull request cho stringex vi trước, Tuy nhiên cái commit cho stringex vi này chưa được ổn

Và mình thiếu test cho cái stringex vi này

hey looks good. do you mind writing a test file for this? you can find examples in the test/unit/localization directory. need to have something to test against regressions for this. thanks.


(Khoa Nguyen) #10

@ltd vấn đề là nằm ở chỗ default locale của Discourse. Mình không thể setting Vietnamese lên làm mặc định được :
https://www.transifex.com/projects/p/discourse-org/language/vi_VN/

Công việc translate mới được 36% (thời gian gần đây chỉ có mình làm việc translate này)

Test file thì gần như Khoa không biết làm (Ruby noob)


(Lê Trần Đạt) #11

Có hai lý do mà Đạt không làm cái này bởi vì

  • Đạt không muốn dịch sang tiếng Việt
  • Làm cái này cần đam mê

Về cái slug thì trước đây Đạt cũng nghĩ tới, có thể sẽ làm cái slug này ở local thôi, không nhất thiết phải đưa vào core.


(Khoa Nguyen) #12

Okie. Đạt. Hy vọng là sẽ có được một giải pháp slug nhẹ nhàng, phù hợp cho Discourse.


(Lê Trần Đạt) #13

@thangngoc89, cái code đầu tiên bạn đưa ra ở trên của bạn cũng có thể apply cho DC local được rồi đấy, không nhất thiết phải PR để đưa vào core.

#For Vietnamese slug 
vietnamese   = "àáạảãâầấậẩẫăằắặẳẵèéẹẻẽêềếệểễìíịỉĩòóọỏõôồốộổỗơờớợởỡùúụủũưừứựửữỳýỵỷỹđÀÁẠẢÃÂẦẤẬẨẪĂẰẮẶẲẴÈÉẸẺẼÊỀẾỆỂỄÌÍỊỈĨÒÓỌỎÕÔỒỐỘỔỖƠỜỚỢỞỠÙÚỤỦŨƯỪỨỰỬỮỲÝỴỶỸĐêùà"
replacements = "aaaaaaaaaaaaaaaaaeeeeeeeeeeeiiiiiooooooooooooooooouuuuuuuuuuuyyyyydAAAAAAAAAAAAAAAAAEEEEEEEEEEEIIIIIOOOOOOOOOOOOOOOOOUUUUUUUUUUUYYYYYDeua"
string = string.tr(vietnamese, replacements)
#End Vietnamese slug

còn nếu muốn vào core thì phải làm như post trên:

Trước hết mình phải pull request cho stringex vi trước, Tuy nhiên cái commit cho stringex vi này chưa được ổn


(Khoa Nguyen) #14

Okie @ltd mình đang áp dụng nó cho local mà.


(Khoa Nguyen) #15

@ltd Không có gì mới, chỉ gom nó vào 1 plugin thôi :smile:


(Lê Trần Đạt) #16

Nice, Đạt sẽ install cái này vào, nếu có bug thì Đạt sẽ report :smiley:

P/S: Đã install rồi nhé @thangngoc89, chạy rất tốt :+1:


(Khoa Nguyen) #17

Còn 1 lỗi mà làm biếng chưa bao giờ làm đó là hỗ trợ unicode tổ hợp (combine unicode)

Ví dụ topic: Hỏi vui: Mọi người hay gọi hai ký tự này là gì: '/' '\'


(Lê Trần Đạt) #18

:expressionless: oh, unicode tổ hợp nó có ký tự khác hả? Vậy còn có unicode nào nữa không?


(Khoa Nguyen) #19

Chỉ đơn giản là quăng 1 bộ kí tự unicode và là xong :smiley:


(Thành Phạm) #20

Cái topic kia bị thế có thể là do em dùng bàn phím swype trên android nên nó k giống bình thường


83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?