Compare commits

..

No commits in common. "master" and "v0.5.0" have entirely different histories.

294 changed files with 7634 additions and 14479 deletions

View File

@ -1,9 +1,10 @@
---
name: "\U0001F41B Bug report"
about: Create a report to help us improve
title: ""
title: ''
labels: bug
assignees: ""
assignees: ''
---
### Device info
@ -11,10 +12,8 @@ assignees: ""
- OS: [eg. iOS/Android]
- OS version: [eg. 10]
- Device: [eg. OnePlus 6]
- Lemmur version: [eg. v1.2.3]
### Describe the bug
A clear and concise description of what the bug is.
### Steps to reproduce
@ -24,22 +23,11 @@ A clear and concise description of what the bug is.
3. Scroll down to '....'
4. See error
### Relevant logs
<details>
<summary>Logs</summary>
Paste your logs here. Logs can be found in lemmur: settings > about lemmur > logs.
</details>
### Expected behavior
A clear and concise description of what you expected to happen.
### Screenshots/Screencasts
If applicable, add screenshots to help explain your problem.
### Additional context
Add any other context about the problem here.

View File

@ -1,23 +1,20 @@
---
name: "\U0001F680 Feature request"
about: Suggest an idea for Lemmur
title: ""
title: ''
labels: enhancement
assignees: ""
assignees: ''
---
### Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
### Describe the solution you'd like
A clear and concise description of what you want to happen.
### Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
### Additional context
Add any other context or screenshots about the feature request here.

View File

@ -7,37 +7,9 @@ on:
branches: [master]
jobs:
lint:
name: Lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: subosito/flutter-action@v1
with:
channel: "stable"
- name: Get dependencies
run: flutter pub get
- name: Generate l10n
run: |
flutter gen-l10n
dart format lib/l10n/gen/
- name: Run lints
run: flutter analyze
- name: Check formatting
run: flutter format --dry-run --set-exit-if-changed .
- name: Run tests
run: flutter test
android:
name: Android
runs-on: ubuntu-latest
needs: lint
steps:
- uses: actions/checkout@v2
@ -49,36 +21,24 @@ jobs:
with:
channel: "stable"
- name: Inject keystore
working-directory: android/app
run: |
echo "${{ secrets.SIGNING_KEY }}" | base64 -d | tee key.jks >/dev/null
- name: Get dependencies
run: flutter pub get
- name: Run lints
run: flutter analyze
- name: Check formatting
run: flutter format --dry-run --set-exit-if-changed .
- name: Run tests
run: flutter test
- name: Android build
env:
ANDROID_KEY_ALIAS: ${{ secrets.ALIAS }}
ANDROID_KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
ANDROID_STORE_PATH: key.jks
ANDROID_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }}
run: flutter build apk --split-per-abi --release --target lib/main_prod.dart --flavor prod
ios:
name: iOS
runs-on: macos-latest
needs: lint
steps:
- uses: actions/checkout@v2
- uses: subosito/flutter-action@v2
with:
channel: "stable"
- run: flutter build ios --no-codesign --release --target lib/main_prod.dart --flavor prod
run: flutter build apk --split-per-abi
linux:
name: Linux
runs-on: ubuntu-latest
needs: lint
steps:
- uses: actions/checkout@v2
@ -91,14 +51,17 @@ jobs:
sudo apt-get update -y
sudo apt-get install -y clang cmake ninja-build pkg-config libgtk-3-dev libblkid-dev
- name: Enable linux support
run: |
flutter config --enable-linux-desktop
- name: Build
run: |
flutter build linux --release --target lib/main_prod.dart
flutter build linux
windows:
name: Windows
runs-on: windows-latest
needs: lint
steps:
- uses: actions/checkout@v2
@ -106,6 +69,10 @@ jobs:
with:
channel: "stable"
- name: Enable windows support
run: |
flutter config --enable-windows-desktop
- name: Build
run: |
flutter build windows --release --target lib/main_prod.dart
flutter build windows

View File

@ -37,36 +37,36 @@ jobs:
run: flutter pub get
- name: Inject keystore
working-directory: android/app
working-directory: android
env:
KEY_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }}
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
ALIAS: ${{ secrets.ALIAS }}
SIGNING_KEY: ${{ secrets.SIGNING_KEY }}
run: |
echo "${{ secrets.SIGNING_KEY }}" | base64 -d | tee key.jks >/dev/null
echo storePassword=$KEY_STORE_PASSWORD > key.properties
echo keyPassword=$KEY_PASSWORD >> key.properties
echo keyAlias=$ALIAS >> key.properties
echo storeFile=$HOME/key.jks >> key.properties
echo $SIGNING_KEY | base64 -d | tee ~/key.jks >/dev/null
- name: Generate appbundle
env:
ANDROID_KEY_ALIAS: ${{ secrets.ALIAS }}
ANDROID_KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
ANDROID_STORE_PATH: key.jks
ANDROID_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }}
run: flutter build appbundle --release --target lib/main_prod.dart --flavor prod
run: flutter build appbundle
- uses: actions/upload-artifact@v2
with:
name: android-appbundle
path: |
build/app/outputs/bundle/prodRelease/app-prod-release.aab
build/app/outputs/bundle/release/app-release.aab
- name: Android build
env:
ANDROID_KEY_ALIAS: ${{ secrets.ALIAS }}
ANDROID_KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
ANDROID_STORE_PATH: key.jks
ANDROID_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }}
run: |
flutter build apk --split-per-abi --release --target lib/main_prod.dart --flavor prod
flutter build apk --split-per-abi
mv build/app/outputs/flutter-apk/app-arm64-v8a-prod-release.apk lemmur-${{ needs.get-vars.outputs.tag }}-arm64-v8a-android.apk
mv build/app/outputs/flutter-apk/app-armeabi-v7a-prod-release.apk lemmur-${{ needs.get-vars.outputs.tag }}-armeabi-v7a-android.apk
mv build/app/outputs/flutter-apk/app-x86_64-prod-release.apk lemmur-${{ needs.get-vars.outputs.tag }}-x86_64-android.apk
mv build/app/outputs/flutter-apk/app-arm64-v8a-release.apk lemmur-${{ needs.get-vars.outputs.tag }}-arm64-v8a-android.apk
mv build/app/outputs/flutter-apk/app-armeabi-v7a-release.apk lemmur-${{ needs.get-vars.outputs.tag }}-armeabi-v7a-android.apk
mv build/app/outputs/flutter-apk/app-x86_64-release.apk lemmur-${{ needs.get-vars.outputs.tag }}-x86_64-android.apk
- uses: actions/upload-artifact@v2
with:
@ -90,19 +90,23 @@ jobs:
sudo apt-get update -y
sudo apt-get install -y clang cmake ninja-build pkg-config libgtk-3-dev libblkid-dev
- name: Enable linux support
run: |
flutter config --enable-linux-desktop
- name: Build
run: |
flutter build linux --release --target lib/main_prod.dart
flutter build linux
- name: Archive
working-directory: build/linux/x64/release/bundle
working-directory: build/linux/release/bundle
run: |
tar -czf lemmur-${{ needs.get-vars.outputs.tag }}-x86_64-linux.tar.gz *
- uses: actions/upload-artifact@v2
with:
name: linux-build
path: build/linux/x64/release/bundle/lemmur-*.tar.gz
path: build/linux/release/bundle/lemmur-*.tar.gz
windows-build:
name: Windows build
@ -115,9 +119,13 @@ jobs:
with:
channel: "stable"
- name: Enable windows support
run: |
flutter config --enable-windows-desktop
- name: Build
run: |
flutter build windows --release --target lib/main_prod.dart
flutter build windows
- name: Archive
working-directory: build/windows/runner/Release
@ -137,7 +145,7 @@ jobs:
- linux-build
- windows-build
runs-on: ubuntu-latest
if: github.repository == 'LemmurOrg/lemmur'
if: github.repository == 'krawieck/lemmur'
steps:
- uses: actions/checkout@v2
@ -149,7 +157,7 @@ jobs:
- name: Extract current changelog
run: mv fastlane/metadata/android/en-US/changelogs/$(ls fastlane/metadata/android/en-US/changelogs/ | xargs -I'{}' basename '{}' .txt | sort -n | tail -n 1).txt current-changelog.txt
- name: Release to GitHub
- name: Release
uses: softprops/action-gh-release@v1
with:
files: |
@ -157,28 +165,7 @@ jobs:
linux-build/*
windows-build/*
draft: true
prerelease: true
body_path: current-changelog.txt
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Setup Ruby
uses: actions/setup-ruby@v1
with:
ruby-version: "2.7"
- name: Download bundle dependencies
working-directory: fastlane
run: |
gem install bundler:2.0.2
bundle config path vendor/bundle
bundle install
- name: Release to Google Play (beta)
working-directory: fastlane
run: |
echo $GOOGLE_SERVICE_ACCOUNT_KEY > ../$GOOGLE_SERVICE_ACCOUNT_KEY_PATH
bundle exec fastlane android prod
env:
GOOGLE_SERVICE_ACCOUNT_KEY_PATH: google-service-account-key.json
GOOGLE_SERVICE_ACCOUNT_KEY: ${{ secrets.GOOGLE_SERVICE_ACCOUNT_KEY }}
ABB_PATH: android-appbundle/app-prod-release.aab

View File

@ -1,33 +0,0 @@
name: weblate
on:
workflow_dispatch:
schedule:
# every friday at 19:00 UTC
- cron: "0 19 * * 5"
jobs:
weblate:
name: Pull Weblate changes to repo
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Fetch changes
run: |
git remote add weblate https://weblate.yerbamate.ml/git/lemmur/lemmur/
git fetch weblate
git merge weblate/master
- name: Regenerate l10n_from_string
run: |
dart run scripts/gen_l10n_from_string.dart
- name: Create Pull Request
uses: peter-evans/create-pull-request@v3.12.0
with:
reviewers: shilangyu,krawieck
title: Weblate update
branch: weblate

4
.gitignore vendored
View File

@ -24,7 +24,6 @@
.pub-cache/
.pub/
/build/
lib/l10n/gen
# Web related
lib/generated_plugin_registrant.dart
@ -37,6 +36,3 @@ app.*.map.json
# Exceptions to above rules.
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
# Xcode build files
ios/build

12
.vscode/launch.json vendored
View File

@ -4,25 +4,19 @@
{
"name": "Debug",
"request": "launch",
"type": "dart",
"program": "lib/main_dev.dart",
"args": ["--flavor", "dev"]
"type": "dart"
},
{
"name": "Profile",
"request": "launch",
"type": "dart",
"flutterMode": "profile",
"program": "lib/main_dev.dart",
"args": ["--flavor", "dev"]
"flutterMode": "profile"
},
{
"name": "Release",
"request": "launch",
"type": "dart",
"flutterMode": "release",
"program": "lib/main_dev.dart",
"args": ["--flavor", "dev"]
"flutterMode": "release"
}
]
}

View File

@ -5,50 +5,29 @@
"body": ["\"$1\": \"$2\",", "\"@$1\": {}$0"]
},
"Assert not null": {
"scope": "dart",
"prefix": "assnotnull",
"body": ["assert($1 != null)$0"]
},
"sizedbox": {
"scope": "dart",
"prefix": "sizedbox",
"body": ["const SizedBox($1)$0"]
},
"theme": {
"scope": "dart",
"prefix": "theme",
"body": ["final theme = Theme.of(context);"]
},
"sleep": {
"scope": "dart",
"prefix": "sleep",
"body": [
"await Future<dynamic>.delayed(const Duration(milliseconds: ${1:1000}));$0"
]
},
"repeat widget": {
"scope": "dart",
"prefix": "repeat",
"body": ["for(int i = 0; i < $1; i++)$0"]
},
"L10n string": {
"scope": "dart",
"prefix": "l10n",
"body": ["L10n.of(context).$0"]
},
"Mobx store": {
"prefix": "mobxstore",
"body": [
"import 'package:mobx/mobx.dart';",
"",
"part '$TM_FILENAME_BASE.g.dart';",
"",
"class ${TM_FILENAME_BASE/(.*)/${1:/pascalcase}/g} = _${TM_FILENAME_BASE/(.*)/${1:/pascalcase}/g} with _$${TM_FILENAME_BASE/(.*)/${1:/pascalcase}/g};",
"",
"abstract class _${TM_FILENAME_BASE/(.*)/${1:/pascalcase}/g} with Store {",
"\t@observable",
"\t$0",
"}"
]
"body": ["L10n.of(context)!.$0"]
}
}

View File

@ -2,6 +2,5 @@
"files.associations": {
"*.arb": "json"
},
"dart.showTodos": false,
"xml.format.preserveAttributeLineBreaks": true
"dart.showTodos": false
}

33
.vscode/tasks.json vendored
View File

@ -1,33 +0,0 @@
{
"version": "2.0.0",
"tasks": [
{
"type": "flutter",
"command": "flutter",
"args": [
"pub",
"run",
"build_runner",
"build",
"--delete-conflicting-outputs"
],
"problemMatcher": ["$dart-build_runner"],
"group": "build",
"label": "flutter: build_runner build"
},
{
"type": "flutter",
"command": "flutter",
"args": [
"pub",
"run",
"build_runner",
"watch",
"--delete-conflicting-outputs"
],
"problemMatcher": ["$dart-build_runner"],
"group": "build",
"label": "flutter: flutter pub run build_runner watch"
}
]
}

View File

@ -1,48 +1,3 @@
## Unreleased
### Added
- Create post community picker now has autocomplete
- You can now add an instance from the three dots menu on the instance page
- Editor for writing comments, posts, and profile bio now has a toolbar with shortcuts to all the common markdown things
## v0.8.0 - 2022-01-14
### Added
- Support for Lemmy v0.15.0
### Changed
- "Time ago" strings, dates, and compact numbers are now localized
## v0.7.0 - 2021-11-04
### Added
- Blocking of users and communities (from post and from comment)
- Reporting posts and comments
- Android theme-aware splash screen (thanks to [@mimi89999](https://github.com/mimi89999))
- Logging: local logs about some actions/errors. Can be accessed from **settings > about lemmur > logs**
### Fixed
- Fixed a bug where post would go out of sync with full version of the post
- Fixed a bug where making a comment selectable would not always result in making the comment selectable
- Full post will now open no matter where you press on the post card
- Fixed overflows in various places
### Changed
- User banner photo now fits better on user profile
## v0.6.0 - 2021-09-06
### Added
- Support for Lemmy v0.12.0
- Show cake day on a user's profile and next to their name in a comment
## v0.5.0 - 2021-04-29
### Added

View File

@ -4,45 +4,23 @@
## Issue tracking / Repository
From issues to wikis: everything is on [GitHub](https://github.com/LemmurOrg/lemmur)
From issues to wikis: everything is on [GitHub](https://github.com/krawieck/lemmur)
## Linting / Formatting
Everything is formatted with `dart format` (no flags) and linted with `dart analyze` ([see rules](analysis_options.yaml)). Both are enforced by the CI.
Everything is formatted with `dartfmt` (no flags) and linted with `dartanalyzer` ([see rules](analysis_options.yaml)). Both are enforced by the CI.
## Translations
### Weblate
Lemmy devs are kindly hosting lemmur translation strings on their [Weblate instance](https://weblate.yerbamate.ml/projects/lemmur/lemmur/). Feel free to contribute strings there, we regularly sync string changes with Weblate.
We use flutter's native file format for translations: ARB, which itself uses the ICU message syntax. In most cases you will be able to deduce the syntax based on the source string. Here are 3 important examples:
1. Placeholders
`Hello there {name}!` - placeholders are put in a pair of braces, it will be later replaced with an appropriate value.
2. Plurals
`You have {amount} new {amount, plural, =0{messages} =1{message} =2{messages} few{messages} many{messages} other{message}}` - plurals are checked against their quantifier and provide 6 possible forms to choose from. In english this example does not make much sense, since we could just provide the `=1{message}` and `other{messages}` case. `other` case always has to be specified, it acts as a fallback.
3. Selects
`I will take a {distance_name, select, close{bus} far{train} veryFar{plane}}.` - selects allow for arbitrary matching against some predefined cases. All cases should be the same as in the source string.
### Time ago strings
Strings such as "_About one hour ago_" or "_~1h_" are localizable. We inherit a set of ready translations from [github.com/andresaraujo/timeago.dart/messages](https://github.com/andresaraujo/timeago.dart/tree/master/timeago/lib/src/messages) and provide our own in [lib/l10n/timeago](./lib/l10n/timeago).
To contribute time ago strings please send a PR containing a class that implements `timeago.LookupMessages`. Place it under [lib/l10n/timeago](./lib/l10n/timeago) with an appropriate name (locale tag) and finally register it in [main_common.dart](./lib/main_common.dart) in the `_setupTimeago` function. Each locale can have a normal (for example "_About one hour ago_") and a short (for example "_~1h_") variant, there are registered separately.
<!-- TODO -->
## Architecture
Lemmur is written in Dart using [Flutter](https://flutter.dev/docs). To communicate with Lemmy instances [lemmy_api_client](https://github.com/LemmurOrg/lemmy_api_client) is used.
Lemmur is written in Dart using [Flutter](https://flutter.dev/docs). To communicate with Lemmy instances [lemmy_api_client](https://github.com/krawieck/lemmy_api_client) is used.
### State management
[`MobX`](https://github.com/mobxjs/mobx.dart) + [Provider](https://github.com/rrousselGit/provider) is used for global state management, [flutter_hooks](https://github.com/rrousselGit/flutter_hooks) is used for local (widget-level) state management. `StatefulWidget`s are avoided all together and any state logic reuse is moved to a [custom hook](./lib/hooks).
`ChangeNotifier` + [Provider](https://github.com/rrousselGit/provider) is used for global state management, [flutter_hooks](https://github.com/rrousselGit/flutter_hooks) is used for local (widget-level) state management. `StatefulWidget`s are avoided all together and any state logic reuse is moved to a [custom hook](./lib/hooks).
### Project structure
@ -54,23 +32,19 @@ Lemmur is written in Dart using [Flutter](https://flutter.dev/docs). To communic
- `stores/`: global stores
- `util/`: utilities
- `widgets/`: reusable widgets; building blocks for pages
- `main_common.dart`: entrypoint of the app. Sets up the stores, initializes the themes, renders the first page
- `main.dart`: entrypoint of the app. Sets up the stores, initializes the themes, renders the first page
### Things to keep in mind
- Be aware that Lemmur supports arbitrary Lemmy instances, don't hardcode instance urls
- Remember that a user is not obligated to be logged in, contributed widgets should handle this case
### Lemmy API
LAC (Lemmy API Client) is used to communicate with Lemmy backends, more information can be found [here](https://github.com/LemmurOrg/lemmy_api_client).
### For React developers
If you come from a React background Flutter shouldn't be anything hard to grasp for you.
- Components are called 'widgets' in flutter
- `flutter_hooks` is a React hooks port to flutter. Though you will come to see that `flutter_hooks` are not as powerful
- There is no CSS. You compose your layout with other widgets and style them by passing properties
- There are no functional components, everything needs to be a class
- There is no CSS. You compose your layout with other widgets and style them by passing properties to them
- There are no functional components, everything has to be a class
- Creating wrapping widgets is not as nice as in React, there is no `{ ...props }`. In flutter you need to pass each argument one by one

View File

@ -1,5 +0,0 @@
# Privacy Policy
We don't store your data. We don't use any intermediary services that could store your data.
For any questions contact us at lemmurapp@protonmail.com

View File

@ -1,21 +1,14 @@
# ⚠️ THIS PROJECT IS NOT MAINTAINED ANYMORE ⚠️
This project has been officially dropped due to lack of interest and political differences. If anyone is interested in continuing developement, feel free to fork it. For any questions you can message [krawieck](https://matrix.to/#/@krawieck:matrix.org) (who was responsible for the flutter app) or [shilangyu](https://matrix.to/#/@shilangyu:matrix.org) (who was responsible for lemmy_api_client).
---
<div align="center">
[![](https://github.com/LemmurOrg/lemmur/workflows/ci/badge.svg)](https://github.com/LemmurOrg/lemmur/actions)
[![Translation status](http://weblate.yerbamate.ml/widgets/lemmur/-/lemmur/svg-badge.svg)](http://weblate.yerbamate.ml/engage/lemmur/)
[![](https://github.com/krawieck/lemmur/workflows/ci/badge.svg)](https://github.com/krawieck/lemmur/actions)
<img width=200px height=200px src="https://raw.githubusercontent.com/LemmurOrg/lemmur/master/assets/readme_icon.svg"/>
<img width=200px height=200px src="https://raw.githubusercontent.com/krawieck/lemmur/master/assets/readme_icon.svg"/>
# lemmur
[<img src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png" alt="Get it on F-Droid" height="80">](https://f-droid.org/packages/com.LemmurOrg.lemmur)
[<img src="https://cdn.rawgit.com/steverichey/google-play-badge-svg/master/img/en_get.svg" height="80">](https://play.google.com/store/apps/details?id=com.LemmurOrg.lemmur)
[<img src="https://raw.githubusercontent.com/andOTP/andOTP/master/assets/badges/get-it-on-github.png" height="80">](https://github.com/LemmurOrg/lemmur/releases/latest)
[<img src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png" alt="Get it on F-Droid" height="80">](https://f-droid.org/packages/com.krawieck.lemmur)
[<img src="https://cdn.rawgit.com/steverichey/google-play-badge-svg/master/img/en_get.svg" height="80">](https://play.google.com/store/apps/details?id=com.krawieck.lemmur)
[<img src="https://raw.githubusercontent.com/andOTP/andOTP/master/assets/badges/get-it-on-github.png" height="80">](https://github.com/krawieck/lemmur/releases/latest)
A mobile client for [Lemmy](https://github.com/LemmyNet/lemmy) - a federated reddit alternative
@ -38,26 +31,34 @@ A mobile client for [Lemmy](https://github.com/LemmyNet/lemmy) - a federated red
### Prerequisites
- Install [flutter](https://flutter.dev/docs/get-started/install): To check if this step was successful run `flutter doctor` (Installing android studio is not required if you setup the android SDK yourself)
- Clone this repo: `git clone https://github.com/LemmurOrg/lemmur`
- Clone this repo: `git clone https://github.com/krawieck/lemmur`
- Enter the repo: `cd lemmur`
### Android
1. Build: `flutter build apk --flavor prod --target lib/main_prod.dart --release`
1. Build: `flutter build apk`
The apk will be in `build/app/outputs/flutter-apk/app-prod-release.apk`
The apk will be in `build/app/outputs/flutter-apk/app-release.apk`
### Linux
1. Make sure you have the additional [linux requirements](https://flutter.dev/desktop#additional-linux-requirements) (verify with `flutter doctor`)
2. Build: `flutter build linux --target lib/main_prod.dart --release`
2. Enable linux desktop:
```sh
flutter config --enable-linux-desktop
```
3. Build: `flutter build linux`
The executable will be in `build/linux/x64/release/bundle/lemmur` (be aware, however, that this executable is not standalone)
The executable will be in `build/linux/release/bundle/lemmur` (be aware, however, that this executable is not standalone)
### Windows
1. Make sure you have the additional [windows requirements](https://flutter.dev/desktop#additional-windows-requirements) (verify with `flutter doctor`)
2. Build: `flutter build windows --target lib/main_prod.dart --release`
2. Enable windows desktop:
```sh
flutter config --enable-windows-desktop
```
3. Build: `flutter build windows`
The executable will be in `build\windows\runner\Release\lemmur.exe` (be aware, however, that this executable is not standalone)

View File

@ -1,16 +1,15 @@
linter:
rules:
- annotate_overrides
- avoid_bool_literals_in_conditional_expressions
- avoid_catches_without_on_clauses
- avoid_catching_errors
- avoid_classes_with_only_static_members
- avoid_equals_and_hash_code_on_mutable_classes
- avoid_escaping_inner_quotes
- avoid_final_parameters
- avoid_function_literals_in_foreach_calls
- avoid_init_to_null
- avoid_null_checks_in_equality_operators
- avoid_positional_boolean_parameters
- avoid_print
- avoid_private_typedef_functions
- avoid_redundant_argument_values
- avoid_relative_lib_imports
@ -21,6 +20,7 @@ linter:
- avoid_setters_without_getters
- avoid_single_cascade_in_expression_statements
- avoid_type_to_string
- avoid_types_on_closure_parameters
- avoid_unnecessary_containers
- avoid_unused_constructor_parameters
- avoid_void_async
@ -30,24 +30,17 @@ linter:
- cascade_invocations
- cast_nullable_to_non_nullable
- constant_identifier_names
- conditional_uri_does_not_exist
- curly_braces_in_flow_control_structures
- directives_ordering
- empty_catches
- empty_constructor_bodies
- eol_at_end_of_file
- exhaustive_cases
- file_names
- hash_and_equals
- implementation_imports
- invariant_booleans
- library_names
- library_prefixes
- literal_only_boolean_expressions
- non_constant_identifier_names
- noop_primitive_operations
- no_leading_underscores_for_library_prefixes
- no_leading_underscores_for_local_identifiers
- null_check_on_nullable_type_parameter
- omit_local_variable_types
- one_member_abstracts
@ -64,6 +57,7 @@ linter:
- prefer_constructors_over_static_methods
- prefer_contains
- prefer_equal_for_default_values
- prefer_expression_function_bodies
- prefer_final_fields
- prefer_final_in_for_each
- prefer_final_locals
@ -86,9 +80,7 @@ linter:
- prefer_spread_collections
- prefer_typing_uninitialized_variables
- recursive_getters
- secure_pubspec_urls
- sized_box_for_whitespace
- sized_box_shrink_expand
- slash_for_doc_comments
- sort_child_properties_last
- sort_unnamed_constructors_first
@ -98,10 +90,8 @@ linter:
- unawaited_futures
- unnecessary_brace_in_string_interps
- unnecessary_const
- unnecessary_constructor_name
- unnecessary_getters_setters
- unnecessary_lambdas
- unnecessary_late
- unnecessary_new
- unnecessary_null_aware_assignments
- unnecessary_null_checks
@ -111,17 +101,11 @@ linter:
- unnecessary_string_escapes
- unnecessary_string_interpolations
- unnecessary_this
- unrelated_type_equality_checks
- use_colored_box
- use_enums
- use_full_hex_values_for_flutter_colors
- use_is_even_rather_than_modulo
- use_named_constants
- use_raw_strings
- use_rethrow_when_possible
- use_setters_to_change_properties
- use_super_parameters
- use_test_throws_matchers
- use_to_and_as_if_applicable
- void_checks
@ -129,7 +113,8 @@ analyzer:
exclude:
- "**/*.g.dart"
- "lib/gen/assets.gen.dart"
- "lib/l10n/gen/*"
# strong-mode:
# TODO: consider disabling
# implicit-dynamic: false
strong-mode:
# TODO: remove after migrating to null safety, this is already turned off by default
implicit-casts: false
# TODO: consider disabling
# implicit-dynamic: false

