RFP: Internationalization setup

Preamble

Requests for proposals are not intended to be prescriptive or exhaustive. The community is encouraged to submit proposals that expand upon the ideas presented in this post. The scope of the project may change based on the proposals received. The primary intent of this document is to provide a starting point to achieve the outlined goals, and the final implementation may differ from the initial proposal.

The request for proposal is open till 1st of July 2025. Proposals will be reviewed afterwards.

All applications will follow the standard Grants DAO process. This request should not be interpreted as an offer.

Simple Summary

CoW Swap app currently supports only English, but there are user requests to add support for additional languages.

This RFP aims to allow the app to be translated into multiple languages, making it accessible to a broader audience and enhancing the user experience for non-English speakers.

Goal

The goal of this project is to add internationalization to the CoW Swap app. It will help to increase the app’s reach and appeal to a broader audience.

This will involve setting up a project for the app transaction, adjusting the interface for different languages, and providing an option to switch between languages within the app settings.

Deliverables

Add support for multiple languages.

  1. Setting for languages change:
  • Nicely designed and functional language switcher.
  1. Tool for internationalization
  • Clear explanation about the tool picked with technical evaluation.
  1. Internationalization preparation:
  • All strings are marked for translation;
  • The app supports diverse languages.
  1. Automatic language detection:
  • Use the browser’s locale settings to automatically detect the user’s language.
  1. Documentation:
  • Instructions to set up accounts for translations;
  • Instructions how to load translations to get a testable app version.
  1. Support and maintenance:
  • Respond to the feedback and fix bugs within the scope of the grant.

Specification

  1. Add a setting for languages change:
  • In the top right global setting menu
  • Provide UI mockups to be approved by the Frontend core team;
  • Account for dark/light modes;
  • Handle a basic logic to hide the switcher when there are no translations to diverse languages;
  • Do not translate language names in the settings.
  1. Evaluate options for translation libraries:
  • Take into account CoW Swap is currently integrated with https://lingui.dev version 4.10 (probably we’ll want to update to v5). Another option is https://crowdin.com/;
  • Provide options to be approved by the Frontend core team with pros/cons.
  1. Prepare app for translation:
  • Add a simple feature flag settable in the console that will control language switching feature;
  • Review all string literals that are user-facing and mark them for translation (including error messages);
  • Make sure the app builds and no crashes are introduced;
  • Setup/provide instructions to set up accounts for translations.
  1. Handle diverse languages:
  • Include basic sample text in languages with diverse writing systems to ensure the UI accommodates different styles. E.g. as non-Latin scripts, longer expressions. Russian is preferred for translation, as it effectively covers these cases;
  • Adjust the app’s UI to support different languages.
  1. Automated translations:
  • Setup translations to be run on every commit OR as a cronjob (on Github actions for example).
  1. Discoverability
  • Detect the user’s browser locale and switch to a language they use on the app load;
  • If there is no such language in the list, then switch to the default one (English);
  • Provide the possibility to change the language, save user’s selection per browser: if a user chooses a language different from the browser’s locale settings, avoid automatically switching the language;
  • App’s URL should not be modified once a different language is selected.
  1. Method:
  • Add internationalization (i18n) using a tool approved by the Frontend team.

Milestones

The grant should be split into milestones.

  1. Design phase:
  • Provide a mockup for the language switcher;
  • Rework after Frontend team review till the final approval.
  1. Preparation phase:
  • Provide a tool for internationalization with a clear explanation about it and its technical evaluation.
  1. Implementation phase:
  • Add a language switcher setting;
  • Internationalize the app using the approved tool;
  • Adjust the app’s UI to support different languages;
  • Provide properly tested outcome for the 1st round of review.
  1. Rework after Frontend’s team review:
  • Fix issues and address feedback.
  1. Provide a final outcome.

Evaluation Criteria

Proposals will be evaluated based on the following criteria:

  • Technical Expertise;
  • Project Plan and Timeline;
  • Budget;
  • Team Experience.

