Grant Application - Internationalization setup for swap.cow.fi (v2)

Grant Title

Grant Application - Internationalization setup for swap.cow.fi

Note: this is a revised version of a previous proposal.

Author(s)

Senior UI Developer - Gabriel: ( gabitoesmiapodo (Gabito Esmiapodo) · GitHub )
Main Point of Contact - Manuel (manuel@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

M 1: Design phase
Tasks:

  1. Provide a mockup for the language switcher (for dark/light modes)
  2. Adjust as per CoW Swap team feedback.

Deliverable:

  • Language switcher design.

Outcomes:

  • UI design has been approved

Effort: 1 day

M 2 Preparation phase

Tasks:

  1. Prepare a 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

Outcomes:

  • Internationalization and translation tools selected and approved

Effort: 1 day

M 3 Implementation phase
Tasks:

  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.

Outcomes:

  • 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

Effort: 4–6 days

M 4 Implementation phase
Tasks:

  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.

Outcomes:

  • 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

Effort: 3–4 days

M 5 Rework after Frontend team review
Tasks:

  1. Fix issues/feedback.
  2. Create a document explaining the process of generating and editing .po files for new languages.

Deliverables:

  • Document with instructions (how to set up accounts for translations and load translations to get a testable app version).

Outcomes:

  • All feedback addressed.
  • A more polished app.
  • Clear process for adding languages that anyone can follow.

Effort: 2-3 days

M 6 Deployment
Tasks:

  1. Deploy the updated app.
  2. Handover call | - swap.cow.fi website updated.

Outcomes:

  • The CoW Swap team can easily add additional languages.

Effort: 1 day

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:

9,600 xDAI and 8,400 $COW, with the $COW portion subject to a standard 12-month vesting period for vested $COW, contingent upon the completion and satisfactory review of all remaining milestones in line with the standard grants process.

The grant will be utilized to deliver the above milestones over a period of 2-3 weeks for a team consisting of a UX/UI designer, a developer, an FE developer, a QA, and a PM, on an 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 our 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.

1 Like

Hi,
Thanks for submitting this revised proposal and following through with the implementation, it’s great to see it move forward! I just voted in favor.

To keep track of it, I’m reposting the Snapshot vote that you have set up : https://snapshot.box/#/s:cowgrants.eth/proposal/0xa9053fc9807815cad0bb806800b8e2868d715b37babcd15d304ee555a8558e2a