View File

@ -25,87 +25,47 @@ apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
android {
compileSdkVersion Math.max(flutter.compileSdkVersion, 32)
lintOptions {
disable 'InvalidPackage'
}
compileSdkVersion 30
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
lintOptions {
disable 'InvalidPackage'
}
kotlinOptions {
jvmTarget = '1.8'
}
defaultConfig {
applicationId "com.krawieck.lemmur"
minSdkVersion Math.max(flutter.minSdkVersion, 16)
targetSdkVersion flutter.targetSdkVersion
minSdkVersion 16
targetSdkVersion 30
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}
signingConfigs {
if (System.getenv("ANDROID_STORE_PATH")) {
prod {
keyAlias System.getenv("ANDROID_KEY_ALIAS")
keyPassword System.getenv("ANDROID_KEY_PASSWORD")
storeFile file(System.getenv("ANDROID_STORE_PATH"))
storePassword System.getenv("ANDROID_STORE_PASSWORD")
}
} else {
prod {
keyAlias signingConfigs.debug.keyAlias
keyPassword signingConfigs.debug.keyPassword
storeFile signingConfigs.debug.storeFile
storePassword signingConfigs.debug.storePassword
}
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
storePassword keystoreProperties['storePassword']
}
}
flavorDimensions "app"
productFlavors {
dev {
dimension "app"
applicationIdSuffix ".dev"
versionNameSuffix "-dev"
manifestPlaceholders = [
appName: "lemmur DEV"
]
signingConfig signingConfigs.debug
}
prod {
dimension "app"
manifestPlaceholders = [
appName: "lemmur"
]
signingConfig signingConfigs.prod
}
}
}
buildTypes {
debug {
testCoverageEnabled true
debuggable true
minifyEnabled false
signingConfig null
}
release {
debuggable false
minifyEnabled true
shrinkResources false
zipAlignEnabled true
if (keystorePropertiesFile.exists()) {
signingConfig signingConfigs.release
} else {
signingConfig signingConfigs.debug
}
}
}
}

View File

@ -1,39 +1,51 @@
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.krawieck.lemmur">
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.krawieck.lemmur">
<!-- io.flutter.app.FlutterApplication is an android.app.Application that
calls FlutterMain.startInitialization(this); in its onCreate method.
In most cases you can leave this as-is, but you if you want to provide
additional functionality it is fine to subclass or reimplement
FlutterApplication and put your custom class here. -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- Needed for url_launcher to work on android 11 -->
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
<uses-permission android:name="android.permission.INTERNET" />
<!-- Needed for url_launcher to work on android 11 -->
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
<application
android:name="${applicationName}"
android:label="${appName}"
android:icon="@mipmap/ic_launcher">
<activity
android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<meta-data
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme"
/>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data
android:name="flutterEmbedding"
android:value="2" />
</application>
<application
android:name="io.flutter.app.FlutterApplication"
android:label="lemmur"
android:icon="@mipmap/ic_launcher">
<activity
android:name=".MainActivity"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<!-- Specifies an Android theme to apply to this Activity as soon as
the Android process has started. This theme is visible to the user
while the Flutter UI initializes. After that, this theme continues
to determine the Window background behind the Flutter UI. -->
<meta-data
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme"
/>
<!-- Displays an Android View that continues showing the launch screen
Drawable until Flutter paints its first frame, then this splash
screen fades out. A splash screen is useful to avoid any visual
gap between the end of Android's launch screen and the painting of
Flutter's first frame. -->
<meta-data
android:name="io.flutter.embedding.android.SplashScreenDrawable"
android:resource="@drawable/launch_background"
/>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<!-- Don't delete the meta-data below.
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
<meta-data
android:name="flutterEmbedding"
android:value="2" />
</application>
</manifest>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Modify this file to customize your launch splash screen -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:color/white" />
<!-- You can insert your own image assets here -->
<!-- <item>
<bitmap
android:gravity="center"
android:src="@mipmap/launch_image" />
</item> -->
</layer-list>

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/splash_screen_background_color" />
<item>
<bitmap
android:gravity="center"
android:src="@drawable/splash" />
</item>
</layer-list>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="splash_screen_background_color">#303030</color>
</resources>

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
<!-- Show a splash screen on the activity. Automatically removed when
Flutter draws its first frame -->
<item name="android:windowBackground">@drawable/launch_background</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
</style>
</resources>

View File

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_launcher_background">#ffffff</color>
<color name="splash_screen_background_color">#fafafa</color>
</resources>
</resources>

View File

@ -1,10 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Theme applied to the Android Window while the process is starting -->
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
<item name="android:windowBackground">@drawable/splash_screen</item>
<!-- Show a splash screen on the activity. Automatically removed when
Flutter draws its first frame -->
<item name="android:windowBackground">@drawable/launch_background</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
<item name="android:windowBackground">@color/splash_screen_background_color</item>
<item name="android:windowBackground">@android:color/white</item>
</style>
</resources>

View File

