Translator in Coda for Knowledge Management System

Hi!

I’m working on the creation of a knowledge management system for an international team in Coda.

MUST-HAVE FEATURES:
Multi-language translation
Content to be updated easily

I’ve created a doc and added the Google Translate pack.
The content table have 1000 rows.
I use a filter formula (using as reference the row ID) to retrieve the content in the different topic page. Example below:

if(Select_Language=“Italian”, Filter([Content Table], [Row ID] = 1).[Original Content Column] ,Filter([Content Table], [Row ID] = 1).[Translated Content Column])

ISSUE:
Once a different language has been selected, it takes about 20 minutes to translate the doc.

Do you have any tip to optimise the doc speed? Or a different solution to achieve the goal?

I would really appreciate your help!

Thank you!

Hello @Carmelo_Cascone

I tried to reproduce your situation, but I did not encounter any problems.
Here is an example with 1,000 rows containing random sentences. The subpage “Text” includes a control to change the language. One difference in my approach is that I added a column to retrieve the selected text based on the control, instead of using an if statement repeatedly. Additionally, I used the Nth() formula instead of filtering by ID.

The first translation is indeed slow, but once loaded, I did not experience significant delays. Based on this, I have a few questions:

  1. How long is the text in each row?
  2. How often does the text change?
  3. Does my example accurately reflect your scenario?

Playable doc: Translation · Demos

Hi @Felipe_Arnhold ,

thank you so much for your contribution!

Your Demo pretty much reflects my case. Just few consideration:

  • SelText column definitely simplifies the formula in the translation page
  • Nth() operator in case of new rows added to the table, between existing ones, would shift the content in the main page thus chosen style/formatting for each line in the translation page, Row ID gives a unique reference for each row instead

Overall:
first syncing is very slow and if the page is closed+reopened/refreshed, this would take place again giving a bad UX to user. (We plan to have 10+ users at the same time with personal language selection).

Conclusion:
still looking for a solution that could help us in achieving our goal.

Thank you so much!

Hi Carmelo,

Do you have a fixed number of languages? If so, have you tried “saving” translations, so that the system only needs to translate once into a specific language.

P

Hi @Piet_Strydom,

thanks for your response!

That’s my plan b actually! Static Translation and ticketing system to collect content update request and then periodically fix content/translation in batches.

We are a startup so the content in the knowledge management system is rapidly evolving, that’s why I am looking for a more dynamic solution.

Thanks!

Carmelo

I was thinking of something like the following:

You have two tables, Source Language Content, and Translated Language Content. If you have 5 destination languages, you will have 6 times more rows in the Translated table than the source table.

When you add new content, you do so in the Source table. You click on a button, that will translate into the 5 languages, and post into the Translated table. Because you post the RESULT of the formula into the Translated table, and not the formula, the formula only gets executed once, when the button is pushed. The translations are available for all subsequent loads of the doc, without any need for re-translations. (Unless you change the source - if you do, you just re-click on the button(s) needed so the Translated table gets updated.

If you think that you might need to add a language in the future, add a check table for languages already translated. Then if you add a new language, the Translate Button can look at what has already been translated, and only translate the new language(s).

Does that give you ideas?
Piet

3 Likes

Hello @Carmelo_Cascone

I used Nth() because it was faster than filtering by row ID. However, you are correct that using the row ID guarantees a unique parameter.

If you want to maintain one column for the translated option and allow the user to select the language, I’m afraid it will always be slow. The solution proposed by @Piet_Strydom works as well. In that case, you can set up automations to update the translation whenever the text changes. Additionally, if the user selects a language that hasn’t been translated yet, you can add it to this second table. Of course, this addition will be slow.

Best Regards
Arnhold

1 Like

Thank you @Piet_Strydom for your tips! And thank you @Felipe_Arnhold for your feedback!

This how I did it taking inspiration from your ideas:

In the backend page:

  1. Added a Button “Translate Row to English” with Translate() formula in it
  2. Included a disable button condition based on Last Modify Date/Time comparison
  3. Added a “Translate All to English” at page level (Push Buttons function) to update Translation only in those rows with Original Content modified later than English one

In the reading page:

  1. I will use a formula: filter([Content Table], [Row ID] = 1).[Dynamic Content] with Dynamic Content column (based on user selected language) to pull rows
  2. I will set the formulas (changing Row IDs) and setup style and formatting in the reading page “row by row”

Overall:
PROs → (a) Easy to modify and translate content, (b) independent style and formatting for each row in the reading page
CONs → (c) Need to replicate the formula for each row modifying Row IDs

Text not successful

  • Google Chrome GTranslate Extension → did not translate some part of the text
    *Including formatting and style in the content table for each row partly available. It is possible to setup e.g. Bold and text size based on row type (header or text) but not possible to setup specific rows a Headers and generate the outline from it) → the row by row styling and formatting in the reading page would be needed anyway

Hope this helps! And if you have further tips or comments, feel free to share them!

Thanks!

1 Like

HI Carmelo,

This looks great, glad I could assist some.

I do not follow the purpose of linking via rowId()?

One more suggestion - I would change the English Content column into two columns as below:
(Sorry, seem not to be able to create table/ column. Should be three columns:
Original Content
Language
Translated content

Orig Cont | Language | Translated Content
Ciao! | EN | Hi!
Ciao! | AF | More!
Ciao! | JP | Konitchiwa!