Grant Application - Internationalization setup for swap.cow.fi

Grant Title

Grant Application - Internationalization setup for swap.cow.fi

Author(s)

Senior UI Developer - Gabriel: (gabitoesmiapodo (Gabito Esmiapodo) · GitHub)
Main Point of Contact - Margaret (margaret@bootnode.dev)

Experiences and qualifications

BootNode is a high-output engineering and product shop specializing in DeFi, staking, infrastructure, and interoperability. We help protocols and builders ship faster and scale smarter — from zero to mainnet and beyond.

Our Expertise & Customers are available by the link.

The team that will be delivering the project includes:

Projects done by the team, including design and QA:

  • Wormhole - no-code Multichain Token Launchpad leveraging Wormhole’s NTT technology that allows users to upgrade existing ERC20 tokens or create entirely new multichain tokens securely and seamlessly.
  • Gnosis Bridge & Explorer that allows users to bridge DAI and other tokens from Ethereum to Gnosis Chain and back, and explore bridge transactions status (utilises xDAI and OmniBridge protocols under the hood).
  • uRamp that seamlessly handles the end-to-end flow of moving Euro from a Bank IBAN (International Bank Account Number) to any ERC20 on any EVM chain and back (leveraging the Monerium and Li.Fi SDKs to ensure a smooth experience).
  • Infinex Council-based governance FE (not live yet)
  • xERC20 token Launchpad
  • dAppBooster - front-end starter kit

More details on the mentioned projects are available by the link.

Grant Description:

The grant aims to add internationalization to swap.cow.fi, helping to increase protocol usage across non-English-speaking markets while strengthening trust and brand recognition.

The initial implementation will support English (the current language) and Russian (for testing), with the possibility of adding additional languages in the future.

As an outcome of this grant delivery, we hope to have increased the number of transactions and new plus repeat visitors on the swap.cow.fi.

Current internationalization status and our technical suggestions:

  1. Language Detection. The application currently does not correctly detect the browser’s language, which will be fixed. If the detected language is not available, the system will default to English. Additionally, the user’s language preference will be stored (similarly to how theme preferences are stored) if they choose a different language using the language selector.

  2. State Management. Redux is currently used for state management and will continue to be utilized.

  3. Internationalization Framework. Internationalization is currently implemented using the Lingui library, although it is not fully functional. Lingui is a solid tool, and there is no clear need to replace it. Switching to a different library would incur unnecessary time and resource costs. We therefore recommend:

    • Upgrading Lingui to version 5.
    • Completing any missing implementations and resolve existing configuration issues.
  4. Translation Keys. While many macros for exporting translation keys have already been implemented, a significant number remain unaddressed. A complete review of the entire application will be done to identify and add the missing keys.

  5. Language Selector Design. A minimal and appropriate design will be created to implement the language selector interface.

  6. Language selector implementation.

    • The language selector will save the selected language using the current state management solution.
    • A configuration option will be added to hide/show the language selection dropdown.
    • A console command will be available to switch languages when the language selection dropdown is hidden.
  7. Translation Management. We suggest handling translations using Crowdin. Initially, translations will be provided only for Russian.

  8. Automated Translations and CI Integration can be done with a combination of Lingui, Crowdin, and GitHub actions. We tested the approach here. Crowdin translated this file automatically (used the Spanish file as an example).

  9. Documentation. Instructional materials will be created to guide future contributors on how to add new internationalization files.

Type of Grant:

Milestones-based

Milestones:

Milestone # Tasks & Deliverables Outcomes Due Date Funding
M 1 Design phase:
1. Provide a mockup for the language switcher (for dark/light modes)
2. Adjust as per CoW Swap team feedback.

Deliverable: Language switcher design.
- UI design has been approved 1 day 1,500 xDAI
M 2 Preparation phase:
1. Prepare technical evaluation of the suggested internationalization and translation tool (Internationalization: Lingui. Translation: Crowdin)
2. Get approval from the CoW Swap team

Deliverable: Technical evaluation document of the suggested tools
- Internationalization and translation tools selected and approved 1 day 1,000 xDAI
M 3 Implementation phase:
1. Update Lingui to v5
2. Fix automatic language detection (the browser’s / user’s language).
3. Internationalize the app using the approved tool (Lingui). Adjust the app’s UI to support different languages:
    - Scrap the whole app for text strings that need translation.
    - Add macros for internationalization file generation.
    - Keep layout modifications to a minimum, adjust container widths / heights / paddings were absolutely necessary. Most issues should be handled by word wrapping unless text is heavily cramped.