@ -1,12 +1,12 @@
buildscript {
ext.kotlin_version = '1.7.0'
ext.kotlin_version = '1.3.50'
repositories {
google()
mavenCentral()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.2.1'
classpath 'com.android.tools.build:gradle:3.5.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
@ -14,13 +14,15 @@ buildscript {
allprojects {
repositories {
google()
mavenCentral()
jcenter()
}
}
rootProject.buildDir = '../build'
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
project.evaluationDependsOn(':app')
}

View File

@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 35 KiB

View File

@ -1,31 +0,0 @@
{
"@@locale": "bn",
"settings": "পছন্দসমূহ",
"posts": "ভুক্তি",
"comments": "মন্তব্য",
"modlog": "ব্যবস্থাপনা সূচী",
"post": "ভুক্তি",
"deleted_by_creator": "লেখক মুছেছে",
"more": "আরো",
"mark_as_read": "পঠিত",
"mark_as_unread": "অপঠিত",
"reply": "উত্তর",
"edit": "সম্পাদনা",
"delete": "মুছো",
"avatar": "অবতার",
"banner": "কেতন",
"delete_account": "অ্যাকাউন্ট মুছো",
"communities": "সম্প্রদায়",
"users": "ব্যবহারকারী",
"admin": "প্রশাসক",
"locked": "বন্ধ",
"invalid_community_name": "অগ্রহণযোগ্য নাম।",
"number_of_comments": "{formattedCount,plural, =1{{formattedCount}টি মন্তব্য} other{{formattedCount}টি মন্তব্য}}",
"number_of_posts": "{formattedCount,plural, =1{{formattedCount}টি ভুক্তি} other{{formattedCount}টি ভুক্তি}}",
"delete_account_confirm": "সতর্কতা:",
"show_avatars": "অবতার দেখাও",
"send_message": "বার্তা পাঠাও",
"bot_account": "বট অ্যাকাউন্ট",
"show_bot_accounts": "বট অ্যাকাউন্ট দেখাও",
"show_read_posts": "পঠিত ভুক্তি দেখাও"
}

View File

@ -1,128 +0,0 @@
{
"@@locale": "cs",
"settings": "Nastavení",
"password": "Heslo",
"email_or_username": "E-mail nebo uživatelské jméno",
"posts": "Příspěvky",
"comments": "Komentáře",
"modlog": "Moderátorský záznam",
"community": "Komunita",
"url": "URL",
"title": "Titulek",
"body": "Obsah",
"nsfw": "Citlivý obsah",
"post": "odeslat",
"save": "uložit",
"subscribed": "Odebíráno",
"local": "Místní",
"all": "Vše",
"replies": "Odpovědi",
"mentions": "Zmínky",
"from": "od",
"deleted_by_creator": "smazáno tvůrcem",
"more": "více",
"mark_as_read": "označit jako přečtené",
"mark_as_unread": "označit jako nepřečtené",
"reply": "odpovědět",
"edit": "upravit",
"delete": "smazat",
"restore": "obnovit",
"yes": "ano",
"no": "ne",
"avatar": "Avatar",
"banner": "Banner",
"display_name": "Zobrazovaný název",
"bio": "O mně",
"email": "E-mail",
"matrix_user": "Účet Matrix",
"sort_type": "Řadit dle",
"type": "Typ",
"show_nsfw": "Zobrazovat citlivý obsah",
"send_notifications_to_email": "Zasílat notifikace na e-mail",
"delete_account": "Smazat účet",
"saved": "Uloženo",
"communities": "Komunity",
"users": "Uživatelé",
"theme": "Motiv",
"language": "Jazyk",
"hot": "Hot",
"new_": "Nejnovější",
"old": "Nejstarší",
"top": "Top",
"chat": "Chat",
"admin": "administrátor",
"by": "od",
"not_a_mod_or_admin": "Není moderátor nebo administrátor.",
"not_an_admin": "Není administrátor.",
"couldnt_find_post": "Nepodařilo se nalézt příspěvek.",
"not_logged_in": "Nepřihlášen/a.",
"site_ban": "Přístup na tuto stránku vám byl zakázán",
"community_ban": "Přístup to této komunity vám byl zakázán.",
"downvotes_disabled": "Nesouhlasy deaktivovány",
"invalid_url": "Neplatná URL.",
"locked": "zamčeno",
"couldnt_create_comment": "Komentář se nepodařilo vytvořit.",
"couldnt_update_comment": "Nepodařilo se aktualizovat komentář.",
"no_comment_edit_allowed": "Úprava komentáře není povolena.",
"couldnt_save_comment": "Nepodařilo se uložit komentář.",
"couldnt_get_comments": "Nepodařilo se získat komentáře.",
"report_reason_required": "Důvod hlášení je povinný.",
"report_too_long": "Hlášení je příliš dlouhé.",
"couldnt_create_report": "Nepodařilo se vytvořit hlášení.",
"couldnt_resolve_report": "Hlášení se nepodařilo vyřešit.",
"invalid_post_title": "Neplatný titulek příspěvku",
"couldnt_create_post": "Nepodařilo se vytvořit příspěvek.",
"couldnt_find_community": "Nepodařilo se nalézt komunitu.",
"couldnt_get_posts": "Nepodařilo se získat příspěvky",
"no_post_edit_allowed": "Úprava příspěvku není povolena.",
"couldnt_save_post": "Příspěvek se nepodařilo uložit.",
"site_already_exists": "Stránka již existuje.",
"couldnt_update_site": "Nepodařilo se aktualizovat stránku.",
"invalid_community_name": "Neplatné jméno.",
"community_already_exists": "Komunita již existuje.",
"community_moderator_already_exists": "Moderátor komunity již existuje.",
"community_follower_already_exists": "Sledující komunity již existuje.",
"not_a_moderator": "Není moderátor.",
"couldnt_update_community": "Nepodařilo se aktualizovat komunitu.",
"no_community_edit_allowed": "Úprava komunity není povolena.",
"system_err_login": "Systémová chyba. Zkuste se odhlásit a znovu přihlásit.",
"community_user_already_banned": "Uživateli již byl přístup do komunity zakázán.",
"couldnt_find_that_username_or_email": "Nepodařilo se nalézt uživatelské jméno nebo e-mail.",
"password_incorrect": "Špatné heslo.",
"registration_closed": "Registrace uzavřena",
"invalid_password": "Neplatné heslo. Heslo nesmí být delší jak 60 znaků.",
"passwords_dont_match": "Hesla nesouhlasí.",
"captcha_incorrect": "Chybně opsaná captcha.",
"invalid_username": "Neplatné uživatelské jméno.",
"bio_length_overflow": "\"O mně\" nesmí přesáhnout 300 znaků.",
"couldnt_update_user": "Nepodařilo se aktualizovat uživatele.",
"couldnt_update_private_message": "Nepodařilo se upravit soukromou zprávu.",
"couldnt_update_post": "Nepodařilo se aktualizovat příspěvek",
"couldnt_create_private_message": "Nepodařilo se vytvořit soukromou zprávu.",
"no_private_message_edit_allowed": "Úprava soukromých zpráv není povolena.",
"post_title_too_long": "Titulek příspěvku je příliš dlouhý.",
"email_already_exists": "E-mail již existuje.",
"user_already_exists": "Uživatel již existuje.",
"unsubscribe": "Zrušit odběr",
"subscribe": "Odebírat",
"messages": "Zprávy",
"banned_users": "Zakázaní uživatelé",
"delete_account_confirm": "Upozornění: toto trvale vymaže všechna vaše data z této instance. Vaše data nemusí být odstraněna z jiných existujících instancí. Zadejte své heslo pro potvrzení.",
"new_password": "Nové heslo",
"verify_password": "Potvrzení hesla",
"old_password": "Původní heslo",
"show_avatars": "Ukázat avatary",
"search": "Hledat",
"send_message": "Odeslat zprávu",
"top_day": "Top za den",
"top_week": "Top za týden",
"top_month": "Top za měsíc",
"top_year": "Top za rok",
"top_all": "Top za celou dobu",
"most_comments": "Nejkomentovanější",
"new_comments": "Nové komentáře",
"active": "Aktivní",
"bot_account": "Účet robota",
"show_bot_accounts": "Zobrazit roboty",
"show_read_posts": "Zobrazit přečtené příspěvky"
}

View File

@ -1,6 +0,0 @@
{
"@@locale": "cy",
"posts": "Postiadau",
"comments": "Sylwadau",
"post": "post"
}

View File

@ -1,135 +0,0 @@
{
"@@locale": "fa",
"settings": "تنظیمات",
"password": "گذرواژه",
"email_or_username": "رایانامه یا نام‌کاربری",
"posts": "مطالب",
"comments": "نظرات",
"modlog": "گزارش ناظم",
"community": "اجتماع",
"url": "نشانی",
"title": "عنوان",
"body": "بدنه",
"nsfw": "NSFW",
"post": "فرسته",
"save": "ذخیره",
"subscribed": "مشترک",
"local": "محلی",
"all": "همه",
"replies": "پاسخ‌ها",
"mentions": "اشاره‌ها",
"from": "از",
"to": "به",
"deleted_by_creator": "پاک شد",
"more": "بیشتر",
"mark_as_read": "علامت‌گذاری به عنوان خوانده شده",
"mark_as_unread": "علامت‌گذاری به عنوان خوانده نشده",
"reply": "پاسخ",
"edit": "ویرایش",
"delete": "پاک کردن",
"restore": "بازگردانی",
"yes": "بله",
"no": "خیر",
"avatar": "آواتار",
"display_name": "نام نمایشی",
"bio": "زندگی‌نامه",
"email": "رایانامه",
"matrix_user": "کاربر ماتریس",
"sort_type": "نوع ترتیب",
"type": "نوع",
"show_nsfw": "نمایش محتوای NSFW",
"send_notifications_to_email": "فرستادن اعلانات به رایانامه",
"delete_account": "پاک کردن حساب",
"saved": "ذخیره شد",
"communities": "جوامع",
"users": "کاربران",
"theme": "پوسته",
"language": "زبان",
"hot": "داغ",
"new_": "تازه",
"old": "قدیمی",
"top": "بالاترین",
"chat": "گپ",
"admin": "مدیر",
"by": "توسط",
"not_a_mod_or_admin": "ناظم یا مدیر نیست.",
"not_an_admin": "مدیر نیستید.",
"couldnt_find_post": "نتوانستیم فرسته را بیابیم.",
"not_logged_in": "وارد نشده‌اید.",
"site_ban": "فعالیت شما در این پایگاه ممنوع شده است",
"community_ban": "فعالیت شما در این اجتماع ممنوع شده است.",
"downvotes_disabled": "رای پایین غیرفعال است",
"invalid_url": "نشانی نامعتبر است.",
"locked": "قفل شد",
"couldnt_create_comment": "ناتوانی در ایجاد نظر.",
"couldnt_like_comment": "ناتوانی در پسنیدن نظر.",
"couldnt_update_comment": "ناتوانی در به‌روزرسانی نظر.",
"no_comment_edit_allowed": "مجاز به ویرایش نظر نیستید.",
"couldnt_save_comment": "ناتوانی در ذخیره نظر.",
"couldnt_get_comments": "نتوانستیم نظرات را دریافت کنی.",
"report_reason_required": "دلیل گزارش الزامی است.",
"report_too_long": "گزارش بیش از حد طولانی است.",
"couldnt_create_report": "نتوانستیم گزارش بسازیم.",
"couldnt_resolve_report": "نتوانستیم این گزارش را حل کنیم.",
"invalid_post_title": "عنوان فرسته نامعتبر است",
"couldnt_create_post": "نتوانستیم فرسته را ایجاد کنیم.",
"couldnt_like_post": "نتوانستیم فرسته را بپسندیم.",
"couldnt_find_community": "نتوانستیم اجتماع را بیابیم.",
"couldnt_get_posts": "ناتوانی در دریافت مطالب",
"no_post_edit_allowed": "مجاز به ویرایش فرسته نیستید.",
"couldnt_save_post": "نتوانستیم فرسته را ذخیره کنیم.",
"site_already_exists": "این پایگاه از قبل وجود داشته است.",
"couldnt_update_site": "ناتوانی در به‌روزرسانی پایگاه.",
"invalid_community_name": "نام نامعتبر.",
"community_already_exists": "این اجتماع از قبل وجود داشته است.",
"community_moderator_already_exists": "ناظم اجتماع از پیش وجود دارد.",
"community_follower_already_exists": "این کاربر از قبل پیگیر این اجتماع است.",
"not_a_moderator": "ناظم نیست.",
"couldnt_update_community": "نتوانستیم این اجتماع را به‌روز کنیم.",
"no_community_edit_allowed": "مجاز به ویرایش اجتماع نیستید.",
"system_err_login": "خطای سامانه. سعی کنید خارج شده و دوباره وارد شوید.",
"community_user_already_banned": "کاربر این اجتماع از قبل ممنوع شده است.",
"couldnt_find_that_username_or_email": "ناتوانی در یافتن این نام کاربری یا رایانامه.",
"password_incorrect": "گذرواژه نادرست.",
"registration_closed": "نام‌نویسی بسته است",
"invalid_password": "گذرواژه نامعتبر. گذرواژه باید کمتر از ۶۰ حرف داشته باشد.",
"passwords_dont_match": "گذرواژه‌ها با هم منطبق نیستند.",
"captcha_incorrect": "کپچا درست نیست.",
"invalid_username": "نام کاربری نامعتبر است.",
"bio_length_overflow": "زندگی‌نامه کاربر نمی‌تواند از ۳۰۰ حرف فزونی یابد.",
"couldnt_update_user": "ناتوانی در به‌روزرسانی کاربر.",
"couldnt_update_private_message": "نتوانستیم پیام خصوصی را به‌روز کنیم.",
"couldnt_update_post": "نتوانسیم فرسته را به‌روز کنیم",
"couldnt_create_private_message": "نتوانستیم پیام خصوصی ایجاد کنید.",
"no_private_message_edit_allowed": "نمی‌شود پیام خصوصی را ویرایش کرد.",
"post_title_too_long": "عنوان فرسته بیش از حد طولانی است.",
"email_already_exists": "این رایانامه از قبل وجود دارد.",
"user_already_exists": "این کاربر از قبل وجود دارد.",
"number_of_users_online": "{formattedCount,plural, =1{{formattedCount} کاربر برخط} other{{formattedCount} کاربر برخط}}",
"number_of_comments": "{formattedCount,plural, =1{{formattedCount} نظر} other{{formattedCount} نظر}}",
"number_of_posts": "{formattedCount,plural, =1{{formattedCount} فرسته} other{{formattedCount} فرسته}}",
"number_of_subscribers": "{formattedCount,plural, =1{{formattedCount} مشترک} other{{formattedCount} مشترک}}",
"number_of_users": "{formattedCount,plural, =1{{formattedCount} کاربر} other{{formattedCount} کاربر‫}}",
"unsubscribe": "لغو اشتراک",
"subscribe": "اشتراک",
"messages": "پیام‌ها",
"banned_users": "کاربران ممنوع شده",
"delete_account_confirm": "هشدار: این کنش، تمام اطلاعات شما را برای همیشه پاک می‌کند. برای تایید، گذرواژه خود را وارد کنید.",
"new_password": "گذرواژه جدید",
"verify_password": "تایید گذرواژه",
"old_password": "پسورد پیشین",
"show_avatars": "نمایش آواتارها",
"search": "جستجو",
"send_message": "ارسال پیام",
"top_day": "بهترین‌های روز",
"top_week": "بهترین‌های هفته",
"top_month": "بهترین‌های ماه",
"top_year": "بهترین‌های سال",
"top_all": "بهترین‌ها از ابتدا",
"most_comments": "بیشترین نظرات",
"new_comments": "نظرات جدید",
"active": "فعال",
"bot_account": "حساب بات",
"show_bot_accounts": "نمایش حساب‌های بات",
"show_read_posts": "نمایش فرسته‌های خوانده شده"
}

View File

@ -1,136 +0,0 @@
{
"@@locale": "id",
"settings": "Pengaturan",
"password": "Kata Sandi",
"email_or_username": "Surel atau Nama Pengguna",
"posts": "Pos",
"comments": "Komentar",
"modlog": "Log Moderator",
"community": "Komunitas",
"url": "URL",
"title": "Judul",
"body": "Isi",
"nsfw": "NSFW",
"post": "pos",
"save": "simpan",
"subscribed": "Telah berlangganan",
"local": "Lokal",
"all": "Semua",
"replies": "Balasan",
"mentions": "Merujuk",
"from": "dari",
"to": "untuk",
"deleted_by_creator": "dihapus oleh pembuat",
"more": "lainnya",
"mark_as_read": "tandai sebagai telah dibaca",
"mark_as_unread": "tandai sebagai belum dibaca",
"reply": "balas",
"edit": "sunting",
"delete": "hapus",
"restore": "pulihkan",
"yes": "ya",
"no": "tidak",
"avatar": "Avatar",
"banner": "Spanduk",
"display_name": "Nama Tampilan",
"bio": "Bio",
"email": "Surel",
"matrix_user": "Pengguna Matrix",
"sort_type": "Tipe penyortiran",
"type": "Tipe",
"show_nsfw": "Perlihatkan konten NSFW",
"send_notifications_to_email": "Mengirim notifikasi ke surel",
"delete_account": "Hapus Akun",
"saved": "Tersimpan",
"communities": "Komunitas",
"users": "Pengguna",
"theme": "Tema",
"language": "Bahasa",
"hot": "Hangat",
"new_": "Baru",
"old": "Lama",
"top": "Teratas",
"chat": "Obrolan",
"admin": "admin",
"by": "oleh",
"not_a_mod_or_admin": "Bukan seorang moderator atau admin.",
"not_an_admin": "Bukan seorang admin.",
"couldnt_find_post": "Tidak bisa menemukan pos.",
"not_logged_in": "Belum masuk.",
"site_ban": "Anda sudah terlarang dari situs ini",
"community_ban": "Anda sudah terlarang dari komunitas ini.",
"downvotes_disabled": "Pilih Turun dinonaktifkan",
"invalid_url": "URL tidak valid.",
"locked": "dikunci",
"couldnt_create_comment": "Tidak bisa membuat komentar.",
"couldnt_like_comment": "Tidak bisa menyukai komentar.",
"couldnt_update_comment": "Tidak bisa memperbarui komentar.",
"no_comment_edit_allowed": "Tidak diperbolehkan untuk mengedit komentar.",
"couldnt_save_comment": "Tidak bisa menyimpan komentar.",
"couldnt_get_comments": "Tidak bisa mendapatkan komentar.",
"report_reason_required": "Alasan laporan diperlukan.",
"report_too_long": "Laporan terlalu panjang.",
"couldnt_create_report": "Tidak bisa membuat laporan.",
"couldnt_resolve_report": "Tidak bisa menyelesaikan laporan.",
"invalid_post_title": "Judul pos tidak valid",
"couldnt_create_post": "Tidak bisa membuat pos.",
"couldnt_like_post": "Tidak bisa menyukai pos.",
"couldnt_find_community": "Tidak bisa menemukan komunitas.",
"couldnt_get_posts": "Tidak bisa mendapatkan pos",
"no_post_edit_allowed": "Tidak diperbolehkan untuk mengedit pos.",
"couldnt_save_post": "Tidak bisa menyimpan pos.",
"site_already_exists": "Situs sudah tersedia.",
"couldnt_update_site": "Tidak bisa memperbarui situs.",
"invalid_community_name": "Nama tidak valid.",
"community_already_exists": "Komunitas sudah ada.",
"community_moderator_already_exists": "Moderator komunitas sudah ada.",
"community_follower_already_exists": "Pengikut komunitas sudah ada.",
"not_a_moderator": "Bukan seorang moderator.",
"couldnt_update_community": "Tidak bisa memperbarui Komunitas.",
"no_community_edit_allowed": "Tidak diperbolehkan untuk mengedit komunitas.",
"system_err_login": "Sistem ada kesalahan. Coba keluar dan masuk kembali.",
"community_user_already_banned": "Pengguna komunitas sudah terlarang.",
"couldnt_find_that_username_or_email": "Tidak bisa menemukan nama pengguna atau surel tersebut.",
"password_incorrect": "Kata Sandi salah.",
"registration_closed": "Pendaftaran Ditutup",
"invalid_password": "Kata sandi tidak valid. Kata sandi harus <= 60 karakter.",
"passwords_dont_match": "Kata Sandi tidak sesuai.",
"captcha_incorrect": "Captcha salah.",
"invalid_username": "Nama Pengguna tidak valid.",
"bio_length_overflow": "Bio pengguna tidak boleh melibihi 300 karakter.",
"couldnt_update_user": "Tidak bisa memperbarui pengguna.",
"couldnt_update_private_message": "Tidak bisa memperbarui pesan pribadi.",
"couldnt_update_post": "Tidak bisa memperbarui pos",
"couldnt_create_private_message": "Tidak bisa membuat pesan pribadi.",
"no_private_message_edit_allowed": "Tidak diperbolehkan untuk mengedit pesan pribadi.",
"post_title_too_long": "Judul pos terlalu panjang.",
"email_already_exists": "Surel sudah ada.",
"user_already_exists": "Pengguna sudah ada.",
"number_of_users_online": "{formattedCount,plural, other{{formattedCount} pengguna sedang daring}}",
"number_of_comments": "{formattedCount,plural, other{{formattedCount} Komentar}}",
"number_of_posts": "{formattedCount,plural, other{{formattedCount} Pos}}",
"number_of_subscribers": "{formattedCount,plural, other{{formattedCount} pelanggan}}",
"number_of_users": "{formattedCount,plural, other{{formattedCount} pengguna}}",
"unsubscribe": "Berhenti berlangganan",
"subscribe": "Berlangganan",
"messages": "Pesan",
"banned_users": "Pengguna Yang Dilarang",
"delete_account_confirm": "Peringatan: ini akan menghapus secara permanen seluruh data Anda di peladen ini. Data Anda mungkin tidak terhapus di peladen lain yang aktif. Masukkan kata sandi Anda untuk mengonfirmasi.",
"new_password": "Kata Sandi Baru",
"verify_password": "Verifikasi Kata Sandi",
"old_password": "Kata Sandi Lama",
"show_avatars": "Perlihatkan Avatar",
"search": "Cari",
"send_message": "Kirim Pesan",
"top_day": "Teratas Hari Ini",
"top_week": "Teratas Pekan Ini",
"top_month": "Teratas Bulan Ini",
"top_year": "Teratas Tahun Ini",
"top_all": "Teratas Sepanjang Waktu",
"most_comments": "Paling Banyak Komentar",
"new_comments": "Komentar Terbaru",
"active": "Aktif",
"bot_account": "Akun Bot",
"show_bot_accounts": "Perlihatkan Akun Bot",
"show_read_posts": "Perlihatkan Pos Yang Sudah Dibaca"
}

View File

@ -1,269 +0,0 @@
{
"@@locale": "ja",
"settings": "設定",
"@settings": {},
"password": "パスワード",
"@password": {},
"email_or_username": "メールアドレスまたはユーザー名",
"@email_or_username": {},
"posts": "投稿",
"@posts": {},
"comments": "コメント",
"@comments": {},
"modlog": "モデレーションログ",
"@modlog": {},
"community": "コミュニティ",
"@community": {},
"url": "URL",
"@url": {},
"title": "タイトル",
"@title": {},
"body": "本文",
"@body": {},
"nsfw": "閲覧注意",
"@nsfw": {},
"post": "投稿",
"@post": {},
"save": "保存",
"@save": {},
"subscribed": "登録済み",
"@subscribed": {},
"local": "インスタンス内",
"@local": {},
"all": "全て",
"@all": {},
"replies": "返信",
"@replies": {},
"mentions": "言及",
"@mentions": {},
"from": "から",
"@from": {},
"to": "投稿先",
"@to": {},
"deleted_by_creator": "投稿者によって削除済み",
"@deleted_by_creator": {},
"more": "さらに表示",
"@more": {},
"mark_as_read": "既読にする",
"@mark_as_read": {},
"mark_as_unread": "未読にする",
"@mark_as_unread": {},
"reply": "返信",
"@reply": {},
"edit": "編集",
"@edit": {},
"delete": "削除",
"@delete": {},
"restore": "復元",
"@restore": {},
"yes": "はい",
"@yes": {},
"no": "いいえ",
"@no": {},
"avatar": "アバター",
"@avatar": {},
"banner": "バナー",
"@banner": {},
"display_name": "表示名",
"@display_name": {},
"bio": "自己紹介",
"@bio": {},
"email": "メールアドレス",
"@email": {},
"matrix_user": "Matrix のユーザーアカウント",
"@matrix_user": {},
"sort_type": "投稿やコメントの並び順",
"@sort_type": {},
"type": "検索対象",
"@type": {},
"show_nsfw": "閲覧注意のコンテンツを表示",
"@show_nsfw": {},
"send_notifications_to_email": "通知を設定したメールアドレスに送信",
"@send_notifications_to_email": {},
"delete_account": "アカウントを削除",
"@delete_account": {},
"saved": "保存済み",
"@saved": {},
"communities": "コミュニティ",
"@communities": {},
"users": "ユーザー",
"@users": {},
"theme": "テーマ",
"@theme": {},
"language": "言語",
"@language": {},
"hot": "人気",
"@hot": {},
"new_": "新しい順",
"@new_": {},
"old": "古い順",
"@old": {},
"top": "トップ",
"@top": {},
"chat": "会話",
"@chat": {},
"admin": "管理者",
"@admin": {},
"by": "投稿者",
"@by": {},
"not_a_mod_or_admin": "モデレーターまたは管理者ではありません。",
"@not_a_mod_or_admin": {},
"not_an_admin": "管理者ではありません。",
"@not_an_admin": {},
"couldnt_find_post": "投稿が見つかりせんでした。",
"@couldnt_find_post": {},
"not_logged_in": "ログインしていません。",
"@not_logged_in": {},
"site_ban": "サイトへのアクセスを禁止されています",
"@site_ban": {},
"community_ban": "このコミュニティへのアクセスを禁止されています。",
"@community_ban": {},
"downvotes_disabled": "反対票を無効化",
"@downvotes_disabled": {},
"invalid_url": "無効なURL。",
"@invalid_url": {},
"locked": "凍結中",
"@locked": {},
"couldnt_create_comment": "投稿が作成されませんでした。",
"@couldnt_create_comment": {},
"couldnt_like_comment": "コメントを「いいね」できませんでした。",
"@couldnt_like_comment": {},
"couldnt_update_comment": "コメントが更新されませんでした。",
"@couldnt_update_comment": {},
"no_comment_edit_allowed": "コメントの編集権限がありません。",
"@no_comment_edit_allowed": {},
"couldnt_save_comment": "コメントが保存されませんでした。",
"@couldnt_save_comment": {},
"couldnt_get_comments": "コメントを読み込みできませんでした。",
"@couldnt_get_comments": {},
"invalid_post_title": "無効な投稿のタイトル",
"@invalid_post_title": {},
"couldnt_create_post": "投稿が作成されませんでした。",
"@couldnt_create_post": {},
"couldnt_like_post": "投稿を「いいね」できませんでした。",
"@couldnt_like_post": {},
"couldnt_find_community": "コミュニティが見つかりませんでした。",
"@couldnt_find_community": {},
"couldnt_get_posts": "投稿を読み込みできませんでした",
"@couldnt_get_posts": {},
"no_post_edit_allowed": "投稿の編集権限がありません。",
"@no_post_edit_allowed": {},
"couldnt_save_post": "投稿が保存されませんでした。",
"@couldnt_save_post": {},
"site_already_exists": "サイトは既に存在します。",
"@site_already_exists": {},
"couldnt_update_site": "サイトが更新されませんでした。",
"@couldnt_update_site": {},
"invalid_community_name": "無効なコミュニティの名前です。",
"@invalid_community_name": {},
"community_already_exists": "コミュニティは既に存在します。",
"@community_already_exists": {},
"community_moderator_already_exists": "コミュニティのモデレーターは既に存在しています。",
"@community_moderator_already_exists": {},
"community_follower_already_exists": "コミュニティへのフォロワーは既に存在します。",
"@community_follower_already_exists": {},
"not_a_moderator": "モデレーターではありません。",
"@not_a_moderator": {},
"couldnt_update_community": "コミュニティを更新できませんでした。",
"@couldnt_update_community": {},
"no_community_edit_allowed": "コミュニティの編集許可がありません。",
"@no_community_edit_allowed": {},
"system_err_login": "システムエラーが発生しました。一度ログアウトして再度ログインしてから、お試しください。",
"@system_err_login": {},
"community_user_already_banned": "コミュニティのユーザーは既にアクセスが禁止されています。",
"@community_user_already_banned": {},
"couldnt_find_that_username_or_email": "ユーザー名またはメールアドレスが見つかりませんでした。",
"@couldnt_find_that_username_or_email": {},
"password_incorrect": "無効なパスワードです。",
"@password_incorrect": {},
"registration_closed": "新規登録は受け付けていません",
"@registration_closed": {},
"invalid_password": "無効なパスワードです。パスワードは必ず60文字以下にしてください。",
"@invalid_password": {},
"passwords_dont_match": "パスワードが一致しません。",
"@passwords_dont_match": {},
"captcha_incorrect": "Captchaコードが合っていません。",
"@captcha_incorrect": {},
"invalid_username": "無効なユーザー名です。",
"@invalid_username": {},
"bio_length_overflow": "自己紹介は 300 文字までです。",
"@bio_length_overflow": {},
"couldnt_update_user": "ユーザーが更新されませんでした。",
"@couldnt_update_user": {},
"couldnt_update_private_message": "プライベートメッセージが更新されませんでした。",
"@couldnt_update_private_message": {},
"couldnt_update_post": "投稿が更新されませんでした",
"@couldnt_update_post": {},
"couldnt_create_private_message": "プライベートメッセージが作成されませんでした。",
"@couldnt_create_private_message": {},
"no_private_message_edit_allowed": "プライベートメッセージの編集許可がありません。",
"@no_private_message_edit_allowed": {},
"post_title_too_long": "投稿のタイトルが長すぎます。",
"@post_title_too_long": {},
"email_already_exists": "メールアドレスが既に使用されています。",
"@email_already_exists": {},
"user_already_exists": "ユーザーは既に存在します。",
"@user_already_exists": {},
"number_of_users_online": "{formattedCount,plural, =1{{formattedCount} 名のユーザーがオンライン} other{{formattedCount} 名のユーザーがオンライン}}",
"@number_of_users_online": {},
"number_of_comments": "{formattedCount,plural, =1{{formattedCount} 件のコメント} other{{formattedCount} 件のコメント}}",
"@number_of_comments": {},
"number_of_posts": "{formattedCount,plural, =1{{formattedCount} 件の投稿} other{{formattedCount} 件の投稿}}",
"@number_of_posts": {},
"number_of_subscribers": "{formattedCount,plural, =1{{formattedCount} 名の登録者} other{{formattedCount} 名の登録者}}",
"@number_of_subscribers": {},
"number_of_users": "{formattedCount,plural, =1{{formattedCount} 名のユーザー} other{{formattedCount} 名のユーザー}}",
"@number_of_users": {},
"unsubscribe": "登録解除",
"@unsubscribe": {},
"subscribe": "登録",
"@subscribe": {},
"messages": "メッセージ",
"@messages": {},
"banned_users": "アクセス禁止してるユーザー",
"@banned_users": {},
"delete_account_confirm": "警告: あなたの全てのデータは、このインスタンスから永久に削除されます。しかし、Lemmyの連合機能によって他のインスタンスにある、あなたの一部のデータは削除されないかもしれません。確認のため、パスワードを入力してください。",
"@delete_account_confirm": {},
"new_password": "新しいパスワード",
"@new_password": {},
"verify_password": "パスワードの確認",
"@verify_password": {},
"old_password": "現在のパスワード",
"@old_password": {},
"show_avatars": "アバターを表示",
"@show_avatars": {},
"search": "検索",
"@search": {},
"send_message": "メッセージを送信",
"@send_message": {},
"top_day": "今日の人気順",
"@top_day": {},
"top_week": "週間での人気順",
"@top_week": {},
"top_month": "月間での人気順",
"@top_month": {},
"top_year": "年間での人気順",
"@top_year": {},
"top_all": "全ての期間での人気順",
"@top_all": {},
"most_comments": "コメントの多い順",
"@most_comments": {},
"new_comments": "新しくコメントが入った順",
"@new_comments": {},
"active": "活発",
"@active": {},
"bot_account": "このアカウントをbotにする",
"@bot_account": {},
"show_bot_accounts": "botアカウントを表示",
"@show_bot_accounts": {},
"show_read_posts": "読んだ投稿を表示",
"@show_read_posts": {},
"report_reason_required": "通報理由は必須です。",
"@report_reason_required": {},
"report_too_long": "通報理由が長すぎます。",
"@report_too_long": {},
"couldnt_create_report": "通報を作成できませんでした。",
"@couldnt_create_report": {},
"couldnt_resolve_report": "通報を解決できませんでした。",
"@couldnt_resolve_report": {}
}

View File

@ -1,71 +0,0 @@
{
"@@locale": "ml",
"settings": "ക്രമീകരണങ്ങൾ",
"password": "രഹസ്യവാക്ക്",
"email_or_username": "ഇമെയിൽ അല്ലെങ്കിൽ ഉപയോക്തൃനാമം",
"posts": "പോസ്റ്റുകൾ",
"modlog": "മോഡ്ലോഗ്",
"url": "യുആർഎൽ",
"title": "ശീർഷകം",
"post": "പോസ്റ്റ് ചെയ്യൂ",
"save": "സംരക്ഷിക്കുക",
"local": "പ്രാദേശികം",
"all": "എല്ലാം",
"replies": "മറുപടികൾ",
"mentions": "സൂചനകൾ",
"more": "കൂടുതൽ",
"mark_as_read": "വായിച്ചതായി അടയാളപ്പെടുത്തുക",
"mark_as_unread": "വായിക്കാത്തതായി അടയാളപ്പെടുത്തുക",
"reply": "മറുപടി",
"edit": "തിരുത്തുക",
"delete": "ഇല്ലാതാക്കുക",
"restore": "വീണ്ടെടുക്കുക",
"yes": "അതെ",
"no": "അല്ല",
"avatar": "അവതാർ",
"banner": "ബാനർ",
"display_name": "പ്രദർശന പേര്",
"bio": "ബയോ",
"email": "ഇമെയിൽ",
"type": "തരം",
"send_notifications_to_email": "അറിയിപ്പുകൾ ഇമെയിലിലേക്ക് അയയ്ക്കുക",
"delete_account": "അക്കൗണ്ട് ഇല്ലാതാക്കുക",
"saved": "സംരക്ഷിച്ചു",
"communities": "കൂട്ടായ്മകൾ",
"users": "ഉപയോക്താക്കൾ",
"theme": "തീം",
"language": "ഭാഷ",
"hot": "'ഹോട്ട്'",
"new_": "പുതിയത്",
"old": "പഴയത്",
"top": "മികച്ചത്",
"chat": "ചാറ്റ്",
"admin": "അഡ്മിൻ",
"not_a_mod_or_admin": "ഒരു മോഡറേറ്റർ അല്ലെങ്കിൽ അഡ്മിൻ അല്ല.",
"not_an_admin": "ഒരു അഡ്മിൻ അല്ല.",
"not_logged_in": "പ്രവേശിച്ചിട്ടില്ല",
"site_ban": "നിങ്ങളെ ഈ സൈറ്റിൽ നിന്ന് നിരോധിച്ചിരിക്കുന്നു",
"locked": "പൂട്ടിയിരിക്കുന്നു",
"invalid_community_name": "അസാധുവായ പേര്.",
"not_a_moderator": "ഒരു മോഡറേറ്റർ അല്ല.",
"email_already_exists": "ഇമെയിൽ ഇതിനകം നിലവിലുണ്ട്.",
"number_of_users_online": "{formattedCount,plural, =1{{formattedCount} ഉപയോക്താവ് ഓൺലൈൻ} other{{formattedCount} ഉപയോക്താക്കൾ ഓൺലൈൻ}}",
"number_of_comments": "{formattedCount,plural, =1{{formattedCount} കമ്മന്റ്} other{{formattedCount} കമ്മന്റുകൾ}}",
"number_of_posts": "{formattedCount,plural, =1{{formattedCount} പോസ്റ്റ്} other{{formattedCount} പോസ്റ്റുകൾ}}",
"number_of_users": "{formattedCount,plural, =1{{formattedCount} ഉപയോക്താവ്} other{{formattedCount} ഉപയോക്താക്കൾ}}",
"messages": "സന്ദേശങ്ങൾ",
"banned_users": "നിരോധിച്ച ഉപയോക്താക്കൾ",
"new_password": "പുതിയ രഹസ്യവാക്ക്",
"verify_password": "രഹസ്യവാക്ക് ഉറപ്പാക്കുക",
"old_password": "പഴയ രഹസ്യവാക്ക്",
"show_avatars": "അവതാറുകൾ കാണിക്കുക",
"search": "തിരയുക",
"send_message": "സന്ദേശം അയയ്ക്കുക",
"top_month": "മാസത്തിൽ മികച്ചത്",
"top_year": "വർഷത്തിൽ മികച്ചത്",
"top_all": "എക്കാലത്തെയും മികച്ചത്",
"active": "സജീവമാണ്",
"bot_account": "റോബോട്ട് അക്കൗണ്ട്",
"show_bot_accounts": "റോബോട്ട് അക്കൗണ്ടുകൾ കാണിക്കുക",
"show_read_posts": "വായിച്ച പോസ്റ്റുകൾ കാണിക്കുക"
}

View File

@ -1,8 +0,0 @@
{
"@@locale": "mnc",
"posts": "ᡧᡠ",
"comments": "ᠯᡝᠣᠯᡝᠨ",
"post": "ᡧ",
"number_of_comments": "{formattedCount,plural, =1{{formattedCount} ᠯᡝᠣᠯᡝᠨ} other{{formattedCount} ᠯᡝᠣᠯᡝᠨ}}",
"number_of_posts": "{formattedCount,plural, =1{{formattedCount} ᡧᡠ} other{{formattedCount} ᡧᡠ}}"
}

View File

@ -1,55 +0,0 @@
{
"@@locale": "oc",
"settings": "Paramètres",
"password": "Senhal",
"posts": "Publicacions",
"comments": "Comentaris",
"community": "Comunitat",
"url": "URL",
"title": "Títol",
"body": "Còs",
"post": "publicar",
"replies": "Responsas",
"mentions": "Mencions",
"more": "mai",
"reply": "respondre",
"edit": "editar",
"delete": "suprimir",
"restore": "restaurar",
"yes": "òc",
"no": "non",
"avatar": "Avatar",
"banner": "Bandièra",
"display_name": "Nom d'afichatge",
"bio": "Biografia",
"email": "Adreça electronica",
"sort_type": "Triar per tipe",
"type": "Tipe",
"delete_account": "Suprimir lo compte",
"saved": "Enregistrat",
"communities": "Comunitats",
"users": "Utilizaires",
"theme": "Tèma",
"language": "Lenga",
"new_": "Nòu",
"by": "per",
"not_logged_in": "Pas connectat.",
"invalid_url": "URL invalida.",
"invalid_community_name": "Nom invalid.",
"invalid_username": "Nom d'utilizaire invalid.",
"user_already_exists": "Lutilizaire existís ja.",
"number_of_users_online": "{formattedCount,plural, =1{{formattedCount} utilizaire en linha} other{{formattedCount} utilizaires en linha}}",
"number_of_comments": "{formattedCount,plural, =1{{formattedCount} comentari} other{{formattedCount} comentaris}}",
"number_of_posts": "{formattedCount,plural, =1{{formattedCount} publicacion} other{{formattedCount} publicacions}}",
"number_of_users": "{formattedCount,plural, =1{{formattedCount} utilizaire} other{{formattedCount} utilizaires}}",
"messages": "Messatges",
"new_password": "Senhal novèl",
"verify_password": "Verificar lo senhal",
"old_password": "Senhal ancian",
"show_avatars": "Mostrar los avatars",
"search": "Recercar",
"send_message": "Enviar un messatge",
"new_comments": "Comentaris novèls",
"bot_account": "Compte de robòt",
"show_bot_accounts": "Mostrar los comptes de robòts"
}

View File

@ -1,136 +0,0 @@
{
"@@locale": "pt",
"settings": "Definições",
"password": "Palavra-passe",
"email_or_username": "Email ou nome de utilizador",
"posts": "Publicações",
"comments": "Comentários",
"modlog": "Registo de moderação",
"community": "Comunidade",
"url": "URL",
"title": "Título",
"body": "Texto",
"nsfw": "NSFW",
"post": "publicar",
"save": "guardar",
"subscribed": "Subscrito",
"local": "Local",
"all": "Tudo",
"replies": "Respostas",
"mentions": "Menções",
"from": "de",
"to": "para",
"deleted_by_creator": "apagado pelo autor",
"more": "mais",
"mark_as_read": "marcar como lida",
"mark_as_unread": "marcar como não lida",
"reply": "responder",
"edit": "editar",
"delete": "apagar",
"restore": "restaurar",
"yes": "sim",
"no": "não",
"avatar": "Avatar",
"banner": "Capa",
"display_name": "Nome de exibição",
"bio": "Biografia",
"email": "Correio eletrónico",
"matrix_user": "Utilizador Matrix",
"sort_type": "Tipo de ordenação",
"type": "Tipo",
"show_nsfw": "Mostrar conteúdo NSFW",
"send_notifications_to_email": "Enviar notificações por correio eletrónico",
"delete_account": "Apagar conta",
"saved": "Guardado",
"communities": "Comunidades",
"users": "Utilizadores",
"theme": "Tema",
"language": "Idioma",
"hot": "Mais ativos",
"new_": "Novo",
"old": "Antigo",
"top": "Topo",
"chat": "Conversa",
"admin": "administrador",
"by": "por",
"not_a_mod_or_admin": "Não és um moderador ou administrador.",
"not_an_admin": "Não és um administrador.",
"couldnt_find_post": "Não foi possível encontrar a publicação.",
"not_logged_in": "Não autenticado.",
"site_ban": "Foste banido do site",
"community_ban": "Foste banido desta comunidade.",
"downvotes_disabled": "Votos negativos desativados",
"invalid_url": "URL inválido.",
"locked": "bloqueado",
"couldnt_create_comment": "Não foi possível criar o comentário.",
"couldnt_like_comment": "Não foi possível gostar do comentário.",
"couldnt_update_comment": "Não foi possível atualizar o comentário.",
"no_comment_edit_allowed": "Não podes editar este comentário.",
"couldnt_save_comment": "Não foi possível guardar o comentário.",
"couldnt_get_comments": "Não foi possível obter os comentários.",
"report_reason_required": "É necessária uma razão para a denúncia.",
"report_too_long": "Denúncia demasiado longa.",
"couldnt_create_report": "Não foi possível criar a denúncia.",
"couldnt_resolve_report": "Não foi possível resolver a denúncia.",
"invalid_post_title": "Título de publicação inválido",
"couldnt_create_post": "Não foi possível criar a publicação.",
"couldnt_like_post": "Não foi possível gostar da publicação.",
"couldnt_find_community": "Não foi possível encontrar a comunidade.",
"couldnt_get_posts": "Não foi possível obter as publicações",
"no_post_edit_allowed": "Não podes editar esta publicação.",
"couldnt_save_post": "Não foi possível guardar a publicação.",
"site_already_exists": "O site já existe.",
"couldnt_update_site": "Não foi possível atualizar o site.",
"invalid_community_name": "Nome inválido.",
"community_already_exists": "Essa comunidade já existe.",
"community_moderator_already_exists": "Esse utilizador já modera esta comunidade.",
"community_follower_already_exists": "Esse utilizador já segue esta comunidade.",
"not_a_moderator": "Não és um moderador.",
"couldnt_update_community": "Não foi possível atualizar a comunidade.",
"no_community_edit_allowed": "Não podes editar esta comunidade.",
"system_err_login": "Erro do sistema. Tenta sair e voltar a entrar.",
"community_user_already_banned": "Esse utilizador já foi banido da comunidade.",
"couldnt_find_that_username_or_email": "Não foi possível encontrar esse nome ou endereço de correio eletrónico.",
"password_incorrect": "Palavra-passe incorreta.",
"registration_closed": "Inscrições fechadas",
"invalid_password": "Palavra-passe inválida. Tem que ter 60 ou menos caracteres.",
"passwords_dont_match": "As palavras-passe não coincidem.",
"captcha_incorrect": "CAPTCHA incorreto.",
"invalid_username": "Nome de utilizador inválido.",
"bio_length_overflow": "A biografia não pode exceder 300 caracteres.",
"couldnt_update_user": "Não foi possível atualizar o utilizador.",
"couldnt_update_private_message": "Não foi possível atualizar a mensagem privada.",
"couldnt_update_post": "Não foi possível atualizar a publicação",
"couldnt_create_private_message": "Não foi possível criar a mensagem privada.",
"no_private_message_edit_allowed": "Não podes editar a mensagem privada.",
"post_title_too_long": "Título da publicação demasiado longo.",
"email_already_exists": "Esse endereço de correio eletrónico já está registado.",
"user_already_exists": "Esse utilizador já existe.",
"number_of_users_online": "{formattedCount,plural, =1{{formattedCount} utilizador em linha} other{{formattedCount} utilizadores em linha}}",
"number_of_comments": "{formattedCount,plural, =1{{formattedCount} comentário} other{{formattedCount} comentários}}",
"number_of_posts": "{formattedCount,plural, =1{{formattedCount} publicação} other{{formattedCount} publicações}}",
"number_of_subscribers": "{formattedCount,plural, =1{{formattedCount} subscritor} other{{formattedCount} subscritores}}",
"number_of_users": "{formattedCount,plural, =1{{formattedCount} utilizador} other{{formattedCount} utilizadores}}",
"unsubscribe": "Cancelar subscrição",
"subscribe": "Subscrever",
"messages": "Mensagens",
"banned_users": "Utilizadores banidos",
"delete_account_confirm": "Aviso: esta ação irá apagar permanentemente todos os teus dados desta instância. Estes poderão não ser apagados noutras instâncias existentes. Insire a tua palavra-passe para confirmar.",
"new_password": "Nova palavra-passe",
"verify_password": "Verificar palavra-passe",
"old_password": "Palavra-passe antiga",
"show_avatars": "Mostrar avatares",
"search": "Procurar",
"send_message": "Enviar mensagem",
"top_day": "Topo do dia",
"top_week": "Topo da semana",
"top_month": "Topo do mês",
"top_year": "Topo do ano",
"top_all": "Topo de sempre",
"most_comments": "Mais comentários",
"new_comments": "Novos comentários",
"active": "Ativos",
"bot_account": "Conta robô",
"show_bot_accounts": "Mostrar contas robô",
"show_read_posts": "Mostrar publicações lidas"
}

View File

@ -1,8 +0,0 @@
{
"@@locale": "sk",
"posts": "Príspevky",
"comments": "Komentáre",
"post": "Poslať",
"communities": "Komunity",
"users": "Užívatelia"
}

View File

@ -1,136 +0,0 @@
{
"@@locale": "vi",
"settings": "Cài đặt",
"password": "Mật khẩu",
"email_or_username": "Email hoặc Tên tài khoản",
"posts": "Bài đăng",
"comments": "Bình luận",
"modlog": "Nhật ký kiểm duyệt",
"community": "Cộng đồng",
"url": "URL",
"title": "Tiêu đề",
"body": "Nội dung",
"nsfw": "NSFW",
"post": "Bình luận",
"save": "Lưu",
"subscribed": "Đã đăng ký",
"local": "Máy chủ",
"all": "Toàn bộ",
"replies": "Trả lời",
"mentions": "Lượt nhắc",
"from": "từ",
"to": "trong",
"deleted_by_creator": "người viết tự xoá",
"more": "xem thêm",
"mark_as_read": "đánh dấu là đã đọc",
"mark_as_unread": "đánh dấu là chưa đọc",
"reply": "trả lời",
"edit": "chỉnh sửa",
"delete": "xoá",
"restore": "khôi phục",
"yes": "đồng ý",
"no": "huỷ bỏ",
"avatar": "Ảnh đại diện",
"banner": "Ảnh bìa",
"display_name": "Tên hiển thị",
"bio": "Tiểu sử",
"email": "Email",
"matrix_user": "Matrix",
"sort_type": "Xếp theo",
"type": "Loại",
"show_nsfw": "Hiện nội dung NSFW",
"send_notifications_to_email": "Gửi thông báo đến email",
"delete_account": "Xoá tài khoản",
"saved": "Đã lưu",
"communities": "Danh sách cộng đồng",
"users": "Thành viên",
"theme": "Giao diện",
"language": "Ngôn ngữ",
"hot": "Hot",
"new_": "Mới nhất",
"old": "Cũ nhất",
"top": "Nổi bật nhất",
"chat": "Chat",
"admin": "quản trị viên",
"by": "bởi",
"not_a_mod_or_admin": "Không phải đội ngũ vận hành.",
"not_an_admin": "Không phải quản trị viên.",
"couldnt_find_post": "Không tìm thấy bài đăng.",
"not_logged_in": "Chưa đăng nhập",
"site_ban": "Bạn vừa bị cấm khỏi trang",
"community_ban": "Bạn bị cấm ở cộng đồng này.",
"downvotes_disabled": "Phản đối đã tắt",
"invalid_url": "URL không hợp lệ.",
"locked": "đã khóa",
"couldnt_create_comment": "Không thể bình luận.",
"couldnt_like_comment": "Không thể thích bình luận",
"couldnt_update_comment": "Không thể cập nhật bình luận.",
"no_comment_edit_allowed": "Không cho phép sửa bình luận.",
"couldnt_save_comment": "Không thể lưu bình luận.",
"couldnt_get_comments": "Không thể xem bình luận.",
"report_reason_required": "Bắt buộc có lý do báo cáo.",
"report_too_long": "Báo cáo quá dài.",
"couldnt_create_report": "Không thể tạo báo cáo.",
"couldnt_resolve_report": "Không thể giải quyết báo cáo.",
"invalid_post_title": "Tựa đề bài đăng không hợp lệ",
"couldnt_create_post": "Không thể đăng bài.",
"couldnt_like_post": "Không thể thích bài đăng.",
"couldnt_find_community": "Không tìm thấy cộng đồng",
"couldnt_get_posts": "Không thể xem bài đăng",
"no_post_edit_allowed": "Không cho phép sửa bài đăng.",
"couldnt_save_post": "Không thể lưu bài đăng.",
"site_already_exists": "Trang đã tồn tại.",
"couldnt_update_site": "Không thể cập nhật trang.",
"invalid_community_name": "Tên không hợp lệ.",
"community_already_exists": "Cộng đồng đã tồn tại.",
"community_moderator_already_exists": "Kiểm duyệt viên đã tồn tại.",
"community_follower_already_exists": "Người theo dõi cộng đồng đã tồn tại.",
"not_a_moderator": "Không phải kiểm duyệt viên.",
"couldnt_update_community": "Không thể cập nhật cộng đồng.",
"no_community_edit_allowed": "Không cho phép sửa cộng đồng.",
"system_err_login": "Lỗi hệ thống. Hãy đăng xuất rồi đăng nhập lại.",
"community_user_already_banned": "Đã cấm thành viên cộng đồng.",
"couldnt_find_that_username_or_email": "Không tìm thấy tên thành viên hoặc email.",
"password_incorrect": "Sai mật khẩu.",
"registration_closed": "Đăng ký đã tắt",
"invalid_password": "Mật khẩu không hợp lệ. Mật khẩu phải ít hơn 60 ký tự.",
"passwords_dont_match": "Mật khẩu không khớp.",
"captcha_incorrect": "Sai captcha.",
"invalid_username": "Tên tài khoản không hợp lệ.",
"bio_length_overflow": "Tiểu sử thành viên tối đa 300 ký tự.",
"couldnt_update_user": "Không thể cập nhật thành viên.",
"couldnt_update_private_message": "Không thể cập nhật tin nhắn riêng.",
"couldnt_update_post": "Không thể cập nhật bài đăng",
"couldnt_create_private_message": "Không thể nhắn tin riêng.",
"no_private_message_edit_allowed": "Không cho phép chỉnh sửa tin nhắn riêng.",
"post_title_too_long": "Tựa đề quá dài.",
"email_already_exists": "Email đã tồn tại.",
"user_already_exists": "Thành viên đã tồn tại.",
"number_of_users_online": "{formattedCount,plural, other{{formattedCount} thành viên online}}",
"number_of_comments": "{formattedCount,plural, other{{formattedCount} Bình luận}}",
"number_of_posts": "{formattedCount,plural, other{{formattedCount} Bài đăng}}",
"number_of_subscribers": "{formattedCount,plural, other{{formattedCount} người theo dõi}}",
"number_of_users": "{formattedCount,plural, other{{formattedCount} thành viên}}",
"unsubscribe": "Huỷ đăng ký",
"subscribe": "Đăng ký",
"messages": "Tin nhắn",
"banned_users": "Những tài khoản đã bị cấm",
"delete_account_confirm": "Cảnh báo: điều này sẽ khiến toàn bộ dữ liệu của bạn bị xoá vĩnh viễn khỏi máy chủ. Nhập mật khẩu để xác nhận.",
"new_password": "Mật khẩu mới",
"verify_password": "Xác nhận mật khẩu",
"old_password": "Mật khẩu cũ",
"show_avatars": "Hiện Ảnh đại diện",
"search": "Tìm kiếm",
"send_message": "Nhắn tin",
"top_day": "Theo ngày",
"top_week": "Theo tuần",
"top_month": "Theo tháng",
"top_year": "Theo năm",
"top_all": "Mọi lúc",
"most_comments": "Nhiều bình luận",
"new_comments": "Mới bình luận",
"active": "Ngẫu nhiên",
"bot_account": "Tài khoản Bot",
"show_bot_accounts": "Hiện Tài khoản Bot",
"show_read_posts": "Hiện Bài đăng đọc"
}

View File

@ -1,29 +0,0 @@
{
"@@locale": "zh_Hant",
"settings": "設定",
"posts": "貼文",
"comments": "評論",
"modlog": "管理紀錄",
"post": "回文",
"deleted_by_creator": "作者已刪除",
"more": "更多",
"mark_as_read": "標記為已讀",
"mark_as_unread": "標記為未讀",
"reply": "回覆",
"edit": "編輯",
"delete": "刪除",
"avatar": "頭貼",
"banner": "橫幅",
"delete_account": "刪除帳號",
"communities": "社群",
"users": "使用者",
"locked": "已鎖定",
"invalid_community_name": "無效的名稱。",
"number_of_comments": "{formattedCount,plural, other{{formattedCount} 則評論}}",
"number_of_posts": "{formattedCount,plural, other{{formattedCount} 貼文}}",
"show_avatars": "顯示頭貼",
"send_message": "發送私人訊息",
"bot_account": "機器人帳號",
"show_bot_accounts": "顯示機器人帳號",
"show_read_posts": "顯示已讀貼文"
}

View File

@ -1,10 +0,0 @@
platform :android do
desc "Deploy a new version to the Google Play"
lane :prod do
upload_to_play_store(
package_name: "com.krawieck.lemmur",
json_key: ENV["GOOGLE_SERVICE_ACCOUNT_KEY_PATH"],
aab: ENV["ABB_PATH"]
)
end
end

View File

@ -1,3 +0,0 @@
source "https://rubygems.org"
gem "fastlane"

View File

@ -1,213 +0,0 @@
GEM
remote: https://rubygems.org/
specs:
CFPropertyList (3.0.3)
addressable (2.8.0)
public_suffix (>= 2.0.2, < 5.0)
artifactory (3.0.15)
atomos (0.1.3)
aws-eventstream (1.2.0)
aws-partitions (1.496.0)
aws-sdk-core (3.121.0)
aws-eventstream (~> 1, >= 1.0.2)
aws-partitions (~> 1, >= 1.239.0)
aws-sigv4 (~> 1.1)
jmespath (~> 1.0)
aws-sdk-kms (1.48.0)
aws-sdk-core (~> 3, >= 3.120.0)
aws-sigv4 (~> 1.1)
aws-sdk-s3 (1.102.0)
aws-sdk-core (~> 3, >= 3.120.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.4)
aws-sigv4 (1.4.0)
aws-eventstream (~> 1, >= 1.0.2)
babosa (1.0.4)
claide (1.0.3)
colored (1.2)
colored2 (3.1.2)
commander (4.6.0)
highline (~> 2.0.0)
declarative (0.0.20)
digest-crc (0.6.4)
rake (>= 12.0.0, < 14.0.0)
domain_name (0.5.20190701)
unf (>= 0.0.5, < 1.0.0)
dotenv (2.7.6)
emoji_regex (3.2.2)
excon (0.85.0)
faraday (1.7.1)
faraday-em_http (~> 1.0)
faraday-em_synchrony (~> 1.0)
faraday-excon (~> 1.1)
faraday-httpclient (~> 1.0.1)
faraday-net_http (~> 1.0)
faraday-net_http_persistent (~> 1.1)
faraday-patron (~> 1.0)
faraday-rack (~> 1.0)
multipart-post (>= 1.2, < 3)
ruby2_keywords (>= 0.0.4)
faraday-cookie_jar (0.0.7)
faraday (>= 0.8.0)
http-cookie (~> 1.0.0)
faraday-em_http (1.0.0)
faraday-em_synchrony (1.0.0)
faraday-excon (1.1.0)
faraday-httpclient (1.0.1)
faraday-net_http (1.0.1)
faraday-net_http_persistent (1.2.0)
faraday-patron (1.0.0)
faraday-rack (1.0.0)
faraday_middleware (1.1.0)
faraday (~> 1.0)
fastimage (2.2.5)
fastlane (2.193.0)
CFPropertyList (>= 2.3, < 4.0.0)
addressable (>= 2.8, < 3.0.0)
artifactory (~> 3.0)
aws-sdk-s3 (~> 1.0)
babosa (>= 1.0.3, < 2.0.0)
bundler (>= 1.12.0, < 3.0.0)
colored
commander (~> 4.6)
dotenv (>= 2.1.1, < 3.0.0)
emoji_regex (>= 0.1, < 4.0)
excon (>= 0.71.0, < 1.0.0)
faraday (~> 1.0)
faraday-cookie_jar (~> 0.0.6)
faraday_middleware (~> 1.0)
fastimage (>= 2.1.0, < 3.0.0)
gh_inspector (>= 1.1.2, < 2.0.0)
google-apis-androidpublisher_v3 (~> 0.3)
google-apis-playcustomapp_v1 (~> 0.1)
google-cloud-storage (~> 1.31)
highline (~> 2.0)
json (< 3.0.0)
jwt (>= 2.1.0, < 3)
mini_magick (>= 4.9.4, < 5.0.0)
multipart-post (~> 2.0.0)
naturally (~> 2.2)
optparse (~> 0.1.1)
plist (>= 3.1.0, < 4.0.0)
rubyzip (>= 2.0.0, < 3.0.0)
security (= 0.1.3)
simctl (~> 1.6.3)
terminal-notifier (>= 2.0.0, < 3.0.0)
terminal-table (>= 1.4.5, < 2.0.0)
tty-screen (>= 0.6.3, < 1.0.0)
tty-spinner (>= 0.8.0, < 1.0.0)
word_wrap (~> 1.0.0)
xcodeproj (>= 1.13.0, < 2.0.0)
xcpretty (~> 0.3.0)
xcpretty-travis-formatter (>= 0.0.3)
gh_inspector (1.1.3)
google-apis-androidpublisher_v3 (0.11.0)
google-apis-core (>= 0.4, < 2.a)
google-apis-core (0.4.1)
addressable (~> 2.5, >= 2.5.1)
googleauth (>= 0.16.2, < 2.a)
httpclient (>= 2.8.1, < 3.a)
mini_mime (~> 1.0)
representable (~> 3.0)
retriable (>= 2.0, < 4.a)
rexml
webrick
google-apis-iamcredentials_v1 (0.7.0)
google-apis-core (>= 0.4, < 2.a)
google-apis-playcustomapp_v1 (0.5.0)
google-apis-core (>= 0.4, < 2.a)
google-apis-storage_v1 (0.6.0)
google-apis-core (>= 0.4, < 2.a)
google-cloud-core (1.6.0)
google-cloud-env (~> 1.0)
google-cloud-errors (~> 1.0)
google-cloud-env (1.5.0)
faraday (>= 0.17.3, < 2.0)
google-cloud-errors (1.1.0)
google-cloud-storage (1.34.1)
addressable (~> 2.5)
digest-crc (~> 0.4)
google-apis-iamcredentials_v1 (~> 0.1)
google-apis-storage_v1 (~> 0.1)
google-cloud-core (~> 1.6)
googleauth (>= 0.16.2, < 2.a)
mini_mime (~> 1.0)
googleauth (0.17.1)
faraday (>= 0.17.3, < 2.0)
jwt (>= 1.4, < 3.0)
memoist (~> 0.16)
multi_json (~> 1.11)
os (>= 0.9, < 2.0)
signet (~> 0.15)
highline (2.0.3)
http-cookie (1.0.4)
domain_name (~> 0.5)
httpclient (2.8.3)
jmespath (1.4.0)
json (2.5.1)
jwt (2.2.3)
memoist (0.16.2)
mini_magick (4.11.0)
mini_mime (1.1.1)
multi_json (1.15.0)
multipart-post (2.0.0)
nanaimo (0.3.0)
naturally (2.2.1)
optparse (0.1.1)
os (1.1.1)
plist (3.6.0)
public_suffix (4.0.6)
rake (13.0.6)
representable (3.1.1)
declarative (< 0.1.0)
trailblazer-option (>= 0.1.1, < 0.2.0)
uber (< 0.2.0)
retriable (3.1.2)
rexml (3.2.5)
rouge (2.0.7)
ruby2_keywords (0.0.5)
rubyzip (2.3.2)
security (0.1.3)
signet (0.16.0)
addressable (~> 2.8)
faraday (>= 0.17.3, < 2.0)
jwt (>= 1.5, < 3.0)
multi_json (~> 1.10)
simctl (1.6.8)
CFPropertyList
naturally
terminal-notifier (2.0.0)
terminal-table (1.8.0)
unicode-display_width (~> 1.1, >= 1.1.1)
trailblazer-option (0.1.1)
tty-cursor (0.7.1)
tty-screen (0.8.1)
tty-spinner (0.9.3)
tty-cursor (~> 0.7)
uber (0.1.0)
unf (0.1.4)
unf_ext
unf_ext (0.0.7.7)
unicode-display_width (1.7.0)
webrick (1.7.0)
word_wrap (1.0.0)
xcodeproj (1.21.0)
CFPropertyList (>= 2.3.3, < 4.0)
atomos (~> 0.1.3)
claide (>= 1.0.2, < 2.0)
colored2 (~> 3.1)
nanaimo (~> 0.3.0)
rexml (~> 3.2.4)
xcpretty (0.3.0)
rouge (~> 2.0.7)
xcpretty-travis-formatter (1.0.1)
xcpretty (~> 0.2, >= 0.0.7)
PLATFORMS
x86_64-linux
DEPENDENCIES
fastlane
BUNDLED WITH
2.2.27

View File

@ -1,29 +0,0 @@
fastlane documentation
================
# Installation
Make sure you have the latest version of the Xcode command line tools installed:
```
xcode-select --install
```
Install _fastlane_ using
```
[sudo] gem install fastlane -NV
```
or alternatively using `brew install fastlane`
# Available Actions
## Android
### android prod
```
fastlane android prod
```
Deploy a new version to the Google Play
----
This README.md is auto-generated and will be re-generated every time [_fastlane_](https://fastlane.tools) is run.
More information about fastlane can be found on [fastlane.tools](https://fastlane.tools).
The documentation of fastlane can be found on [docs.fastlane.tools](https://docs.fastlane.tools).

View File

@ -1 +0,0 @@
Ein mobiler Client für Lemmy - eine föderierte Reddit-Alternative

View File

@ -1 +0,0 @@
lemmur

View File

@ -1,4 +0,0 @@
### Added
- Support for Lemmy v0.12.0
- Show cake day on a user's profile and next to their name in a comment

View File

@ -1,17 +0,0 @@
### Added
- Blocking of users and communities (from post and from comment)
- Reporting posts and comments
- Android theme-aware splash screen (thanks to [@mimi89999](https://github.com/mimi89999))
- Logging: local logs about some actions/errors. Can be accessed from **settings > about lemmur > logs**
### Fixed
- Fixed a bug where post would go out of sync with full version of the post
- Fixed a bug where making a comment selectable would not always result in making the comment selectable
- Full post will now open no matter where you press on the post card
- Fixed overflows in various places
### Changed
- User banner photo now fits better on user profile

View File

@ -1,7 +0,0 @@
### Added
- Support for Lemmy v0.15.0
### Changed
- "Time ago" strings, dates, and compact numbers are now localized

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 35 KiB

View File

@ -21,6 +21,6 @@
<key>CFBundleVersion</key>
<string>1.0</string>
<key>MinimumOSVersion</key>
<string>9.0</string>
<string>8.0</string>
</dict>
</plist>

View File

@ -1,111 +1,67 @@
PODS:
- DKImagePickerController/Core (4.3.3):
- DKImagePickerController/ImageDataManager
- DKImagePickerController/Resource
- DKImagePickerController/ImageDataManager (4.3.3)
- DKImagePickerController/PhotoGallery (4.3.3):
- DKImagePickerController/Core
- DKPhotoGallery
- DKImagePickerController/Resource (4.3.3)
- DKPhotoGallery (0.0.17):
- DKPhotoGallery/Core (= 0.0.17)
- DKPhotoGallery/Model (= 0.0.17)
- DKPhotoGallery/Preview (= 0.0.17)
- DKPhotoGallery/Resource (= 0.0.17)
- SDWebImage
- SwiftyGif
- DKPhotoGallery/Core (0.0.17):
- DKPhotoGallery/Model
- DKPhotoGallery/Preview
- SDWebImage
- SwiftyGif
- DKPhotoGallery/Model (0.0.17):
- SDWebImage
- SwiftyGif
- DKPhotoGallery/Preview (0.0.17):
- DKPhotoGallery/Model
- DKPhotoGallery/Resource
- SDWebImage
- SwiftyGif
- DKPhotoGallery/Resource (0.0.17):
- SDWebImage
- SwiftyGif
- file_picker (0.0.1):
- DKImagePickerController/PhotoGallery
- Flutter
- Flutter (1.0.0)
- flutter_keyboard_visibility (0.0.1):
- FMDB (2.7.5):
- FMDB/standard (= 2.7.5)
- FMDB/standard (2.7.5)
- image_picker (0.0.1):
- Flutter
- image_picker_ios (0.0.1):
- package_info (0.0.1):
- Flutter
- package_info_plus (0.4.5):
- path_provider (0.0.1):
- Flutter
- path_provider_ios (0.0.1):
- share (0.0.1):
- Flutter
- SDWebImage (5.12.5):
- SDWebImage/Core (= 5.12.5)
- SDWebImage/Core (5.12.5)
- share_plus (0.0.1):
- shared_preferences (0.0.1):
- Flutter
- shared_preferences_ios (0.0.1):
- sqflite (0.0.2):
- Flutter
- SwiftyGif (5.4.3)
- url_launcher_ios (0.0.1):
- FMDB (>= 2.7.5)
- url_launcher (0.0.1):
- Flutter
DEPENDENCIES:
- file_picker (from `.symlinks/plugins/file_picker/ios`)
- Flutter (from `Flutter`)
- flutter_keyboard_visibility (from `.symlinks/plugins/flutter_keyboard_visibility/ios`)
- image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`)
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
- path_provider_ios (from `.symlinks/plugins/path_provider_ios/ios`)
- share_plus (from `.symlinks/plugins/share_plus/ios`)
- shared_preferences_ios (from `.symlinks/plugins/shared_preferences_ios/ios`)
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
- image_picker (from `.symlinks/plugins/image_picker/ios`)
- package_info (from `.symlinks/plugins/package_info/ios`)
- path_provider (from `.symlinks/plugins/path_provider/ios`)
- share (from `.symlinks/plugins/share/ios`)
- shared_preferences (from `.symlinks/plugins/shared_preferences/ios`)
- sqflite (from `.symlinks/plugins/sqflite/ios`)
- url_launcher (from `.symlinks/plugins/url_launcher/ios`)
SPEC REPOS:
trunk:
- DKImagePickerController
- DKPhotoGallery
- SDWebImage
- SwiftyGif
- FMDB
EXTERNAL SOURCES:
file_picker:
:path: ".symlinks/plugins/file_picker/ios"
Flutter:
:path: Flutter
flutter_keyboard_visibility:
:path: ".symlinks/plugins/flutter_keyboard_visibility/ios"
image_picker_ios:
:path: ".symlinks/plugins/image_picker_ios/ios"
package_info_plus:
:path: ".symlinks/plugins/package_info_plus/ios"
path_provider_ios:
:path: ".symlinks/plugins/path_provider_ios/ios"
share_plus:
:path: ".symlinks/plugins/share_plus/ios"
shared_preferences_ios:
:path: ".symlinks/plugins/shared_preferences_ios/ios"
url_launcher_ios:
:path: ".symlinks/plugins/url_launcher_ios/ios"
image_picker:
:path: ".symlinks/plugins/image_picker/ios"
package_info:
:path: ".symlinks/plugins/package_info/ios"
path_provider:
:path: ".symlinks/plugins/path_provider/ios"
share:
:path: ".symlinks/plugins/share/ios"
shared_preferences:
:path: ".symlinks/plugins/shared_preferences/ios"
sqflite:
:path: ".symlinks/plugins/sqflite/ios"
url_launcher:
:path: ".symlinks/plugins/url_launcher/ios"
SPEC CHECKSUMS:
DKImagePickerController: 72fd378f244cef3d27288e0aebf217a4467e4012
DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179
file_picker: 817ab1d8cd2da9d2da412a417162deee3500fc95
Flutter: 50d75fe2f02b26cc09d224853bb45737f8b3214a
flutter_keyboard_visibility: 0339d06371254c3eb25eeb90ba8d17dca8f9c069
image_picker_ios: b786a5dcf033a8336a657191401bfdf12017dabb
package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e
path_provider_ios: 14f3d2fd28c4fdb42f44e0f751d12861c43cee02
SDWebImage: 0905f1b7760fc8ac4198cae0036600d67478751e
share_plus: 056a1e8ac890df3e33cb503afffaf1e9b4fbae68
shared_preferences_ios: 548a61f8053b9b8a49ac19c1ffbc8b92c50d68ad
SwiftyGif: 6c3eafd0ce693cad58bb63d2b2fb9bacb8552780
url_launcher_ios: 839c58cdb4279282219f5e248c3321761ff3c4de
Flutter: 434fef37c0980e73bb6479ef766c45957d4b510c
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
image_picker: 50e7c7ff960e5f58faa4d1f4af84a771c671bc4a
package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62
path_provider: abfe2b5c733d04e238b0d8691db0cfd63a27a93c
share: 0b2c3e82132f5888bccca3351c504d0003b3b410
shared_preferences: af6bfa751691cdc24be3045c43ec037377ada40d
sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904
url_launcher: 6fef411d543ceb26efce54b05a0a40bfd74cbbef
PODFILE CHECKSUM: aafe91acc616949ddb318b77800a7f51bffa2a4c
COCOAPODS: 1.11.3
COCOAPODS: 1.10.1

View File

@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
objectVersion = 51;
objectVersion = 50;
objects = {
/* Begin PBXBuildFile section */
@ -33,13 +33,10 @@
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
20AF123CE6B282DF5FCC0E08 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
3064BA8287AEF7F9E6523E2E /* Pods-Runner.debug-prod.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug-prod.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug-prod.xcconfig"; sourceTree = "<group>"; };
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
4E5591CE3BD9F89AE791097F /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
5D359FC3B8BF643CBF087D7C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
5DC9EF56CF79F18EC6F8E97B /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
5F74EE2F2B11182F6DF33F2E /* Pods-Runner.release-prod.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release-prod.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release-prod.xcconfig"; sourceTree = "<group>"; };
61F7B8503D323D03015ED0C2 /* Pods-Runner.profile-dev.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile-dev.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile-dev.xcconfig"; sourceTree = "<group>"; };
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
@ -50,8 +47,6 @@
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
BAF12CFD300959413D4373DD /* Pods-Runner.release-dev.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release-dev.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release-dev.xcconfig"; sourceTree = "<group>"; };
C282F331F7E23515AB5C91ED /* Pods-Runner.debug-dev.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug-dev.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug-dev.xcconfig"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@ -72,11 +67,6 @@
20AF123CE6B282DF5FCC0E08 /* Pods-Runner.debug.xcconfig */,
5D359FC3B8BF643CBF087D7C /* Pods-Runner.release.xcconfig */,
5DC9EF56CF79F18EC6F8E97B /* Pods-Runner.profile.xcconfig */,
C282F331F7E23515AB5C91ED /* Pods-Runner.debug-dev.xcconfig */,
3064BA8287AEF7F9E6523E2E /* Pods-Runner.debug-prod.xcconfig */,
BAF12CFD300959413D4373DD /* Pods-Runner.release-dev.xcconfig */,
5F74EE2F2B11182F6DF33F2E /* Pods-Runner.release-prod.xcconfig */,
61F7B8503D323D03015ED0C2 /* Pods-Runner.profile-dev.xcconfig */,
);
path = Pods;
sourceTree = "<group>";
@ -173,7 +163,7 @@
97C146E61CF9000F007C117D /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 1300;
LastUpgradeCheck = 1020;
ORGANIZATIONNAME = "";
TargetAttributes = {
97C146ED1CF9000F007C117D = {
@ -316,7 +306,87 @@
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
1889477126E7F08600887334 /* Debug-prod */ = {
249021D3217E4FDB00AE95B9 /* Profile */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Profile;
};
249021D4217E4FDB00AE95B9 /* Profile */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = NMDSW6KGG7;
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
PRODUCT_BUNDLE_IDENTIFIER = com.krawieck.lemmur;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = Profile;
};
97C147031CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
@ -363,20 +433,71 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = "Debug-prod";
name = Debug;
};
1889477226E7F08600887334 /* Debug-prod */ = {
97C147041CF9000F007C117D /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
97C147061CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
BUNDLE_NAME = lemmur;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = NMDSW6KGG7;
@ -401,66 +522,13 @@
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = "Debug-prod";
name = Debug;
};
1889477326E7F09600887334 /* Release-prod */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = "Release-prod";
};
1889477426E7F09600887334 /* Release-prod */ = {
97C147071CF9000F007C117D /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
BUNDLE_NAME = lemmur;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = NMDSW6KGG7;
@ -484,258 +552,7 @@
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = "Release-prod";
};
249021D3217E4FDB00AE95B9 /* Profile-dev */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = "Profile-dev";
};
249021D4217E4FDB00AE95B9 /* Profile-dev */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
BUNDLE_NAME = "lemmur DEV";
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = NMDSW6KGG7;
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
PRODUCT_BUNDLE_IDENTIFIER = com.krawieck.lemmur.dev;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = "Profile-dev";
};
97C147031CF9000F007C117D /* Debug-dev */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = "Debug-dev";
};
97C147041CF9000F007C117D /* Release-dev */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = "Release-dev";
};
97C147061CF9000F007C117D /* Debug-dev */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
BUNDLE_NAME = "lemmur DEV";
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = NMDSW6KGG7;
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
PRODUCT_BUNDLE_IDENTIFIER = com.krawieck.lemmur.dev;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = "Debug-dev";
};
97C147071CF9000F007C117D /* Release-dev */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
BUNDLE_NAME = "lemmur DEV";
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = NMDSW6KGG7;
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
PRODUCT_BUNDLE_IDENTIFIER = com.krawieck.lemmur.dev;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = "Release-dev";
name = Release;
};
/* End XCBuildConfiguration section */
@ -743,26 +560,22 @@
97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
isa = XCConfigurationList;
buildConfigurations = (
97C147031CF9000F007C117D /* Debug-dev */,
1889477126E7F08600887334 /* Debug-prod */,
97C147041CF9000F007C117D /* Release-dev */,
1889477326E7F09600887334 /* Release-prod */,
249021D3217E4FDB00AE95B9 /* Profile-dev */,
97C147031CF9000F007C117D /* Debug */,
97C147041CF9000F007C117D /* Release */,
249021D3217E4FDB00AE95B9 /* Profile */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = "Release-dev";
defaultConfigurationName = Release;
};
97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
isa = XCConfigurationList;
buildConfigurations = (
97C147061CF9000F007C117D /* Debug-dev */,
1889477226E7F08600887334 /* Debug-prod */,
97C147071CF9000F007C117D /* Release-dev */,
1889477426E7F09600887334 /* Release-prod */,
249021D4217E4FDB00AE95B9 /* Profile-dev */,
97C147061CF9000F007C117D /* Debug */,
97C147071CF9000F007C117D /* Release */,
249021D4217E4FDB00AE95B9 /* Profile */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = "Release-dev";
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};

View File

@ -2,6 +2,6 @@
<Workspace
version = "1.0">
<FileRef
location = "self:">
location = "group:Runner.xcodeproj">
</FileRef>
</Workspace>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1250"
LastUpgradeVersion = "1020"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
@ -23,7 +23,7 @@
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug-prod"
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
@ -40,7 +40,7 @@
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug-prod"
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
@ -61,7 +61,7 @@
</BuildableProductRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release-prod"
buildConfiguration = "Profile"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
@ -78,10 +78,10 @@
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug-prod">
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release-prod"
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View File

@ -1,78 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1250"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug-dev"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug-dev"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release-dev"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug-dev">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release-dev"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 523 B

After

Width:  |  Height:  |  Size: 522 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 953 B

After

Width:  |  Height:  |  Size: 943 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 731 B

After

Width:  |  Height:  |  Size: 718 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 953 B

After

Width:  |  Height:  |  Size: 943 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

View File

@ -1,59 +1,53 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(BUNDLE_NAME)</string>
<key>CFBundleDisplayName</key>
<string>$(BUNDLE_NAME)</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>$(FLUTTER_BUILD_NAME)</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>$(FLUTTER_BUILD_NUMBER)</string>
<key>LSRequiresIPhoneOS</key>
<true />
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false />
<key>CADisableMinimumFrameDurationOnPhone</key>
<true />
<!-- Image picker -->
<key>NSPhotoLibraryUsageDescription</key>
<string>For uploading images for posts/avatars</string>
<key>NSCameraUsageDescription</key>
<string>For uploading images for posts/avatars</string>
<key>NSMicrophoneUsageDescription</key>
<string>For recording videos for posts</string>
<key>CADisableMinimumFrameDurationOnPhone</key>
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>lemmur</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>$(FLUTTER_BUILD_NAME)</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>$(FLUTTER_BUILD_NUMBER)</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<!-- Image picker -->
<key>NSPhotoLibraryUsageDescription</key>
<string>For uploading images for posts/avatars</string>
<key>NSCameraUsageDescription</key>
<string>For uploading images for posts/avatars</string>
<key>NSMicrophoneUsageDescription</key>
<string>For recording videos for posts</string>
</dict>
</plist>

View File

@ -1,8 +1,6 @@
arb-dir: assets/l10n
output-dir: lib/l10n/gen
arb-dir: lib/l10n
template-arb-file: intl_en.arb
output-localization-file: l10n.dart
preferred-supported-locales: [en]
output-class: L10n
synthetic-package: false
nullable-getter: false
untranslated-messages-file: lib/l10n/untranslated.json

View File

@ -1,30 +0,0 @@
import 'package:flutter/material.dart';
import 'package:keyboard_dismisser/keyboard_dismisser.dart';
import 'l10n/l10n.dart';
import 'pages/home_page.dart';
import 'resources/theme.dart';
import 'stores/config_store.dart';
import 'util/observer_consumers.dart';
class MyApp extends StatelessWidget {
const MyApp();
@override
Widget build(BuildContext context) {
return KeyboardDismisser(
child: ObserverBuilder<ConfigStore>(
builder: (context, store) => MaterialApp(
title: 'lemmur',
supportedLocales: L10n.supportedLocales,
localizationsDelegates: L10n.localizationsDelegates,
themeMode: store.theme,
darkTheme: store.amoledDarkMode ? amoledTheme : darkTheme,
locale: store.locale,
theme: lightTheme,
home: const HomePage(),
),
),
);
}
}

View File

@ -1,7 +0,0 @@
class AppConfig {
final bool debugMode;
const AppConfig({
required this.debugMode,
});
}

View File

@ -5,10 +5,13 @@ import 'util/hot_rank.dart';
enum CommentSortType {
hot,
top,
// ignore: constant_identifier_names
new_,
old,
chat;
chat,
}
extension on CommentSortType {
/// returns a compare function for sorting a CommentTree according
/// to the comment sort type
int Function(CommentTree a, CommentTree b) get sortFunction {
@ -36,15 +39,6 @@ enum CommentSortType {
}
}
extension SortCommentTreeList on List<CommentTree> {
void sortBy(CommentSortType sortType) {
sort(sortType.sortFunction);
for (final el in this) {
el._sort(sortType.sortFunction);
}
}
}
class CommentTree {
CommentView comment;
List<CommentTree> children = [];
@ -62,8 +56,9 @@ class CommentTree {
return parent;
}
final topLevelParents =
comments.where((e) => e.comment.parentId == null).map(CommentTree.new);
final topLevelParents = comments
.where((e) => e.comment.parentId == null)
.map((e) => CommentTree(e));
final result = topLevelParents.map(gatherChildren).toList();
return result;
@ -76,4 +71,14 @@ class CommentTree {
el._sort(compare);
}
}
/// Sorts in-place a list of CommentTrees according to a given sortType
static List<CommentTree> sortList(
CommentSortType sortType, List<CommentTree> comms) {
comms.sort(sortType.sortFunction);
for (final el in comms) {
el._sort(sortType.sortFunction);
}
return comms;
}
}

View File

@ -3,6 +3,8 @@ import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'ref.dart';
class Debounce {
final bool loading;
final VoidCallback callback;
@ -25,14 +27,14 @@ Debounce useDebounce(
final timerHandle = useRef<Timer?>(null);
cancel() {
timerHandle.value?.cancel();
timerHandle.current?.cancel();
loading.value = false;
}
useEffect(() => () => timerHandle.value?.cancel(), []);
useEffect(() => () => timerHandle.current?.cancel(), []);
start() {
timerHandle.value = Timer(delayDuration, () async {
timerHandle.current = Timer(delayDuration, () async {
loading.value = true;
await callback();
cancel();

View File

@ -3,6 +3,8 @@ import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'ref.dart';
class DelayedLoading {
final bool pending;
final bool loading;
@ -30,11 +32,11 @@ DelayedLoading useDelayedLoading(
loading: loading.value,
pending: pending.value,
start: () {
timerHandle.value = Timer(delayDuration, () => loading.value = true);
timerHandle.current = Timer(delayDuration, () => loading.value = true);
pending.value = true;
},
cancel: () {
timerHandle.value?.cancel();
timerHandle.current?.cancel();
pending.value = false;
loading.value = false;
},

View File

@ -0,0 +1,4 @@
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:image_picker/image_picker.dart';
ImagePicker useImagePicker() => useMemoized(() => ImagePicker());

View File

@ -3,4 +3,4 @@ import 'package:flutter_hooks/flutter_hooks.dart';
import '../widgets/infinite_scroll.dart';
InfiniteScrollController useInfiniteScrollController() =>
useMemoized(InfiniteScrollController.new);
useMemoized(() => InfiniteScrollController());

View File

@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:lemmy_api_client/v3.dart';
import '../pages/settings/settings.dart';
import '../pages/settings.dart';
import '../util/goto.dart';
import 'stores.dart';

View File

@ -3,12 +3,7 @@ import 'package:flutter_hooks/flutter_hooks.dart';
/// creates an [AsyncSnapshot] from the Future returned from the valueBuilder.
/// [keys] can be used to rebuild the Future
AsyncSnapshot<T> useMemoFuture<T>(
Future<T> Function() valueBuilder, [
List<Object?> keys = const <Object>[],
]) =>
useFuture(
useMemoized<Future<T>>(valueBuilder, keys),
preserveState: false,
initialData: null,
);
AsyncSnapshot<T?> useMemoFuture<T>(Future<T> Function() valueBuilder,
[List<Object> keys = const <Object>[]]) =>
useFuture(useMemoized<Future<T>>(valueBuilder, keys),
preserveState: false, initialData: null);

9
lib/hooks/ref.dart Normal file
View File

@ -0,0 +1,9 @@
import 'package:flutter_hooks/flutter_hooks.dart';
class Ref<T> {
T current;
Ref(this.current);
}
/// see React's useRef
Ref<T> useRef<T>(T initialValue) => useMemoized(() => Ref(initialValue));

View File

@ -18,10 +18,8 @@ class Refreshable<T> {
///
/// `keys` will re-run the initial fetching thus yielding a
/// loading state in the AsyncSnapshot
Refreshable<T> useRefreshable<T extends Object>(
AsyncValueGetter<T> fetcher, [
List<Object> keys = const <Object>[],
]) {
Refreshable<T?> useRefreshable<T>(AsyncValueGetter<T> fetcher,
[List<Object> keys = const <Object>[]]) {
final newData = useState<T?>(null);
final snapshot = useMemoFuture(() async {
newData.value = null;
@ -30,7 +28,7 @@ Refreshable<T> useRefreshable<T extends Object>(
final outSnapshot = () {
if (newData.value != null) {
return AsyncSnapshot.withData(ConnectionState.done, newData.value!);
return AsyncSnapshot.withData(ConnectionState.done, newData.value);
}
return snapshot;
}();

View File

@ -1,23 +1,13 @@
import 'package:flutter_hooks/flutter_hooks.dart' hide Store;
import 'package:mobx/mobx.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:provider/provider.dart';
import '../stores/accounts_store.dart';
import '../stores/config_store.dart';
AccountsStore useAccountsStore() => useContext().watch<AccountsStore>();
T useAccountsStoreSelect<T>(T selector(AccountsStore store)) =>
useContext().select<AccountsStore, T>(selector);
V useStore<S extends Store, V>(V Function(S value) selector) {
final context = useContext();
final store = context.read<S>();
final state = useState(selector(store));
useEffect(() {
return autorun((_) {
state.value = selector(store);
});
}, []);
return state.value;
}
ConfigStore useConfigStore() => useContext().watch<ConfigStore>();
T useConfigStoreSelect<T>(T selector(ConfigStore store)) =>
useContext().select<ConfigStore, T>(selector);

View File

@ -1,68 +1,83 @@
{
"@@locale": "ar",
"settings": "الإعدادات",
"password": "كلمة السر",
"password": "الكلمة السرية",
"email_or_username": "عنوان البريد أو اسم المستخدم",
"posts": "المنشورات",
"posts": "منشورات",
"comments": "التعليقات",
"modlog": "سجل الإشراف",
"modlog": "تأريخ الإشراف",
"community": "المجتمع",
"url": "الرابط",
"title": "العنوان",
"body": "المحتوى",
"nsfw": "محتوى حساس",
"post": "منشور",
"save": "احفظ",
"subscribed": "الاشتراكات",
"local": "المحلي",
"save": "حفظ",
"subscribed": "مُتابِعون",
"all": "الكل",
"replies": "الردود",
"replies": "الإجابات",
"mentions": "الإشارات",
"from": "من",
"to": "في",
"to": "إلى",
"deleted_by_creator": "حذفه صاحبه",
"more": "المزيد",
"mark_as_read": "علمه كمقروء",
"mark_as_unread": "علمه كغير مقروء",
"mark_as_read": "تعيين كمقروء",
"mark_as_unread": "تعيين كغير مقروء بعد",
"reply": "رد",
"edit": "عدّل",
"delete": "احذف",
"restore": "استعدْ",
"edit": "تعديل",
"delete": "حذف",
"restore": "استعادة",
"yes": "نعم",
"no": "لا",
"avatar": "الصورة الرمزية",
"banner": "اللافتة",
"display_name": "الاسم العلني",
"bio": "السيرة",
"email": "البريد الإلكتروني",
"matrix_user": "مستخدم مايتريكس",
"matrix_user": "مستخدم ماتريكس",
"sort_type": "ترتيب حسب",
"type": "النوع",
"show_nsfw": "أظهر المحتوى الحساس",
"show_nsfw": "إظهار المحتوى الحساس",
"send_notifications_to_email": "إرسال الإشعارات عبر البريد الإلكتروني",
"delete_account": "احذف الحساب",
"saved": "المحفوظة",
"delete_account": "حذف الحساب",
"saved": "تم حفظه",
"communities": "المجتمعات",
"users": "المستخدِمون",
"theme": "المظهر",
"language": "اللغة",
"hot": "المتداولة",
"new_": "الأحدث",
"old": "الأقدم",
"top": "الشائع",
"chat": "المحادثة",
"new_": "جديد",
"old": "قديم",
"top": "المتداولة",
"chat": "دردشة",
"admin": "مدير",
"by": "مِن",
"not_a_mod_or_admin": "ليس مشرفًا ولا مديرًا.",
"not_an_admin": "ليس مديرا.",
"couldnt_find_post": "تعذر العثور على المنشور.",
"not_an_admin": "لستَ مديرا.",
"not_logged_in": "لستَ متصلا.",
"site_ban": "حُظرت مِن هذا الموقع",
"community_ban": "حُظرت مِن هذا المجتمع.",
"downvotes_disabled": "عُطلت المعارضات",
"invalid_url": "الرابط غير صالح.",
"locked": "أُقفل",
"site_ban": "لقد تم طردك مِن هذا الموقع",
"community_ban": "لقد تم طردك مِن هذا المجتمع.",
"downvotes_disabled": "تم تعطيل التصويتات السلبية",
"locked": "محظور",
"couldnt_create_comment": "تعذّر إنشاءالتعليق.",
"password_incorrect": "الكلمة السرية خاطئة.",
"registration_closed": "إنشاء الحسابات معطل",
"passwords_dont_match": "الكلمات السرية غير متطابقة.",
"email_already_exists": "عنوان البريد الإلكتروني هذا موجود بالفعل.",
"user_already_exists": "هذا المستخدِم موجود بالفعل.",
"unsubscribe": "الغ الإشتراك",
"subscribe": "اتبع",
"messages": "لرسائل",
"banned_users": "المستخدمون المحظورون",
"new_password": "لكلمة السرية الجديدة",
"verify_password": "تأكيد الكلمة السرية",
"old_password": "الكلمة السرية القديمة",
"show_avatars": "إظهار الصور الرمزية",
"search": "البحث",
"send_message": "أرسل الرسالة",
"local": "محلي",
"from": "من",
"banner": "اللافتة",
"display_name": "الاسم",
"bio": "السيرة",
"not_a_mod_or_admin": "ليس مشرفًا ولا مديرًا.",
"couldnt_find_post": "تعذر العثور على المشاركة.",
"invalid_url": "الرابط غير صالح.",
"couldnt_like_comment": "تعذر الإعجاب بالتعليق.",
"couldnt_update_comment": "تعذر تحديث التعليق.",
"no_comment_edit_allowed": "لا يُسمح لك تعديل التعليق.",
@ -70,16 +85,16 @@
"couldnt_get_comments": "تعذر جلب التعليق.",
"report_reason_required": "سبب الإبلاغ مطلوب.",
"report_too_long": "تقرير الإبلاغ طويل.",
"couldnt_create_report": "تعذر إنشاء الإبلاغ.",
"couldnt_resolve_report": "تعذر تحليل الإبلاغ.",
"invalid_post_title": "عنوان المنشور غيرصالح",
"couldnt_create_post": "تعذر انشاء المنشور.",
"couldnt_create_report": "تعذر إتشاء التقرير.",
"couldnt_resolve_report": "تعذر تحليل.",
"invalid_post_title": "عنوان المنشور غير",
"couldnt_create_post": "تعذر انشاء المشاركة.",
"couldnt_like_post": "تعذر الإعجاب بالمنشور.",
"couldnt_find_community": "تعذر العثور على المجتمع.",
"couldnt_get_posts": "تعذر جلب المنشورات",
"no_post_edit_allowed": "لا يسمح لك بتعديل المنشور.",
"couldnt_save_post": "تعذر حفظ المنشور.",
"site_already_exists": "الموقع موجود مسبقًا.",
"couldnt_get_posts": "تعذر جلب المشاركات",
"no_post_edit_allowed": "لا يسمح لك تعديل المشاركة.",
"couldnt_save_post": "تعذر حفظ المشاركة.",
"site_already_exists": "الموقع موجود.",
"couldnt_update_site": "تعذر تحديث الموقع.",
"invalid_community_name": "اسم غير صالح.",
"community_already_exists": "المجتمع موجود مسبقًا.",
@ -87,45 +102,26 @@
"community_follower_already_exists": "هذا العضو مشترك في المجمع مسبقا.",
"not_a_moderator": "ليس مشرفًا.",
"couldnt_update_community": "تعذر تحديث المجتمع.",
"no_community_edit_allowed": "لا يُسمح لك بتعديل المجتمع.",
"no_community_edit_allowed": "لا يُسمح لك تعديل المجتمع.",
"system_err_login": "خطأ في النظام. جرب إعادة الولوج.",
"community_user_already_banned": "هذا العضو محظور مسبقا.",
"community_user_already_banned": "هذا العضو محضور مسبقا.",
"couldnt_find_that_username_or_email": "تعذر العثور على مستخدم يملك هذا البريد أو اسم المستخدم.",
"password_incorrect": "كلمة السر خاطئة.",
"registration_closed": "إنشاء الحسابات معطل",
"invalid_password": "كلمة السر غير صالحة. يجب ألّا تزيد عن 60 محرفًا.",
"passwords_dont_match": "كلماتا السر غير متطابقتين.",
"invalid_password": "كلمة المرور غير صالحة. يجب ألّا تزيد عن 60 محرفًا.",
"captcha_incorrect": "رمز التحقق خاطئ.",
"invalid_username": "اسم المستخدم غير صالح.",
"bio_length_overflow": "لا يمكن أن تزيد السيرة عن 300 محرف.",
"couldnt_update_user": "تعذر تحديث معلومات المستخدم.",
"couldnt_update_private_message": "تعذر تحديث الرسالة الخاصة.",
"couldnt_update_post": "تعذر تحديث المنشور",
"couldnt_update_post": "تعذر تحديث",
"couldnt_create_private_message": "تعذر انشاء الرسالة الخاصة.",
"no_private_message_edit_allowed": "لا يسمح لك بتعديل الرسالة الخاصة.",
"post_title_too_long": "عنوان المنشور طويل.",
"email_already_exists": "عنوان البريد الإلكتروني هذا موجود بالفعل.",
"user_already_exists": "هذا المستخدِم موجود بالفعل.",
"unsubscribe": "الغ الإشتراك",
"subscribe": "اشترك",
"messages": "الرسائل",
"banned_users": "المستخدمون المحظورون",
"delete_account_confirm": "تحذير: ستحذف جميع بياناتك من هذا الخادم لكن هذا لا يشمل الخوادم الأخرى. أدخل كلمة المرور لتأكيد.",
"new_password": "كلمة السر الجديدة",
"verify_password": "أكّد كلمة السر",
"old_password": "كلمة السر القديمة",
"show_avatars": "أظهر الصور الرمزية",
"search": "البحث",
"send_message": "أرسل رسالة",
"top_day": "الشائع هذا اليوم",
"top_week": "الشائع هذا الأسبوع",
"top_month": "الشائع هذا الشهر",
"top_year": "الشائع هذه السنة",
"top_all": "الشائع",
"most_comments": "الأكثر تعليقًا",
"new_comments": "الأحدث تعليقًا",
"active": "النشط",
"bot_account": "حساب آلي",
"show_bot_accounts": "أظهر الحسابات الآلية",
"show_read_posts": "أظهر المنشورات المقروءة"
"no_private_message_edit_allowed": "لا يسمح لك تعديل الرسالة الخاصة.",
"post_title_too_long": "عنوان المشاركة طويل.",
"delete_account_confirm": "تحذير: ستحذف جميع بياناتك. أدخل كلمة المرور لتأكيد.",
"top_day": "المتداول",
"top_week": "المتداول هذا",
"top_month": "المتداول هذا",
"top_year": "المتداول هذه",
"top_all": "المتداولة",
"most_comments": "الأكثر",
"new_comments": "الأحدث",
"active": "النشط"
}

View File

@ -51,7 +51,7 @@
"old": "Стари",
"top": "Топ",
"chat": "Чат",
"admin": "админ",
"admin": "администратор",
"by": "от",
"not_a_mod_or_admin": "Не сте модератор или администратор.",
"not_an_admin": "Не сте администратор.",
@ -87,7 +87,7 @@
"community_follower_already_exists": "Абонат на общността вече съществува.",
"not_a_moderator": "Не сте модератор.",
"couldnt_update_community": "Не можахме да обновим тази общност.",
"no_community_edit_allowed": "Нямате право да редактирате тази общност",
"no_community_edit_allowed": "Нямате право да редактирате тази общност.",
"system_err_login": "Системна грешка. Опитайте се да се отпишете и впишете наново.",
"community_user_already_banned": "Потребителят вече е баннат.",
"couldnt_find_that_username_or_email": "Потребителското име или имейла не съществуват.",
@ -106,17 +106,17 @@
"post_title_too_long": "Заглавието на поста е твърде дълго.",
"email_already_exists": "Имейлът вече съществува.",
"user_already_exists": "Потребителят вече съществува.",
"number_of_users_online": "{formattedCount,plural, =1{{formattedCount} потребител онлайн} other{{formattedCount} потребителя онлайн}}",
"number_of_comments": "{formattedCount,plural, =1{{formattedCount} Коментар} other{{formattedCount} Коментара}}",
"number_of_posts": "{formattedCount,plural, =1{{formattedCount} Пост} other{{formattedCount} Поста}}",
"number_of_subscribers": "{formattedCount,plural, =1{{formattedCount} абонат} other{{formattedCount} абоната}}",
"number_of_users": "{formattedCount,plural, =1{{formattedCount} потребител} other{{formattedCount} потребителя}}",
"number_of_users_online": "{count,plural, =1{{count} потребител онлайн} other{{count} потребители онлайн}}",
"number_of_comments": "{count,plural, =1{{count} Коментар} other{{count} Коментари}}",
"number_of_posts": "{count,plural, =1{{count} Пост} other{{count} Постове}}",
"number_of_subscribers": "{count,plural, =1{{count} абонат} other{{count} абонати}}",
"number_of_users": "{count,plural, =1{{count} потребител} other{{count} потребители}}",
"unsubscribe": "Премахни абонамент",
"subscribe": "Абонирай",
"messages": "Съобщения",
"banned_users": "Блокирани Потребители",
"delete_account_confirm": "Внимание: това трайно ще изтрие всичките Ви данни от този сървър. Въведете своята парола за потвърждение.",
"new_password": "Нова парола",
"delete_account_confirm": "Внимание: това трайно ще изтрие всичките Ви данни. Въведете своята парола за потвърждение.",
"new_password": "Нова Парола",
"verify_password": "Потвърди парола",
"old_password": "Стара парола",
"show_avatars": "Покажи Профилни Снимки",
@ -129,8 +129,5 @@
"top_all": "Топ на Всички Времена",
"most_comments": "Най-много Коментари",
"new_comments": "Нови Коментари",
"active": "Активни",
"bot_account": "Бот-Профил",
"show_bot_accounts": "Показвай Бот-Пофилите",
"show_read_posts": "Показвай прочетени постове"
"active": "Активни"
}

View File

@ -53,7 +53,6 @@
"chat": "Xat",
"admin": "administrador",
"by": "per",
"not_a_mod_or_admin": "No ets un moderador ni un administrador.",
"not_an_admin": "No és un administrador.",
"couldnt_find_post": "No sha pogut trobar lapunt.",
"not_logged_in": "No heu iniciat una sessió.",
@ -106,11 +105,11 @@
"post_title_too_long": "El títol de lapunt és massa llarg.",
"email_already_exists": "Ladreça ja és en ús.",
"user_already_exists": "Lusuari ja existeix.",
"number_of_users_online": "{formattedCount,plural, =1{{formattedCount} usuari en línia} other{{formattedCount} usuaris en línia}}",
"number_of_comments": "{formattedCount,plural, =1{{formattedCount} comentari} other{{formattedCount} comentaris}}",
"number_of_posts": "{formattedCount,plural, =1{{formattedCount} Publicació} other{{formattedCount} Publicacions}}",
"number_of_subscribers": "{formattedCount,plural, =1{{formattedCount} subscriptor} other{{formattedCount} subscriptors}}",
"number_of_users": "{formattedCount,plural, =1{{formattedCount} usuari} other{{formattedCount} usuaris}}",
"number_of_users_online": "{count,plural, =1{{count} usuari en línia} other{{count} usuaris en línia}}",
"number_of_comments": "{count,plural, =1{{count} comentari} other{{count} comentaris}}",
"number_of_posts": "{count,plural, =1{{count} Publicació} other{{count} Publicacions}}",
"number_of_subscribers": "{count,plural, =1{{count} subscriptor} other{{count} subscriptors}}",
"number_of_users": "{count,plural, =1{{count} usuari} other{{count} usuaris}}",
"unsubscribe": "Dónat de baixa",
"subscribe": "Subscriu-thi",
"messages": "Missatges",
@ -129,5 +128,6 @@
"top_all": "El millor de tots els temps",
"most_comments": "Més comentaris",
"new_comments": "Comentaris nous",
"active": "Actiu"
"active": "Actiu",
"not_a_mod_or_admin": "No ets un moderador ni un administrador."
}

View File

@ -105,11 +105,11 @@
"post_title_too_long": "Indlægstitel for lang.",
"email_already_exists": "Emailen findes allerede.",
"user_already_exists": "Brugeren findes allerede.",
"number_of_users_online": "{formattedCount,plural, =1{{formattedCount} Bruger Online} other{{formattedCount} Brugere Online}}",
"number_of_comments": "{formattedCount,plural, =1{{formattedCount} Kommentar} other{{formattedCount} Kommentarer}}",
"number_of_posts": "{formattedCount,plural, =1{{formattedCount} Indlæg} other{{formattedCount} Indlæg}}",
"number_of_subscribers": "{formattedCount,plural, =1{{formattedCount} Abonnent} other{{formattedCount} Abonnenter}}",
"number_of_users": "{formattedCount,plural, =1{{formattedCount} Bruger} other{{formattedCount} Brugere}}",
"number_of_users_online": "{count,plural, =1{{count} Bruger Online} other{{count} Brugere Online}}",
"number_of_comments": "{count,plural, =1{{count} Kommentar} other{{count} Kommentarer}}",
"number_of_posts": "{count,plural, =1{{count} Indlæg} other{{count} Indlæg}}",
"number_of_subscribers": "{count,plural, =1{{count} Abonnent} other{{count} Abonnenter}}",
"number_of_users": "{count,plural, =1{{count} Bruger} other{{count} Brugere}}",
"unsubscribe": "Afmeld abbonement",
"subscribe": "Abboner",
"messages": "Beskeder",

View File

@ -53,7 +53,6 @@
"chat": "Chat",
"admin": "Administrator",
"by": "von",
"not_a_mod_or_admin": "Kein Moderator oder Admin.",
"not_an_admin": "Kein Administrator.",
"couldnt_find_post": "Konnte Beitrag nicht finden.",
"not_logged_in": "Nicht eingeloggt.",
@ -62,18 +61,14 @@
"downvotes_disabled": "Downvotes deaktiviert",
"invalid_url": "Ungültige URL.",
"locked": "gesperrt",
"couldnt_create_comment": "Konnte Kommentar nicht erstellen.",
"couldnt_create_comment": "Konnte Kommentar nicht anlegen.",
"couldnt_like_comment": "Konnte nicht liken.",
"couldnt_update_comment": "Konnte Kommentar nicht aktualisieren.",
"no_comment_edit_allowed": "Keine Erlaubnis Kommentar zu editieren.",
"couldnt_save_comment": "Konnte Kommentar nicht speichern.",
"couldnt_get_comments": "Konnte Kommentare nicht laden.",
"report_reason_required": "Meldungsgrund benötigt.",
"report_too_long": "Meldung zu lang.",
"couldnt_create_report": "Meldung konnte nicht angelegt werden.",
"couldnt_resolve_report": "Meldung konnte nicht gelöst werden.",
"invalid_post_title": "Ungültiger Post Titel",
"couldnt_create_post": "Konnte Beitrag nicht erstellen.",
"couldnt_create_post": "Konnte Beitrag nicht anlegen.",
"couldnt_like_post": "Konnte Beitrag nicht liken.",
"couldnt_find_community": "Konnte Community nicht finden.",
"couldnt_get_posts": "Konnte Beiträge nicht holen",
@ -106,16 +101,16 @@
"post_title_too_long": "Posttitel zu lang.",
"email_already_exists": "Email existiert bereits.",
"user_already_exists": "Nutzer existiert bereits.",
"number_of_users_online": "{formattedCount,plural, =1{{formattedCount} Benutzer online} other{{formattedCount} Benutzer*innen online}}",
"number_of_comments": "{formattedCount,plural, =1{{formattedCount} Kommentar} other{{formattedCount} Kommentare}}",
"number_of_posts": "{formattedCount,plural, =1{{formattedCount} Beitrag} other{{formattedCount} Beiträge}}",
"number_of_subscribers": "{formattedCount,plural, =1{{formattedCount} Abonnent} other{{formattedCount} Abonnent*innen}}",
"number_of_users": "{formattedCount,plural, =1{{formattedCount} Benutzer} other{{formattedCount} Benutzer*innen}}",
"number_of_users_online": "{count,plural, =1{{count} Benutzer online} other{{count} Benutzer*innen online}}",
"number_of_comments": "{count,plural, =1{{count} Kommentar} other{{count} Kommentare}}",
"number_of_posts": "{count,plural, =1{{count} Beitrag} other{{count} Beiträge}}",
"number_of_subscribers": "{count,plural, =1{{count} Abonnent} other{{count} Abonnent*innen}}",
"number_of_users": "{count,plural, =1{{count} Benutzer} other{{count} Benutzer*innen}}",
"unsubscribe": "Deabonnieren",
"subscribe": "Abonnieren",
"messages": "Nachrichten",
"banned_users": "Gebannte Benutzer",
"delete_account_confirm": "Achtung: Dadurch werden alle deine Daten aus dieser Instanz dauerhaft gelöscht. Es mag sein, dass deine Daten nicht aus anderen Instanzen gelöscht werden. Gib zur Bestätigung dein Passwort ein.",
"delete_account_confirm": "Achtung: Dadurch werden alle Ihre Daten dauerhaft gelöscht. Geben Sie zur Bestätigung Ihr Passwort ein.",
"new_password": "Neues Passwort",
"verify_password": "Passwort überprüfen",
"old_password": "Letztes Passwort",
@ -123,14 +118,5 @@
"search": "Suchen",
"send_message": "Nachricht absenden",
"top_day": "Top täglich",
"top_week": "Top wöchentlich",
"top_month": "Top monatlich",
"top_year": "Top jährlich",
"top_all": "Top aller Zeiten",
"most_comments": "Meistkommentiert",
"new_comments": "Neue Kommentare",
"active": "Aktiv",
"bot_account": "Bot Konto",
"show_bot_accounts": "Bot-Konten anzeigen",
"show_read_posts": "Gelesene Beiträge anzeigen"
"active": "Aktiv"
}

Some files were not shown because too many files have changed in this diff Show More