Skip to content
This repository was archived by the owner on Aug 18, 2023. It is now read-only.
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
feat: Add Crowdin integration for localization.
Create GH action workflow that pushes the latest strings file to Crowdin.
It then pulls the latest assets and generates a PR.

Also restructure German as a sub language in the group.
  • Loading branch information
Kiran-B committed Oct 4, 2022
commit e0860a12cb0cd76b33ce11cb42cab1fbce5c5e7e
9 changes: 9 additions & 0 deletions .crowdin.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
"project_id_env": "CROWDIN_PROJECT_ID"
"api_token_env" : "CROWDIN_PERSONAL_TOKEN"
"base_path": "brain-marks/Localization"
"files": [
{
"source": "en.lproj/Localizable.strings", #source files filter
"translation": "%two_letters_code%.lproj/Localizable.strings" #where translations are stored
}
]
50 changes: 50 additions & 0 deletions .github/workflows/localization.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
name: Localization Action

on:
push:
branches:
- 'dev'
paths:
- 'brain-marks/Localization/en.lproj/Localizable.strings'

jobs:
synchronize-with-crowdin:
runs-on: ubuntu-latest

steps:

- name: Checkout
uses: actions/checkout@v3

- name: crowdin action
uses: crowdin/[email protected]
with:
# upload options
upload_sources: true
upload_translations: true

# download options
download_translations: true

# Commit message for download translations
commit_message: "chore: New Crowdin translations by Github Action"

# Create pull request after pushing to branch
create_pull_request: true

# The title of the new pull request
pull_request_title: "chore: New Crowdin translations to review and merge"

# To add labels for created pull request
pull_request_labels: "translations"


# global options

# Specify a path to the configuration file, without / at the beginning'
config: '.crowdin.yml'

env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
14 changes: 2 additions & 12 deletions brain-marks.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@
DB64F8A52726BD5D00361E86 /* Contributor.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB64F8A42726BD5D00361E86 /* Contributor.swift */; };
DB64F8A727270A9B00361E86 /* ContributorProfileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB64F8A627270A9B00361E86 /* ContributorProfileView.swift */; };
DB8D63F92767B83B0065A429 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = DB8D63FB2767B83B0065A429 /* Localizable.strings */; };
DB8D63FE2767C3D20065A429 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = DB8D64002767C3D20065A429 /* Localizable.strings */; };
DBF50B54272467CF000D8B25 /* ContributorsListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBF50B51272467CF000D8B25 /* ContributorsListView.swift */; };
DBF50B55272467CF000D8B25 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBF50B52272467CF000D8B25 /* SettingsView.swift */; };
DBF50B56272467CF000D8B25 /* SettingsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBF50B53272467CF000D8B25 /* SettingsViewModel.swift */; };
Expand Down Expand Up @@ -87,6 +86,7 @@
91739DEA2622D2A7000F982A /* AddURLView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddURLView.swift; sourceTree = "<group>"; };
91C8958826228D1500689196 /* Tweet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tweet.swift; sourceTree = "<group>"; };
940E3C61272648310038D6AC /* CategorySheetViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CategorySheetViewModel.swift; sourceTree = "<group>"; };
9FD3920B28EC242800C70DDB /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = "<group>"; };
A205CD412622A3EB00517DB5 /* TweetList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TweetList.swift; sourceTree = "<group>"; };
A224A9E52622BCED00AC12AF /* TweetCard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TweetCard.swift; sourceTree = "<group>"; };
A2F4498B2622802B00725FEA /* CategoryRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CategoryRow.swift; sourceTree = "<group>"; };
Expand All @@ -101,7 +101,6 @@
DB64F8A42726BD5D00361E86 /* Contributor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Contributor.swift; sourceTree = "<group>"; };
DB64F8A627270A9B00361E86 /* ContributorProfileView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContributorProfileView.swift; sourceTree = "<group>"; };
DB8D63FA2767B83B0065A429 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
DB8D63FF2767C3D20065A429 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = "<group>"; };
DBF50B51272467CF000D8B25 /* ContributorsListView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContributorsListView.swift; sourceTree = "<group>"; };
DBF50B52272467CF000D8B25 /* SettingsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = "<group>"; };
DBF50B53272467CF000D8B25 /* SettingsViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsViewModel.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -223,7 +222,6 @@
isa = PBXGroup;
children = (
DB8D63FB2767B83B0065A429 /* Localizable.strings */,
DB8D64002767C3D20065A429 /* Localizable.strings */,
);
path = Localization;
sourceTree = "<group>";
Expand Down Expand Up @@ -509,7 +507,6 @@
buildActionMask = 2147483647;
files = (
DB8D63F92767B83B0065A429 /* Localizable.strings in Resources */,
DB8D63FE2767C3D20065A429 /* Localizable.strings in Resources */,
FFEBBB4126223F7E000F475F /* Preview Assets.xcassets in Resources */,
FFEBBB3E26223F7E000F475F /* Assets.xcassets in Resources */,
20636BDDDBEF4EAE9CCE9D9E /* amplifyconfiguration.json in Resources */,
Expand Down Expand Up @@ -638,14 +635,7 @@
children = (
DB8D63FA2767B83B0065A429 /* en */,
D3CD6EE028E92BD700F5EC76 /* fr */,
);
name = Localizable.strings;
sourceTree = "<group>";
};
DB8D64002767C3D20065A429 /* Localizable.strings */ = {
isa = PBXVariantGroup;
children = (
DB8D63FF2767C3D20065A429 /* de */,
9FD3920B28EC242800C70DDB /* de */,
);
name = Localizable.strings;
sourceTree = "<group>";
Expand Down