4. Generate Russian .po file (enable Russian in the Lingui settings + Crowdin project, set up a pre-push git hook for string extraction)
    - Set up translations to update every time there’s a change to the translation files through a combination of: git hooks + Lingui + Crowdin + GitHub actions.

Deliverable: Translated Russian .po file.
- Lingui updated to v5
- The app detects the user’s language correctly
- The app defaults to English if the user’s language is not available
- A PR will be automatically created with the updated translations so they can be reviewed before merging.
- UI (desktop and responsive) is properly adjusted to the chosen language
4–6 days 7,000 xDAI
M 4 Implementation phase:
1. Implement the language switcher (dropdown). It should be hidden when there are no translations to diverse languages.
2. Allow to disable the feature (hiding the dropdown) using a config variable or change a language with a console command for testing purposes.
3. Perform internal testing

Deliverable: Working language switcher.
- The user can select English or Russian.
- The interface updates when the language is switched.
- The app saves the selected language.
- PR is set for UAT by CoW Swap team
3–4 days 3,500 xDAI
M 5 Rework after Frontend team review:
1. Fix issues/feedback.
2. Create a document explaining the process of generating and editing .po files for new languages.

Deliverable: Document with instructions (how to set up accounts for translations and load translations to get a testable app version).
- All feedback addressed.
- A more polished app.
- Clear process for adding languages that anyone can follow.
2–3 days 2,000 xDAI
M 6 Deployment
1. Deploy the updated app.
2. Handover call
- swap.cow.fi website updated.
- The CoW Swap team can easily add additional languages.
1 day 1,000 xDAI

Length

We envision the grant delivery to take 11-15 days (2-3 weeks). Actual delivery timeline will depend on the CoW Swap team’s review turnaround.
This proposal does not include maintenance of the solution post deployment as it was not part of the requirements, but we are happy to provide light maintenance if requested.

We are ready to start as soon as the grant is approved.

Funding Request:

We are requesting 16,000 xDAI and 14,000 COW to deliver the outlined scope of work.

xDAI amounts to be distributed upon successful completion and approval of each milestone, while COW - upon final delivery approval subject to a 6-month lock.

The grant will be utilized to deliver the above milestones during a period of 2-3 weeks for a team of a UX/UI designer and developer, FE developer, QA and a PM on as needed basis (potentially longer depending on CoW Swap’s feedback cycles).

Gnosis Chain Address

0x1C7645a077f2f2546bdf896eDEBE5743457462fC

Other Information

You can find testimonials from amazing projects on experience working with us by the link

Terms and Conditions

By submitting this grant application, I acknowledge and agree to be bound by the CoW DAO Participation Agreement and the CoW DAO Grant Agreement Terms.

3 Likes

Hi @le_zhy and the CoW DAO community!

Letting you know that we have made an adjustment to our proposal adding 3 additional days total for M3 and M4 to have a bit more time for necessary layout modifications and additional QA.
As a result, delivery timelines increased from 1.5-2.5 weeks to 2-3 weeks.
We have reflected the change only in the xDAI part of the budget to keep things as lean as possible.

Hope this is acceptable and let me know if you have any questions!
-Margaret

2 Likes

I apologize, but when in other swap applications the language is automatically changed to my native language, it is very inconvenient for me. Many terms exist only in English and are almost not translated into other languages ​​(or are very unclear). It turns out that the efforts were aimed at attracting, but on the contrary, it is inconvenient for me and I go to the settings and I am back to English

I mean that perhaps some research is needed - to what extent languages ​​will help to attract more audience.

1 Like

Thank you for your comment and feedback! I totally get where you’re coming from, up until a few months ago I also found it frustrating when dapps defaulted to my browser/OS language … and right, a lot of crypto terms are just clearer in English. But I’ve since realized that my experience as a “crypto native” (my first experience with crypto was almost a decade ago) doesn’t necessarily reflect today’s average user… more and more people entering the space want to interact in their native language, and in the communities I’m part of that’s becoming pretty clear…
So while it might feel awkward for some of us, I think the RFP makes a lot of sense if the goal is to grow CoW Protocol beyond the usual “early adopter” crowd and reach new markets! And in my opinion, giving users more options is always a good thing!

1 Like

Hi @cp0x
Thank you for your comment!
We understand the concern and ourselves prefer to engage with apps in English as opposed to the native language, however the goal of the proposal (and the original RFP proposed by CoW Swap team) is to attract new users/markets who prefer interacting with apps in their own native languages and/or may not be well-versed in English. Examples being China, Japan, South Korea, Russia, France, …