Kết hợp i18n và API response message

Mọi người cho em hỏi.
Em muốn kết hợp i18n và response message của api vào project để hiển thị toast trên app theo ngôn ngữ người dùng chọn. Ý tưởng của em là response trả về sẽ có cấu trúc như sau:

{ data: {...}, status: 200, message: "update_success" }

{ data: {...}, status: 200, message: "delete_success" }

Ở front-end, em sẽ cho message vào hàm translate của i18n để hiển thị theo ngôn ngữ như vậy: t('product.message.'${response.message})

Theo mọi người làm như vậy có hợp lý không ạ. Có thể áp dụng vào dự án thực tế không ạ?
Làm như vậy có ưu điểm , nhược điểm j không ạ?

  • First: As a developer, you should research on the internet (preferably in English) before you start asking around. Such research forces you to read ALL available answers to your question and this enriches your knowledge enormously.
  • Then: If you don’t find a satisfactory answer, you can post your question in a forum like this DNH.

This is the ONLY way an IT developer grows into an experienced developer. The answer to your question can be found HERE.

1 Like

I have searched the internet, but there are few posts related to my question. They are discussed about translating message on backend or frontend. My question delves into more detailed aspects. Should I send the message as a code and pass it to the i18n function, or simply provide a brief error description and handle the error message using only the status?

Is my approach actually better? Do companies generally adopt such practices in their projects?

I created this post because I want everyone to share their thoughts on this issue.

1 Like

Of course, this is the best way to create software that can handle multiple languages. I may have misunderstood you. If so, I apologize.

send the message as a code and pass it to the i18n function, or simply provide a brief error description and handle the error message using only the status?

It depends. In my opinion, it is best to send the code to an i18n function. The reason is simple and obvious: an error message takes more time to get to the endpoint than a few bytes (as code) and an i18n function at the other end is always faster to process it. And that makes an application more lively for users.

không, đây là cách tệ.
vì khi này nếu backend thay đổi cái key -> bạn phải thay đổi cả frontend. và việc fix và deploy 2 products thì tất nhiên là mệt hơn rồi.
chưa kể việc đẩy 1 cục text nhiều ngôn ngữ vào frontend sẽ làm nó nặng hơn một cách không cần thiết, nếu app bạn rất nhiều text.

tốt nhất là chỉ để front-end hiển thị text từ backend trả về. cần đổi lang thì thêm params, set headers là xong.
nên bạn nên tiến hành i18n ở backend sẽ hợp lý hơn.

1 Like

mình nghĩ dùng i18n ở front-end không phải tệ đến vậy. Hiện tại mình đang dùng nextjs 14 và thấy có nh thư viện i18n đc recommend cho nextjs. Nếu việc sử dụng i18n ở front-end tệ đến vậy thì mình nghĩ nó sẽ không có nh người dùng như thế.
Còn việc thay đổi key thì đúng là sẽ phải sửa cả front-end và backend, nhưng cái này nên thống nhất từ trc giữa 2 bên thì sẽ giảm đc các trường hợp bị lỗi

1 Like

Correct. The data transfer from the backend to the frontend takes more time and causes more load on the network than if you let the i18n in the frontend be handled by the lightning-fast processor. Everyone who works with networks knows this problem.
Update: As I said, it depends… You can consult, for example, HERE and HERE for more information on this topic. My own experience as a network developer does not count here.

bản chất nextjs có khả năng i18n tốt là vì nextjs vốn dĩ là SSR by default. nên nếu bạn enable i18n thì nó cũng gửi lên server để render :flushed: thế khác gì i18n ở backend đâu?


thì mình có kêu là i18n ở FE tệ đâu nhỉ?
mà cách bạn đang thực hiện là tệ. việc gửi key từ BE về FE để i18n là 1 cách tệ.

2 Likes

Tui thì chỉ muốn nói rằng chủ topic bớt sống ảo & cãi nhau đi, và nên biêt dùng bảng viết thô sơ.

Khi anh ta hỏi “Theo mọi người làm như vậy có hợp lý không ạ”. Có vẻ như anh ta đang muốn người ta Yes, ai ngờ người ta No :smiley: Anh ta quay ra sắp sửa cãi nhau với người ta, nhưng điều buồn cười là khi xem các lập luận thấy anh ta bắt đầu đuối lý, cố bảo vệ cách implement không hợp lý của mình, nhưng cố chống chế. Tinh thần học hỏi như vậy là chưa ổn, cần luyện thêm để có cái “kỹ năng” hạnh phúc đó là open-minded.

1 Like

Rất muốn hỏi tiếp vì mình thực sự muốn học hỏi và đc giải thích rõ hơn, nhưng sợ mn lại nghĩ là cãi nhau và cố gắng muốn thắng nên mình sẽ dừng tại đây.
Xin cảm ơn mn đã góp ý

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