- [Open a localization issue](https://github.com/scribe-org/Scribe-iOS/issues/new?assignees=&labels=localization&template=localization.yml) to add a new readme to the [README](https://github.com/scribe-org/Scribe-iOS/tree/main/README) directory
Scribe-iOS is a pack of iOS and iPadOS keyboards for language learners. Features include translation (beta)
, verb conjugation and word annotation that give users the tools needed to communicate with confidence.
Scribe is fully open-source and does not collect usage data or ask for system access. Feature data is sourced from Wikidata and stored in-app, meaning Scribe is a highly responsive experience that does not require an internet connection.
[!NOTE]\ The contributing section has information for those interested, with the articles and presentations in featured by also being good resources for learning more about Scribe.
Also available on Android (WIP), Desktop (planned) and for the data processes see Scribe-Data.
Check out Scribe's architecture diagrams for an overview of the organization including our applications, services and processes. It depicts the projects that Scribe is developing as well as the relationships between them and the external systems with which they interact.
β§
The following are the preview videos for the App Store:
https://user-images.githubusercontent.com/24387426/231612346-af8b3f62-adf1-4f24-a6ff-91bfb6232c35.mp4
β§
Scribe uses Matrix for communications. You're more than welcome to join us in our public chat rooms to share ideas, ask questions or just say hi :)
Please also see the contribution guidelines if you are interested in contributing to Scribe-iOS. Work that is in progress or could be implemented is tracked in the issues and projects.
[!NOTE]\ Just because an issue is assigned on GitHub doesn't mean that the team isn't interested in your contribution! Feel free to write in the issues and we can potentially reassign it to you.
Those interested can further check the -next release-
and -priority-
labels in the issues for those that are most important, as well as those marked good first issue
that are tailored for first time contributors. For those new to coding or our tech stack, we've collected links to helpful documentation pages in the contribution guidelines.
After your first few pull requests organization members would be happy to discuss granting you further rights as a contributor, with a maintainer role then being possible after continued interest in the project. Scribe seeks to be an inclusive and supportive organization. We'd love to have you on the team!
β§
β§
The Scribe road map can be followed in the organization's project board where we list the most important issues along with their priority, status and an indication of which sub projects they're included in (if applicable).
[!NOTE]\ Consider joining our bi-weekly developer syncs!
β§
The designs for Scribe are made using Figma. The App Store videos, images and text can be found in the AppStore directory. Those with interest in contributing can open a design issue to make suggestions! Design related issues are marked with the design
label.
β§
[!NOTE]\ Please see the Wikidata and Scribe Guide for an overview of Wikidata and how Scribe uses it.
Scribe does not accept direct edits to the grammar JSON files as they are sourced from Wikidata. Edits can be discussed and the Scribe-Data queries will be changed and ran before an update. If there is a problem with one of the files, then the fix should be made on Wikidata and not on Scribe. Feel free to let us know that edits have been made by opening a data issue or contacting us in the issues for Scribe-Data and we'll be happy to integrate them!
β§
Scribe-iOS is developed using the Swift coding language. Those new to Swift or wanting to develop their skills are more than welcome to contribute! The first step on your Swift journey would be to read through the Swift documentation. The general steps to setting up a development environment are:
Download Xcode
Fork the Scribe-iOS repo, clone your fork, and configure the remotes:
[!NOTE]
Consider using SSH
Alternatively to using HTTPS as in the instructions below, consider SSH to interact with GitHub from the terminal. SSH allows you to connect without a user-pass authentication flow. To run git commands with SSH, remember then to substitute the HTTPS URL, `https://github.com/...`, with the SSH one, `git@github.com:...`. - e.g. Cloning now becomes `git clone git@github.com:
/Scribe-iOS.git` GitHub also has their documentation on how to [Generate a new SSH key](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent) π
# Clone your fork of the repo into the current directory.
git clone https://github.com/<your-username>/Scribe-iOS.git
# Navigate to the newly cloned directory.
cd Scribe-iOS
# Assign the original repo to a remote called "upstream".
git remote add upstream https://github.com/scribe-org/Scribe-iOS.git
git remote -v
you should see two remote repositories named:
origin
(forked repository)upstream
(Scribe-iOS repository)pip install pre-commit
pre-commit install
# pre-commit run --all-files
Open the Scribe-iOS directory in Xcode
In order to run Scribe on an emulator:
Start the active scheme
Build the developer documentation by selecting Product
> Build Documentation
(^β§βD)
[!NOTE] Feel free to contact the team in the iOS room on Matrix if you're having problems getting your environment setup!
[!WARNING]\ Note on Debugging: Because Scribe is a keyboard extension, the Xcode debugger doesn't work as expected when debugging a regular app. Please see the note on debugging in CONTRIBUTING.md to learn how to get it working properly.
β§
Users access Scribe language keyboards through the following:
For more information on features and use cases, see Keyboard Features below!
β§
Scribe's goal is functional, feature-rich keyboards for all languages. Check scribe_data/extract_transform for queries for currently supported languages and those that have substantial data on Wikidata. Also see the new keyboard
label in the Issues for keyboards that are currently in progress or being discussed, and suggest a new keyboard if you don't see it being worked on already!
The following table shows the supported languages and the amount of data available for each on Wikidata and via Unicode CLDR for emojis:
Languages | Nouns | Verbs | Translations* | Prepositionsβ | Emoji Keywords |
---|---|---|---|---|---|
French | 18,082 | 6,575 | 67,652 | - | 2,488 |
German | 194,762 | 3,637 | 67,652 | 215 | 2,898 |
Italian | 59,910 | 7,654 | 67,652 | - | 2,457 |
Portuguese | 5,281 | 539 | 67,652 | - | 2,327 |
Russian | 194,567 | 15 | 67,652 | 15 | 3,827 |
Spanish | 62,949 | 7,938 | 67,652 | - | 3,134 |
Swedish | 47,039 | 4,682 | 67,652 | - | 2,913 |
*
Given the current beta
status where words are machine translated.
β
Only for languages for which preposition annotation is needed.
Updates to the above data can be done using scribe_data/load/update_data.py.
β§
Keyboard features are accessed via the Scribe key
at the top left of any Scribe keyboard. Pressing this key gives the user three new selectable options: Translate
, Conjugate
and Plural
in the keyboard's language. These keys allow for words to be queried and inserted into the text field followed by a space.
Current features include:
β§
The beta
Translate
feature can translate single words or phrases from English into the language of the current keyboard when the return
key is pressed. The goal is that Translate
will eventually provide options for entered words where a user can use grammatical categories and synonyms to select the best option (see issue). Then the feature will expand to allow translations from system and chosen languages. More advanced methods will be planned once this feature is out of beta
.
As of now translations are not widely available on Wikidata (see issue). The current functionality is thus based on π€ Transformers machine translations of words queried from Wikidata. The ultimate goal is for the translations and synonyms to all be directly queried.
β§
With the Conjugate
feature, a user is presented with the grammar charts for an entered verb instead of the keyboard. Pressing an example in the charts inserts the chosen conjugation into the text field.
β§
The Plural
feature allows a user to enter a noun and then insert its plural into the text field when the return
key is pressed.
β§
Scribe further annotates words in the command bar to help users understand the context of what they're typing. Annotations are displayed once a user has typed a given word and pressed space, after commands, by pressing the Scribe key
while it is selected as well as under autocompletions and autosuggestions. The hope is that annotation will help a user remember grammar rules even when not using Scribe.
Scribe annotates nouns in the command bar according to the following conventions:
The above form abbreviations are translated into their equivalents in the keyboard's language.
Scribe also annotates the grammatical cases (accusative, dative, etc) of prepositions in the command bar if there is a relation in the given language.
β§
Annotations for preposition cases can also be pressed to provide a conjugation display where the user can select the proper pronoun for the given case. The conjugation view will also provide appropriate interfaces to subset the available pronouns based on the desired subject and object combinations to help the user make the correct choice.
β§
The goal is for Scribe to have all the functionality of system keyboards. See the issues if interested in helping.
- iPhone and iPad support - Dynamic layouts for cross-device performance - Portrait and landscape modes - Dark mode compatibility - Autocompletion based on [Wikidata](https://www.wikidata.org/) sourced words - Autosuggestion based on [Wikipedia](https://www.wikipedia.org/) derived relationships - Emoji autocompletions and autosuggestions based on [Unicode CLDR](https://github.com/unicode-org/cldr) sourced emojis - Autocorrect (WIP - see [Autocorrect](https://github.com/scribe-org/Scribe-iOS/issues/2) issue) - Auto-capitalization following `.`, `?` and `!` - The double space period shortcut - Typing symbols and numbers followed by a space returns keyboard to letters - Hold-to-select characters for letters and symbols - Key pop up views for letters and symbols
β§
A future feature of Scribe is language practice within the app itself. Scribe presents users with information that is directly relevant to their current struggles with a second language. This information can be saved in-app and used to create personalized lessons such as flashcards to reinforce the information that Scribe has provided.
β§
2024 - October: [Blog post on Medium](https://medium.com/@arpita151103/scribe-an-open-source-solution-for-language-learning-and-data-accessibility-092dab026fd6) discussing the [Scribe-Data](https://github.com/scribe-org/Scribe-Data) development process, community and features - October: [Blog post on medium](https://medium.com/@mhmohona/ins-and-outs-of-scribe-data-cli-bd51202aa7c6) describing the main features of [Scribe-Data](https://github.com/scribe-org/Scribe-Data) - September: [Final Google Summer of Code report](https://medium.com/@mhmohona/the-final-stretch-gsoc-journey-with-scribe-data-1740084c958d) on the creation of the [Scribe-Data](https://github.com/scribe-org/Scribe-Data) CLI - August: [Final Google Summer of Code report](https://jagmarcel.hashnode.dev/gsoc-2024-final-report) on the creation of Scribe's cross-language translation functionality - July: [Blog post on Medium](https://medium.com/@mhmohona/halfway-there-my-gsoc-adventure-with-scribe-data-cli-2ffe6d727ecb) about the progress on creating the [Scribe-Data](https://github.com/scribe-org/Scribe-Data) CLI - July: [Blog post on Hashnode](https://jagmarcel.hashnode.dev/gsoc-2024-midterm-report) providing an midterm report on the localization and translation expansion for [Scribe-iOS](https://github.com/scribe-org/Scribe-iOS) - July: [Blog post on Hashnode](https://jagmarcel.hashnode.dev/my-first-experiences-with-gsoc) about the initial steps towards the localization of [Scribe-iOS](https://github.com/scribe-org/Scribe-iOS) - June: [Blog post on Medium](https://medium.com/@mhmohona/first-month-as-a-gsoc-intern-building-scribe-data-cli-d0c12c9e8371) about the planned [Scribe-Data](https://github.com/scribe-org/Scribe-Data) CLI - April: [Blog post on Medium](https://medium.com/@mhmohona/scribe-data-a-guide-to-open-source-language-data-a801c59db4c9) about [Scribe-Data](https://github.com/scribe-org/Scribe-Data) and its functionalities - February: [Presentation slides](https://docs.google.com/presentation/d/1lMhYiQx1R99SVGhbikUGjOVaFgPPASvbzM2Bsu3NXSg/edit?usp=sharing) for Scribe's participation at the [Wikimedia Tech Safari Program](https://www.mediawiki.org/wiki/Wikimedia_Tech_Safari_Program) 2023 - August: [Scribe-iOS final submission report for Google Summer of Code 2023](https://saurabhjamadagni.hashnode.dev/gsoc-23-final-work-submission) - June: [Scribe-iOS development blog post on Nested UITableViews & Apple's built-in ViewControllers in app menu](https://saurabhjamadagni.hashnode.dev/nested-uitableviews-apples-built-in-viewcontrollers) for [GSoC '23](https://www.mediawiki.org/wiki/Google_Summer_of_Code/2023#Accepted_projects:~:text=links%3A%20Phabricator%20issue-,3.%20Adding%20a%20Menu%20and%20Keyboards%20to%20Scribe%2DiOS,-%5Bedit%5D) - March: [Presentation slides](https://docs.google.com/presentation/d/1W4ZkGi9UDDiTxM_silEij0gTE8YEubluHxe78xoqEP0/edit?usp=sharing) for a talk at [Berlin Hack and Tell](https://bhnt.c-base.org/) ([Hack of the month winner π](https://bhnt.c-base.org/2023-03-28-no87-moore-hacks)) 2022 - August: [Presentation slides](https://docs.google.com/presentation/d/12WNSt5xgNIAmSxPfvjno9-sBMGlvxG_xSaAxmHQDRNQ/edit?usp=sharing) for a session at the [2022 Wikimania Hackathon](https://wikimania.wikimedia.org/wiki/2022:Hackathon) - July: [Presentation slides](https://docs.google.com/presentation/d/10Ai0-b8XUj5u9Hw4UgBtB7ufiPhvfFrb1vEUEyXYr5w/edit?usp=sharing) for a talk at [CocoaHeads Berlin](https://www.meetup.com/cocoaheads-berlin/) - July: [Video on Scribe](https://www.youtube.com/watch?v=4GpFN0gGmy4&list=PL66MRMNlLyR7p9wsYVfuqJOjKZpbuwp8U&index=6) for [Wikimedia Celtic Knot 2022](https://meta.wikimedia.org/wiki/Celtic_Knot_Conference_2022) - June: [Presentation slides](https://docs.google.com/presentation/d/1K2lj8PPgdx12I-xuhm--CBLrGm-Cz50NJmbp96zpGrk/edit?usp=sharing) for a talk with the [LD4 Wikidata Affinity Group](https://www.wikidata.org/wiki/Wikidata:WikiProject_LD4_Wikidata_Affinity_Group) - June: [Scribe](https://github.com/scribe-org) featured for new developers on [MediaWiki](https://www.mediawiki.org/wiki/New_Developers#Scribe) - May: [Presentation slides](https://docs.google.com/presentation/d/1Cu3VwQ3lJUp5W84YDe0AFYS-6zfBxKsm0MI-OMl_IzY/edit?usp=sharing) for [Wikimedia Hackathon 2022](https://www.mediawiki.org/wiki/Wikimedia_Hackathon_2022) - March: [Blog post](https://tech-news.wikimedia.de/en/2022/03/18/lexicographical-data-for-language-learners-the-wikidata-based-app-scribe/) on [Scribe-iOS](https://github.com/scribe-org/Scribe-iOS) for [Wikimedia Tech News](https://tech-news.wikimedia.de/en/homepage/) ([DE](https://tech-news.wikimedia.de/2022/03/18/sprachenlernen-mit-lexikografische-daten-die-wikidata-basierte-app-scribe/) / [Tweet](https://twitter.com/wikidata/status/1507335538596106257?s=20&t=YGRGamftI-5B_VwQ_bFRhA)) - March: [Presentation slides](https://docs.google.com/presentation/d/16ld_rCbwJCiAdRrfhF-Fq9Wm_ciHCbk_HCzGQs6TB1Q/edit?usp=sharing) for [Wikidata Data Reuse Days 2022](https://diff.wikimedia.org/event/wikidata-data-reuse-days-2022/)
β§
Many thanks to all the Scribe-iOS contributors! π
The Scribe team would like to thank all the great software that made Scribe-iOS' development possible π