Values of Grants DAO and its Grants

These values may evolve and are listed in no particular order:

  • Open Source: Integrations should be open source.
  • Milestones: Milestones should be attainable and well-defined to ensure easy verification of completion.
  • Price Transparency: Pricing should be broken down into optional and core metrics/deliverables to allow selective implementation.
  • Sustainability: Address the sustainability of deliverables (e.g., who will manage, maintain, and for how long, including associated costs).
  • Simplicity: Aim for simplicity. Completion is often more valuable than striving for perfection—except for critical components, which must meet the highest standards.
  • Documentation: Provide solid documentation to ensure that others can build on your work smoothly, where applicable.
  • Flexibility: We recognize that some processes require flexibility (e.g., adding new features, adapting to changes in technology or infrastructure). Open communication is encouraged to adapt to these changes. Scope extensions and pricing changes typically require a committee vote.
  • Quality: Aim for quality. Provided outcome should be properly tested and correspond to the CoW Protocol quality standards.

Call for Action

  • Community: Before the RFP closes, community members may provide feedback on the requested specification and milestones by commenting below.

  • Applicants: Proposals should be submitted by 30 June 2025 using the standard Grants Program template.

Selection Process

The evaluation of the proposals will start from the 1st of July 2025, when the RPF deadline closes.

The selection will be made by the Grants DAO committee at their discretion. The committee will consider the cost, timing, quality, and scope in their decision-making. Committee members may ask questions or make a decision independently. The committee can also decide to close or extend the timeline or go with none of the submitted proposals.

Currently, there are no official rejection criteria. If the forum discussion does not provide a clear outcome, an applicant can post their proposal to the Grants DAO Snapshot space and request a committee vote if needed.

7 Likes

Looks like a great RFP!
@Chim9 will be Steward of the potential grant (with @le_zhy as Reviewer).

2 Likes

This RFP is fantastic, and COW will more fully adapt to internationalization and enhance the user experience.

2 Likes

Hey @le_zhy, we have some questions to assess the scope of our proposal:

  1. Is support for RTL languages included in the scope? If so, all UI components, menus, and number format styles would need updates, which could significantly increase the scope beyond the average estimate.

  2. Is it necessary to translate third-party errors (including those from the backend) that are sometimes displayed directly in the UI? If yes, is there a mapping guide we can refer to?

  3. We’re assuming that AI translation will suffice without requiring human verification. If this assumption is incorrect and native human verification is needed, what would the operations and QA processes for future versions look like?

  4. Is there an opportunity to collaborate with your design team to create more flexible UI designs for certain components?

Thanks :slight_smile:

1 Like

Hi @MoeNick ,
Thank you for taking an interest. Here are the answers:

  1. RTL languages are out of scope in the RFP.
  2. Yes. The mapping can be found in cowswap/apps/cowswap-frontend/src/api/cowProtocol/errors/OperatorError.ts at cf496eeb7461e7e147b365f51730eb57c13d3e1a ¡ cowprotocol/cowswap ¡ GitHub
  3. AI translation will suffice, but human verification will be required. In the scope of the current RFP one test language should be included (see Specification, p4.). Before sending a final outcome for the 1st round of review, the version should be properly tested by the grantee:
  • Translations should be logical;

  • UI should be adjusted in case it gets broken by the language change.

    Frontend’s team will review and test the outcome and will provide feedback to address (if any).
    Adding other languages is out of scope of the current RFP. Future operations and QA processes will be discussed in other proposals in case they are needed.

  1. Frontend/design team will review the proposal for the language switcher and provide feedback during the Grant’s design phase. Let us know if it answers your question. Otherwise, please, clarify what other components need to be negotiated with the design team.

Feel free to reach us out if you have other questions.

Thanks.

3 Likes

Hi @le_zhy !
Excited about the opportunity to contribute more to CoW Swap!

