Page MenuHomePhabricator

Proposal: (GSoC 2024) Scribe-iOS: Add multilingual translation and internationalized interfaces
Closed, ResolvedPublic

Description

Profile

Name: Marcel Mehl
Email: marcelmehl123@gmail.com
GitHub: https://github.com/Jag-Marcel
Location: Germany
Typical working hours: 8am to 10pm (UTC +2), whenever I don't have Uni

Synopsis

1. Translation for other languages

The Project focuses on an iOS keyboard app aimed at language learners, that lets you translate or conjugate words in foreign languages. Currently, users can only translate from English into their target language; the goal is for the user to be able to choose from a multitude of languages to make the keyboard more accessible to language learners around the world.
This language would be applied to all keyboards belonging to the project. The user selects his native language in the app and can use the corresponding keyboard for translating into every other language.
At first, the focus will be to implement this feature for the languages Scribe already has keyboards for. Later on, more keyboards could be added that don’t have any Scribe functionality and only serve this feature (e.g. Arabic, Japanese). For languages written right to left (like Arabic) the app and Scribe components on the keyboard would be mirrored accordingly.

Example of the current system:

Simulator Screenshot - iPhone 15 Pro - 2024-03-27 at 14.50.22.jpeg (1×1 px, 126 KB)

Simulator Screenshot - iPhone 15 Pro - 2024-03-27 at 14.50.31.jpeg (1×1 px, 144 KB)

Simulator Screenshot - iPhone 15 Pro - 2024-03-27 at 14.50.57.jpeg (1×1 px, 146 KB)

2. Generalizing and crowdsourcing app localization

Another focus would be for the localization inside the app to be controlled independently of the main repositories’ files by using JSON file references. It should take in account the user’s system language and use it as the default. The localization files would be specified in the Scribe-i18n repository, which would function as a git subtree for all Scribe applications (iOS, Android and Desktop).

Diagram of how it would work in the planned Scribe architecture:

Screenshot 2024-04-01 at 10.59.48.png (1×2 px, 257 KB)

Once this system is set up, more languages could be added by adopting a crowd translation tool like Transifex, Crowdin or Weblate, to make the process more easy and quick, as well as to make the translations more accurate. Mentors and other members of the team could volunteer to do translation in languages they speak as well.

3. Additional plans

Additionally, some smaller quality of life changes are planned. Currently, the Scribe button only functions by pressing it and entering a word to translate or conjugate afterwards. The plan is to let the user highlight a word and press the Scribe button to conjugate the word after it was already typed. How this functions in detail will have to be determined by testing different versions within the team. Another addition could be correcting a word’s article easier or even automatically in languages like German.
Lastly, more keyboards with Scribe functionality could be added to the app, ideally in cooperation with native or fluent speakers.

Deliverables

Reports
Timeline
May:
  • Onboarding within the community bonding period
Week 1:
Week 2:
Week 3:
Week 4:
  • Did minor fixes and changes to some PRs and scripts to get them merged / fix the localization process [ 1 | 2 | 3 ]
  • Had a call about the problems I'd been having and decided a more detailed plan to go forward
Week 5:
Week 6-7:
  • Break due to exams
Week 8:
Week 9:
Week 10:
Week 11:
Week 12:
Week 13:

Participation

I communicate with my mentors on the project's matrix space and would publish my code on its GitHub repository. We have also been doing bi-weekly meetings on Saturdays, and my mentors have made it clear that they can be available for calls when needed. More specific communications can also happen on GitHub issues and pull requests.

About Me

I am in my first year of BSc Computer Science at the Carl von Ossietzky University of Oldenburg. I heard about the GSoC program from my project mentor's recommendation. I will make this project my top priority besides my second semester, but I might not be as active during exams season and the like.

As a learner of four different languages throughout my life, this project's mission to make language learning more convenient in day-to-day situations really spoke to me, and I've been looking to work on it since I heard about it on GitHub. I am excited by the possibility that I can connect my passions for coding and languages in this way to make language learning easier for everyone.

Technical Knowledge

As part of High School and University education, I’ve had experience in Java programming, algorithms and data structures, as well as object-oriented programming and databases.

Past Experience

I've finished the following tasks regarding the project:

and am currently working on the following:

This gave me a fairly good understanding of the Scribe-iOS code base and helped me understand SwiftUI and working on iOS better.

I've worked a little on a previous project using Swift as well:

This gave me an introduction to the programming language and its working environment, as well as doing front-end work for the first time.

Benefits to Wikimedia

Scribe relies on Wikidata for its lexeme data (e.g. for conjugation), so developing it for higher accessibility would serve to reach many more users. This would show the potential of Wikidata as a data source for applications.

Event Timeline

Week 1: 27/05 - 02/06
Completed tasks

Week 3: 10/06 - 14/06

Completed tasks
Learned
  • Learned more about GitHub actions and Python
  • Learned some of the differences between SwiftUI and UIKit in Swift
Goals for next week
Week 4: 17/06 - 22/06
Completed tasks
  • Did minor fixes and changes to some PRs and scripts to get them merged / fix the localization process [ 1 | 2 | 3 ]
  • Had a call about the problems I'd been having and decided a more detailed plan to go forward
Learned
  • Learned to ask mentors when I'm having major issues
  • Learned more precisely about python programming
Goals for next week
Week 5: 24/06 - 29/06
Completed Tasks
Learned
  • Learned how to work with storyboard files
  • Learned how to create new button views and corresponding .xib design files
Weeks 6 and 7: 01/07 - 14/07

I will be taking a break during these weeks to focus on exams, as I agreed to with my mentors

Goals for week 8
  • Finish the radio button, including designs for the radio selection icon
  • Create view that lets the user choose a translation language
Week 8: 15/07 - 20/07
Completed Tasks
Learned
  • Learned interactions between .swift and .xib files and how to create new classes for views and cells
Goals for next week
Week 9: 22/07 - 27/07
Completed Tasks
Learned
  • Learned more about how Swift views work, particularly in Scribe
  • Learned the UserDefaults system in Swift which lets you save user's chosen options
Goals for Next Week
Week 10: 29/07 - 03/08
Completed Tasks
Learned
  • Learned more about how Xcode treats strings for localization
  • Learned how to add a new keyboard to the app
  • Learned more about the app's backend processes for Scribe commands
Goals for next week
  • Wait on translation and language data tables for the translation selection and English keyboard PRs, and merge them in once they're done
  • Discuss best practices on propagating highlighted text into Scribe commands, as described in the respective PR, in the next dev sync
  • Remove conditional from broken GitHub action since it doesn't seem to be working and we expect the action to be required almost every time anyway
  • If there's enough time, look into other issues from chapter 3 to do
Week 12: 12/08 - 17/08
Completed Tasks
Learned
  • Learned more about the backend process of how prompts are carried out in conjugation and translation within the app
  • Learned more about how Python works, especially the 'json' package
Goals for next week
Week 13: 19/08 - 24/08
Completed Tasks
Learned
  • Learned more about how the SQLite framework we use for Scribe handles querying

Closing this task out, as Outreachy Round 28 has ended. Thanks for all your contributions to this project, @Jag-Marcel, and thanks to your mentors for being a fountain of knowledge - @AndrewTavis, @Henrikt93, @wkyoshida

Outreachy Round 29 is currently seeking projects and mentors, if there are remaining tasks on this project that you'd like to submit for Outreachy Round 29, please add them to T372834 and to the Outreachy site before September 11, 2024. Feel free to reach out with any questions, thanks!

Thanks for the great work here, @Jag-Marcel! 🎉😊