Quick question on the sustainability component. What is the expectation re maintenance and duration of it or should the project be delivered as a stand-alone initiative with a handover to CoW Swap team at the end?

2 Likes

Hi @margaret_a ,
Thanks for raising that point.

It should be the project delivered as a stand-alone initiative with a handover to the CoW Swap team at the end.
Support and maintenance should be done during testing phase: respond to the feedback and fix bugs within the scope of the grant.

Please reach out if you have any questions or need further clarification.

Thanks

4 Likes

Hi @le_zhy !

Just wanted to let you know that we have submitted our application here.

Hope being first to submit would reflect positively!
We’ll be looking forward to your feedback once you get a chance to review.

Thank you,
-Margaret

5 Likes

Great RFP! We’re definitely planning to participate @Chim9 and @le_zhy . We’re currently reviewing all the details and will reach out if any questions come up :raising_hands:

3 Likes

Thanks for the interest and submissions so far, we’re waiting for more proposals and will review everything after the July 1st deadline.

Please note that the reviewer for this RFP is currently out of office, but feel free to ask questions or request clarifications, they’ll be answered when possible.

3 Likes

Hey @Chim9 and @le_zhy !

We have just submitted the application HERE
Really excited about the chance to build for CoW Swap again! :raising_hands:

Regards,
Juanma

3 Likes

Hi @Chim9, following the Grants Application Guide, a Steward is expected to provide feedback on the proposal before it’s submitted to Snapshot. Should we wait for @le_zhy to review and engage in that back-and-forth, or go ahead and submit it directly to Snapshot?

Good Morning @le_zhy,

I hope this message finds you well.

I have a few questions regarding the aforementioned RFP.

-Could you let us know if you have a local preference or are you open to a Canadian agency that has done similar work with clients across the United States, with some currently being the States of California, Colorado and Wyoming?

-Do you have a specific time the proposal is due at or any time on the 30th of June

-How is the App currently built and what is the stack it is on currently? How would access be provided to the same to incorporate the internationalization?

-What is your budget for this work?

-We understand that the community is being invited to add commentary on what they would like as well within this RFP - At what stage would you consider this closed to accurately price out our proposal?

Thank you and I look forward to your response.

Kind regards,

1 Like

Thanks for the submission @JuanManuel! We’re currently awaiting more proposals and will begin reviewing everything after the July 1st deadline. And no need to post on Snapshot just yet, our reviewer and the Grants Committee (myself included) will go over all proposals then. If we have any comments or questions beforehand, we’ll let you know!

2 Likes

Good morning @NoahWeUsThem ,

Thank you for the interest and your questions.
Here are the answers:

-Could you let us know if you have a local preference or are you open to a Canadian agency that has done similar work with clients across the United States, with some currently being the States of California, Colorado and Wyoming?

We don’t have a local preference.

-Do you have a specific time the proposal is due at or any time on the 30th of June

01-07-2025 00.00 UTC

-How is the App currently built and what is the stack it is on currently? How would access be provided to the same to incorporate the internationalization?

For the app in question (CoW Swap), we use React with NX and Vite. The code is open source and it’s available in the monorepo: GitHub - cowprotocol/cowswap: 🐮 CowSwap: First CoW Protocol UI
All the instructions on how to run it should be there. Let us know if you have any further questions.

-What is your budget for this work?

The RFP does not anchor expectations by putting a budget amount as it’ll differ widely between projects depending on their cost and selected implementation.
Keep in mind that budget is one of the evaluation criteria.

-We understand that the community is being invited to add commentary on what they would like as well within this RFP - At what stage would you consider this closed to accurately price out our proposal?

There is no specific deadline for community input on the RFP. However, we consider the information currently provided in the RFP to be sufficient for the preparation of your proposal. Should there be any significant updates or changes, we will reach out and request that proposals be adjusted accordingly.

I hope this answers your questions.

Best regards,

1 Like