Compare commits
465 Commits
v1.7.496
...
develop_sk
| Author | SHA1 | Date | |
|---|---|---|---|
| 513607e1ef | |||
| 6cc00ca348 | |||
| 21aa3adf7b | |||
| f6e900aaad | |||
| 41aea1d1bf | |||
| 5ed7e4013e | |||
| a4892633a3 | |||
| f73943785f | |||
| baeb3c139a | |||
| e1011688de | |||
| 4f1b1dd02f | |||
| ae176ffb6c | |||
| 2bfbac52fa | |||
| 10c9b896aa | |||
| ddb71668c4 | |||
| d3cd4adce8 | |||
| b5dfd10baa | |||
| 2e85975c41 | |||
| 8a5de7d442 | |||
| 8fd0a5243e | |||
| bdaad63b11 | |||
| 0ee37e8fda | |||
| 670e6e8b26 | |||
| 68b244a527 | |||
| 47b5e7b06e | |||
| 736854c959 | |||
| 7aef630e1b | |||
| 3eee6d663a | |||
| fc4429d828 | |||
| 9c14338c53 | |||
| 9b69c65bf8 | |||
| 398c45ade1 | |||
| ac157e8b93 | |||
| d49359bdf7 | |||
| 2ab18a1425 | |||
| c41e1ebd9d | |||
| 13af3c02a2 | |||
| 2674cf2554 | |||
| 1f107b4be7 | |||
| 74826b9acb | |||
| c122bfa637 | |||
| 462e464f8a | |||
| 7c346a118e | |||
| 01d60d2d49 | |||
| 73548e45b6 | |||
| 004a0b89a9 | |||
| 4cbaa92593 | |||
| 47a1bfb914 | |||
| 7759267d0b | |||
| a8cc945d61 | |||
| 725ef31640 | |||
| 1b70bd8b92 | |||
| 31123e503a | |||
| e8b2cf4660 | |||
| 279b329a1e | |||
| 30283fe513 | |||
| 8728c4f697 | |||
| 766dd88770 | |||
| 5118aed3ca | |||
| 987fd4770a | |||
| 3df6716abb | |||
| adf1cf3f1c | |||
| cfde51c063 | |||
| 8fd1dac254 | |||
| 13bf53e964 | |||
| 7feb282f13 | |||
| 4d60ea4535 | |||
| 393ee9d2bc | |||
| fac3c060e6 | |||
| 694df0282f | |||
| 6b65661384 | |||
| 1b611ca9de | |||
| 1d0366414c | |||
| fe13b0c2e0 | |||
| de297682bd | |||
| 2347ba871f | |||
| d18cd9645e | |||
| fbbf68c840 | |||
| ca8b26d48b | |||
| e126dd60fc | |||
| b2697eef17 | |||
| bfc6363957 | |||
| 1aea41026d | |||
| cafe132afc | |||
| 6496741144 | |||
| 22887310c0 | |||
| c4c82ea8f8 | |||
| d0b8f76303 | |||
| 4bbbac11a3 | |||
| 404ecf724f | |||
| 52f3ce64a4 | |||
| 3e15966c64 | |||
| 8a5e997262 | |||
| 9a0a407022 | |||
| 832c72df4a | |||
| 6e853024dc | |||
| 103737cec0 | |||
| 026e06a79f | |||
| 9fdf8377ee | |||
| 335f66a0b5 | |||
| f48e7c8274 | |||
| c32f052cb0 | |||
| 477f4f21be | |||
| 1a6b44ece9 | |||
| f4e8b5e5ef | |||
| f23eff1c09 | |||
| fc3f27e951 | |||
| 47ddb9b72a | |||
| 88db0e850b | |||
| 94b314ddc5 | |||
| 7fe97666e5 | |||
| 5ca0ba4a12 | |||
| 5c209b985d | |||
| 7048235138 | |||
| b099c6101e | |||
| 4a80acf9e1 | |||
| 8667b4017f | |||
| 21fbf62a8f | |||
| 9769501387 | |||
| 0b1a9b69a3 | |||
| 84be5b7617 | |||
| 9df1c3243b | |||
| 21ede72014 | |||
| 493fc19033 | |||
| f17a7feb9c | |||
| b0bd6515ac | |||
| 2bfc84e428 | |||
| a5dcaae5a8 | |||
| 395e967abe | |||
| c954ee6918 | |||
| 46303ce2b9 | |||
| 8752c8dc41 | |||
| 23a4008d2d | |||
| c6e43651e1 | |||
| c67db6e324 | |||
| 0ab9b5f03a | |||
| 79948ff405 | |||
| 862b87d5d1 | |||
| 295ce15fc4 | |||
| 5de4d4de57 | |||
| aec0bc2b18 | |||
| 93ce93bdd4 | |||
| 3957701172 | |||
| 5a12e2acb4 | |||
| adb7a25d1c | |||
| 2583396e83 | |||
| c80a5c8533 | |||
| fdd95729aa | |||
| e0bd9a678c | |||
| a508800b7c | |||
| 8ce3952a64 | |||
| fd468a60da | |||
| 917dfbba91 | |||
| 493241b8ad | |||
| a5b817ffb3 | |||
| 43c4e703b9 | |||
| 617c7ad9b6 | |||
| b06e3b61c8 | |||
| 02d395b7a4 | |||
| a5006b28fa | |||
| e57e7de6f7 | |||
| 3b12069a01 | |||
| f7199fdc98 | |||
| b8fd34c232 | |||
| 92a2407fb4 | |||
| 42d1ea52d4 | |||
| ba2eac4cee | |||
| f037cb3c28 | |||
| 7937ff5b7b | |||
| 2e3bc11563 | |||
| 26e0f4d3bb | |||
| 41c4623876 | |||
| 5e1d1bd0c1 | |||
| 139d16387c | |||
| 768f7fd38f | |||
| 4045adf0b2 | |||
| b2952b3c72 | |||
| ccad385a80 | |||
| 30cb3a7ac3 | |||
| e2dc776fd1 | |||
| c221e2cbdf | |||
| 2feb1fb2fc | |||
| 95325f3a39 | |||
| f09e0bf329 | |||
| 25ed80e4ba | |||
| 4bae1d1e98 | |||
| 5e14f217ea | |||
| 4a3a228a80 | |||
| 41fdae21f8 | |||
| 4fd5449e3e | |||
| 38391a4f12 | |||
| d4d04140ce | |||
| 2956b25d54 | |||
| 2571d95c99 | |||
| c7c1730cb0 | |||
| 87905dacb7 | |||
| 4e08f57c48 | |||
| 2ab2a48f02 | |||
| 517b6b6734 | |||
| 822bf89a2c | |||
| d3df44dd87 | |||
| 61b7041e71 | |||
| 75dbbc93d1 | |||
| 9acb5f4cce | |||
| a98fc0b905 | |||
| 1103e61152 | |||
| c033cb9608 | |||
| b48bb378ad | |||
| 954cfc6276 | |||
| 293716f146 | |||
| ce193a2195 | |||
| de6d2628f6 | |||
| dfccfa9089 | |||
| 2093784f38 | |||
| 6385a2c7b9 | |||
| c617d73bb4 | |||
| f8847ca483 | |||
| b9258830f2 | |||
| 370d10df7d | |||
| 2e9ee167b3 | |||
| 51ca6e1f23 | |||
| bf4c2b4750 | |||
| 9edb18deb5 | |||
| 9f2c049147 | |||
| c9b5de847d | |||
| 8d48068d23 | |||
| 91bbaabf1c | |||
| 11958ea87c | |||
| c0b2114683 | |||
| ceb889c3a3 | |||
| 9aad61f940 | |||
| 002c8252d6 | |||
| c76a7f0dad | |||
| 0ffde21dda | |||
| 9d2c953522 | |||
| 0520733080 | |||
| b61aceeac9 | |||
| 0105a3ca72 | |||
| 9623c542b5 | |||
| 500f705fc5 | |||
| 5d6ae85996 | |||
| 17510c03ca | |||
| 7831615b80 | |||
| 2de821804a | |||
| 58e0bdeef4 | |||
| 00a74b8a98 | |||
| 7e992183f5 | |||
| 7a446fdb52 | |||
| f6d6814e72 | |||
| c9ad04d4d9 | |||
| d9235bd81f | |||
| a55f8d1e73 | |||
| 16d62698c6 | |||
| 03ef57d75d | |||
| 12b29534f7 | |||
| f950392c22 | |||
| 06a38603f7 | |||
| 951571f95e | |||
| 7d4e18f7b1 | |||
| 7d6ade5a3b | |||
| 621838a0cb | |||
| 7bf5d9147d | |||
| c30c16897a | |||
| 5257fec08e | |||
| a6051abdf7 | |||
| d825377f39 | |||
| c229356547 | |||
| 064e5ed542 | |||
| dc31fc1f06 | |||
| 82df2f6e4b | |||
| b640d6156d | |||
| 1220653526 | |||
| a693827c79 | |||
| 9a8678057d | |||
| d4f64f37ea | |||
| 71887da5c9 | |||
| 6f9787605a | |||
| 01e7a098ba | |||
| 6a76e45e7f | |||
| 7a39446f4d | |||
| e6e17ebb89 | |||
| 9452cc2bdc | |||
| faa88e6668 | |||
| 5231e62550 | |||
| 5d40153907 | |||
| 64a5fde201 | |||
| f8b3303d0b | |||
| c30dfdc1eb | |||
| 4c9422bc5b | |||
| de73ffe64b | |||
| 78ae2c3239 | |||
| 34eabe7eee | |||
| 2b29e510ce | |||
| a94e80e670 | |||
| 0e399c5831 | |||
| 285211804b | |||
| 9af93869a8 | |||
| dac34b8824 | |||
| c26f241b2b | |||
| 5af587466c | |||
| 35f7dd38e3 | |||
| 092a0d00b7 | |||
| 6a3992b8e2 | |||
| 0b5fb23eec | |||
| cb48492f38 | |||
| d046167518 | |||
| eeff5f0665 | |||
| da85d65fa2 | |||
| 78ad994cc4 | |||
| 48603c7daa | |||
| 4787759694 | |||
| de3722292e | |||
| 9c4cea5224 | |||
| 03c24b3c97 | |||
| 7dde0cdf8e | |||
| aa6f01ad5c | |||
| 1ee2ca5a54 | |||
| 804cdba152 | |||
| 46bec40eb7 | |||
| f42659c8ac | |||
| c1c4a4a675 | |||
| 219e0e794f | |||
| 5ddfbe46d1 | |||
| 84b821b6eb | |||
| bed58065b0 | |||
| 8e92ac6ebb | |||
| a44be677c5 | |||
| 6863f20879 | |||
| e035d5105e | |||
| 4c544a462e | |||
| e809adf98f | |||
| a83d26e368 | |||
| 8e122e5a09 | |||
| 7d4e257404 | |||
| 84ca900ddf | |||
| faca7eae3e | |||
| a053e23843 | |||
| 448268ecc7 | |||
| 3201f839eb | |||
| 3ab1e5e451 | |||
| ac0d8073ee | |||
| 47d9c4d2eb | |||
| 7a73356ed2 | |||
| 755ec4965c | |||
| b8f1c984f7 | |||
| 17e9c0e5ed | |||
| e2f8400ddc | |||
| 90f94e1a9a | |||
| 069ef1b592 | |||
| e754d008c5 | |||
| 4de271603d | |||
| 160c4d33ac | |||
| 7d27de087d | |||
| a7a70f41b1 | |||
| 06fc544f1a | |||
| f887bd37c4 | |||
| 57a171b993 | |||
| 6dc1627622 | |||
| 905368ec8d | |||
| 4a725be23f | |||
| 310062513b | |||
| cf2fd775ec | |||
| 2f9328bd33 | |||
| c7cc02c045 | |||
| b99a4a99d4 | |||
| 5b9d9f77d9 | |||
| 9ac54cc971 | |||
| 0d8e818f4d | |||
| 7cb051ed56 | |||
| f426cbb749 | |||
| 1a44e03755 | |||
| 10a67ddf93 | |||
| 52e93c7b39 | |||
| 2f08628758 | |||
| d3080bba7d | |||
| 133e151586 | |||
| ca8c07087f | |||
| abba613a4f | |||
| 9939685c94 | |||
| 94fb405eb3 | |||
| 231d2fd21d | |||
| bbfaec71c8 | |||
| c95b0b9721 | |||
| f5f52043d0 | |||
| 08d41a6925 | |||
| 25fcca811b | |||
| 869beca8f1 | |||
| 7b02bc7a8a | |||
| eed97a4825 | |||
| 2cdcd69108 | |||
| 29fc822b91 | |||
| e9c06cc66d | |||
| 79f2d95314 | |||
| 7f7bb49d8c | |||
| 47f5096a9c | |||
| 203b625ddd | |||
| d27c4e2f9f | |||
| 9b755e2993 | |||
| 443b14450b | |||
| 81b1fdd43d | |||
| b2d2c75b54 | |||
| 1a67783d7a | |||
| a0895927c4 | |||
| 4e6f546019 | |||
| 34da68e16c | |||
| 2f03a98cc4 | |||
| 6ef92e2340 | |||
| 723a803e17 | |||
| 2fbb4695b4 | |||
| c84e053172 | |||
| 7ea2694878 | |||
| 66dd5de9f1 | |||
| e1bf2f2fdc | |||
| 07d20dfbf2 | |||
| 357eaac746 | |||
| e806987fa0 | |||
| 419912c590 | |||
| 84431d17c4 | |||
| 1543de142f | |||
| bf8d0511c1 | |||
| 37f4e6d78e | |||
| ea01d79bbd | |||
| d75754e14e | |||
| ea96419e05 | |||
| db2fe012d7 | |||
| 2de9d32b61 | |||
| a09237bc02 | |||
| 96367baaea | |||
| 5f079fb3d4 | |||
| 61316051de | |||
| 113803d97d | |||
| 2a89d0110c | |||
| 1784f75c47 | |||
| 07aa71c679 | |||
| 34698971af | |||
| 1217ea7d3e | |||
| ce6c02b736 | |||
| 557da4c5a1 | |||
| 4c47b65b0e | |||
| 3db24c3303 | |||
| 44cdd31b3d | |||
| de52becc21 | |||
| 1e71efc2e5 | |||
| b84dbf4e62 | |||
| e8e297d95b | |||
| 89eeb4f0b3 | |||
| 5968c4a980 | |||
| a546989a25 | |||
| 0af232e42c | |||
| 00b2d036cf | |||
| 51bc375d31 | |||
| 7e81313372 | |||
| 77c09923f2 | |||
| 942a4f3658 | |||
| 3831083f77 | |||
| 48d4081b3e | |||
| 25fb142765 | |||
| 3e2009069a | |||
| 9d8f005127 | |||
| de71435ba1 | |||
| 6a848ac23e | |||
| 3a262d80dd | |||
| df23655822 | |||
| f10351626a | |||
| 8478dd33d1 |
251
.gitea/workflows/ci.yml
Normal file
@ -0,0 +1,251 @@
|
||||
name: Flutter CI - Basic Setup
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master_sky
|
||||
pull_request:
|
||||
branches:
|
||||
- master_sky
|
||||
|
||||
jobs:
|
||||
# 基础设置任务:检出代码、提取版本号
|
||||
basic-setup:
|
||||
name: 🔧 Basic Setup
|
||||
runs-on: sky
|
||||
steps:
|
||||
# 1. 检出代码
|
||||
- name: Checkout Code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 1
|
||||
|
||||
# 2. 提取版本号
|
||||
- name: Extract Version
|
||||
id: version
|
||||
run: |
|
||||
# 获取最新的tag(按版本号排序,匹配vX.X.X_sky格式)
|
||||
LATEST_TAG=$(git tag --list "v*.*.*_sky" --sort=-version:refname | head -1)
|
||||
|
||||
# 如果没有找到tag,使用默认值
|
||||
if [ -z "$LATEST_TAG" ]; then
|
||||
LATEST_TAG="v1.0.0_sky"
|
||||
echo "📌 No tags found, using default: $LATEST_TAG"
|
||||
else
|
||||
echo "📌 Latest tag found: $LATEST_TAG"
|
||||
fi
|
||||
|
||||
# 提取基础版本号(去除_sky后缀)
|
||||
BASE_VERSION=$(echo "$LATEST_TAG" | grep -oE 'v[0-9]+\.[0-9]+\.[0-9]+' | head -1)
|
||||
[ -z "$BASE_VERSION" ] && BASE_VERSION="v1.0.0"
|
||||
echo "📌 Base version: $BASE_VERSION"
|
||||
|
||||
# 解析版本号各部分
|
||||
MAJOR=$(echo $BASE_VERSION | cut -d'.' -f1 | sed 's/v//')
|
||||
MINOR=$(echo $BASE_VERSION | cut -d'.' -f2)
|
||||
PATCH=$(echo $BASE_VERSION | cut -d'.' -f3)
|
||||
echo "📌 Version components: Major=$MAJOR, Minor=$MINOR, Patch=$PATCH"
|
||||
|
||||
# 计算下一个版本号
|
||||
echo "📊 Calculating next version..."
|
||||
|
||||
# 获取当前提交与最新tag之间的所有提交消息
|
||||
COMMIT_MESSAGES=$(git log --oneline --format=%s $LATEST_TAG..HEAD 2>/dev/null || echo "")
|
||||
|
||||
# 统计需要递增的提交次数(过滤重复的提交消息)
|
||||
INCREMENT_COUNT=0
|
||||
if [ -n "$COMMIT_MESSAGES" ]; then
|
||||
# 使用awk过滤重复的提交消息并计数
|
||||
UNIQUE_MESSAGES=$(echo "$COMMIT_MESSAGES" | awk '!seen[$0]++')
|
||||
INCREMENT_COUNT=$(echo "$UNIQUE_MESSAGES" | wc -l)
|
||||
echo "📝 Found $INCREMENT_COUNT unique commit(s) since last tag"
|
||||
else
|
||||
echo "📝 No new commits since last tag"
|
||||
fi
|
||||
|
||||
# 计算新的版本号
|
||||
NEW_PATCH=$((PATCH + INCREMENT_COUNT))
|
||||
NEW_MINOR=$MINOR
|
||||
NEW_MAJOR=$MAJOR
|
||||
|
||||
# 处理版本号进位逻辑
|
||||
if [ $NEW_PATCH -ge 1000 ]; then
|
||||
NEW_MINOR=$((NEW_MINOR + NEW_PATCH / 1000))
|
||||
NEW_PATCH=$((NEW_PATCH % 1000))
|
||||
echo "🔄 Patch version overflow, incrementing minor version"
|
||||
fi
|
||||
|
||||
if [ $NEW_MINOR -ge 10 ]; then
|
||||
NEW_MAJOR=$((NEW_MAJOR + NEW_MINOR / 10))
|
||||
NEW_MINOR=$((NEW_MINOR % 10))
|
||||
echo "🔄 Minor version overflow, incrementing major version"
|
||||
fi
|
||||
|
||||
# 生成下一个版本号
|
||||
NEXT_VERSION="v${NEW_MAJOR}.${NEW_MINOR}.${NEW_PATCH}"
|
||||
NEXT_TAG="${NEXT_VERSION}_sky"
|
||||
|
||||
echo "🚀 Next version: $NEXT_VERSION"
|
||||
echo "🏷️ Next tag: $NEXT_TAG"
|
||||
echo "📈 Increment count: $INCREMENT_COUNT"
|
||||
|
||||
# 设置输出变量供后续任务使用(Gitea Actions格式)
|
||||
echo "NEXT_VERSION=$NEXT_VERSION" >> $GITEA_OUTPUT
|
||||
echo "NEXT_TAG=$NEXT_TAG" >> $GITEA_OUTPUT
|
||||
echo "INCREMENT_COUNT=$INCREMENT_COUNT" >> $GITEA_OUTPUT
|
||||
|
||||
# 输出版本信息
|
||||
echo "✅ Version extraction completed"
|
||||
# 5. 任务完成通知
|
||||
- name: Task Completion
|
||||
run: |
|
||||
echo "🎉 Basic CI setup completed successfully!"
|
||||
echo ""
|
||||
echo "📋 Tasks executed:"
|
||||
echo " ✅ Code checkout"
|
||||
echo " ✅ Version extraction"
|
||||
echo ""
|
||||
echo "🚀 Next steps: Building Flutter artifacts..."
|
||||
|
||||
# 构建Flutter制品任务
|
||||
build-artifacts:
|
||||
name: 🏗️ Build Flutter Artifacts
|
||||
runs-on: sky
|
||||
needs: basic-setup
|
||||
steps:
|
||||
# 1. 检出代码
|
||||
- name: Checkout Code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 1
|
||||
# 4. 构建APK文件
|
||||
- name: Build APK
|
||||
run: |
|
||||
echo "🏗️ Building APK artifact..."
|
||||
|
||||
# 生成当前时间作为build-number(格式:YYYYMMDDHH)
|
||||
BUILD_NUMBER=$(date +%Y%m%d%H)
|
||||
echo "📅 Build number: $BUILD_NUMBER"
|
||||
|
||||
# 获取版本信息(从basic-setup任务传递)
|
||||
echo "🔍 Getting version info from basic-setup job..."
|
||||
|
||||
# 设置默认版本号,如果环境变量为空
|
||||
if [ -z "${{ needs.basic-setup.outputs.NEXT_VERSION }}" ]; then
|
||||
VERSION_FOR_FILENAME="1-0-0"
|
||||
echo "⚠️ Version not found, using default: $VERSION_FOR_FILENAME"
|
||||
else
|
||||
# 格式化版本号用于文件名
|
||||
VERSION_FOR_FILENAME=$(echo "${{ needs.basic-setup.outputs.NEXT_VERSION }}" | sed 's/v//g' | sed 's/\./-/g')
|
||||
echo "✅ Version found: $VERSION_FOR_FILENAME"
|
||||
fi
|
||||
|
||||
# 设置APK文件名
|
||||
APK_FILENAME="sky-star-lock-release-$VERSION_FOR_FILENAME.apk"
|
||||
echo "📁 APK filename: $APK_FILENAME"
|
||||
|
||||
# 构建APK,使用新的构建参数
|
||||
flutter build apk --no-tree-shake-icons --release --flavor sky -t lib/main_sky_full.dart --build-number=$BUILD_NUMBER --build-name="sky-star-lock-release-$VERSION_FOR_FILENAME.apk"
|
||||
|
||||
# 重命名APK文件
|
||||
mv build/app/outputs/flutter-apk/app-sky-release.apk "$APK_FILENAME"
|
||||
|
||||
echo "✅ APK build completed: $APK_FILENAME"
|
||||
|
||||
# 5. 构建AAB文件
|
||||
- name: Build AAB
|
||||
run: |
|
||||
echo "🏗️ Building AAB artifact..."
|
||||
|
||||
# 生成当前时间作为build-number(格式:YYYYMMDDHH)
|
||||
BUILD_NUMBER=$(date +%Y%m%d%H)
|
||||
echo "📅 Build number: $BUILD_NUMBER"
|
||||
|
||||
# 获取版本信息(从basic-setup任务传递)
|
||||
echo "🔍 Getting version info from basic-setup job..."
|
||||
|
||||
# 设置默认版本号,如果环境变量为空
|
||||
if [ -z "${{ needs.basic-setup.outputs.NEXT_VERSION }}" ]; then
|
||||
VERSION_FOR_FILENAME="1-0-0"
|
||||
echo "⚠️ Version not found, using default: $VERSION_FOR_FILENAME"
|
||||
else
|
||||
# 格式化版本号用于文件名
|
||||
VERSION_FOR_FILENAME=$(echo "${{ needs.basic-setup.outputs.NEXT_VERSION }}" | sed 's/v//g' | sed 's/\./-/g')
|
||||
echo "✅ Version found: $VERSION_FOR_FILENAME"
|
||||
fi
|
||||
|
||||
# 设置AAB文件名
|
||||
AAB_FILENAME="sky-star-lock-release-$VERSION_FOR_FILENAME.aab"
|
||||
echo "📁 AAB filename: $AAB_FILENAME"
|
||||
|
||||
# 构建AAB,使用新的构建参数
|
||||
flutter build appbundle --no-tree-shake-icons --release --flavor sky -t lib/main_sky_full.dart --build-number=$BUILD_NUMBER --build-name="sky-star-lock-release-$VERSION_FOR_FILENAME.aab"
|
||||
|
||||
# 重命名AAB文件
|
||||
mv build/app/outputs/bundle/skyRelease/app-sky-release.aab "$AAB_FILENAME"
|
||||
|
||||
echo "✅ AAB build completed: $AAB_FILENAME"
|
||||
|
||||
# 6. 构建iOS IPA文件(如果支持iOS构建)
|
||||
- name: Build iOS IPA
|
||||
if: runner.os == 'macos'
|
||||
run: |
|
||||
echo "🏗️ Building iOS IPA artifact..."
|
||||
|
||||
# 生成当前时间作为build-number(格式:YYYYMMDDHH)
|
||||
BUILD_NUMBER=$(date +%Y%m%d%H)
|
||||
echo "📅 Build number: $BUILD_NUMBER"
|
||||
|
||||
# 获取版本信息(从basic-setup任务传递)
|
||||
echo "🔍 Getting version info from basic-setup job..."
|
||||
|
||||
# 设置默认版本号,如果环境变量为空
|
||||
if [ -z "${{ needs.basic-setup.outputs.NEXT_VERSION }}" ]; then
|
||||
VERSION_FOR_FILENAME="1-0-0"
|
||||
echo "⚠️ Version not found, using default: $VERSION_FOR_FILENAME"
|
||||
else
|
||||
# 格式化版本号用于文件名
|
||||
VERSION_FOR_FILENAME=$(echo "${{ needs.basic-setup.outputs.NEXT_VERSION }}" | sed 's/v//g' | sed 's/\./-/g')
|
||||
echo "✅ Version found: $VERSION_FOR_FILENAME"
|
||||
fi
|
||||
|
||||
# 设置IPA文件名
|
||||
IPA_FILENAME="sky-star-lock-release-$VERSION_FOR_FILENAME.ipa"
|
||||
echo "📁 IPA filename: $IPA_FILENAME"
|
||||
|
||||
# 配置iOS自动签名(CI环境使用自动签名)
|
||||
echo "🔧 Configuring iOS automatic code signing for CI environment..."
|
||||
|
||||
# 构建iOS IPA,使用自动签名模式
|
||||
flutter build ipa --no-tree-shake-icons --release --flavor sky -t lib/main_sky_full.dart --build-number=$BUILD_NUMBER --build-name="sky-star-lock-release-$VERSION_FOR_FILENAME.ipa" --codesign
|
||||
|
||||
# 重命名IPA文件
|
||||
mv build/ios/ipa/*.ipa "$IPA_FILENAME"
|
||||
|
||||
echo "✅ iOS IPA build completed: $IPA_FILENAME"
|
||||
|
||||
# 7. 上传制品
|
||||
- name: Upload Artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: flutter-artifacts-release
|
||||
path: |
|
||||
sky-star-lock-release-*.apk
|
||||
sky-star-lock-release-*.aab
|
||||
sky-star-lock-release-*.ipa
|
||||
retention-days: 30
|
||||
|
||||
# 8. 构建完成通知
|
||||
- name: Build Completion
|
||||
run: |
|
||||
echo "🎉 Flutter artifacts build completed successfully!"
|
||||
echo ""
|
||||
echo "📦 Artifacts generated:"
|
||||
echo " ✅ APK: sky-star-lock-release-*.apk"
|
||||
echo " ✅ AAB: sky-star-lock-release-*.aab"
|
||||
if [ "${{ runner.os }}" == "macos" ]; then
|
||||
echo " ✅ IPA: sky-star-lock-release-*.ipa"
|
||||
fi
|
||||
echo ""
|
||||
echo "🏷️ Version: ${{ needs.basic-setup.outputs.NEXT_VERSION }}"
|
||||
echo "📁 Files available in artifacts section"
|
||||
@ -16,19 +16,19 @@ variables:
|
||||
- macos
|
||||
- flutter
|
||||
rules:
|
||||
- if: $CI_COMMIT_BRANCH == "develop"
|
||||
- if: $CI_COMMIT_BRANCH == "release"
|
||||
- if: $CI_COMMIT_BRANCH == "develop_sky"
|
||||
- if: $CI_COMMIT_BRANCH == "release_sky"
|
||||
- if: $CI_COMMIT_BRANCH =~ /feat_[a-zA-Z]+/
|
||||
- if: $CI_COMMIT_BRANCH == "canary_release"
|
||||
- if: $CI_COMMIT_TAG =~ /^v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z]+\.[0-9]+)?$/
|
||||
- if: $CI_COMMIT_BRANCH == "canary_release_sky"
|
||||
- if: $CI_COMMIT_TAG =~ /^v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z]+\.[0-9]+)?(_sky)?$/
|
||||
|
||||
.notify_rule:
|
||||
tags:
|
||||
- macos
|
||||
- flutter
|
||||
rules:
|
||||
- if: $CI_COMMIT_BRANCH == "develop"
|
||||
- if: $CI_COMMIT_BRANCH == "release"
|
||||
- if: $CI_COMMIT_BRANCH == "develop_sky"
|
||||
- if: $CI_COMMIT_BRANCH == "release_sky"
|
||||
- if: $CI_COMMIT_BRANCH =~ /feat_[a-zA-Z]+/
|
||||
|
||||
.generate_tag_rule:
|
||||
@ -36,16 +36,16 @@ variables:
|
||||
- macos
|
||||
- flutter
|
||||
rules:
|
||||
- if: $CI_COMMIT_BRANCH == "master"
|
||||
- if: $CI_COMMIT_BRANCH == "master_sky"
|
||||
|
||||
.generate_next_version_rule:
|
||||
tags:
|
||||
- macos
|
||||
- flutter
|
||||
rules:
|
||||
- if: $CI_COMMIT_BRANCH == "develop"
|
||||
- if: $CI_COMMIT_BRANCH == "release"
|
||||
- if: $CI_COMMIT_BRANCH == "canary_release"
|
||||
- if: $CI_COMMIT_BRANCH == "develop_sky"
|
||||
- if: $CI_COMMIT_BRANCH == "release_sky"
|
||||
- if: $CI_COMMIT_BRANCH == "canary_release_sky"
|
||||
- if: $CI_COMMIT_BRANCH =~ /feat_[a-zA-Z]+/
|
||||
|
||||
.print_env:
|
||||
@ -64,7 +64,7 @@ variables:
|
||||
- export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn
|
||||
- ls -li
|
||||
- export NEXT_VERSION="$(cat app_new.version)"
|
||||
# - flutter pub get
|
||||
# - flutter pub get
|
||||
- export PATH="/opt/homebrew/bin:$PATH"
|
||||
- eval "$(rbenv init -)"
|
||||
- rbenv global 2.6.10 # 你实际用的 Ruby 版本
|
||||
@ -73,6 +73,7 @@ variables:
|
||||
- gem env
|
||||
- bundle config mirror.https://rubygems.org https://mirrors.aliyun.com/rubygems/
|
||||
- bundle install --gemfile android/Gemfile --path vendor/bundle_android --quiet
|
||||
- flutter clean
|
||||
cache:
|
||||
paths:
|
||||
- app_new.version
|
||||
@ -84,7 +85,6 @@ variables:
|
||||
- export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn
|
||||
- ls -li
|
||||
- export NEXT_VERSION="$(cat app_new.version)"
|
||||
- flutter pub get
|
||||
- export PATH="/opt/homebrew/bin:$PATH"
|
||||
- eval "$(rbenv init -)"
|
||||
- rbenv global 2.6.10 # 你实际用的 Ruby 版本
|
||||
@ -93,6 +93,7 @@ variables:
|
||||
- gem env
|
||||
- bundle config mirror.https://rubygems.org https://mirrors.aliyun.com/rubygems/
|
||||
- bundle install --gemfile ios/Gemfile --path vendor/bundle_ios --quiet
|
||||
- flutter clean
|
||||
cache:
|
||||
paths:
|
||||
- app_new.version
|
||||
@ -110,7 +111,7 @@ generate_git_tag:
|
||||
stage: generate_tag_or_version
|
||||
extends: .generate_tag_rule
|
||||
before_script:
|
||||
- bash pre_build.sh xhj
|
||||
- bash pre_build.sh sky
|
||||
- project_url=$(echo $CI_PROJECT_URL | sed 's/http:\/\///')
|
||||
- echo "project_url:$project_url"
|
||||
- echo "CI_SERVER_FQDN:$CI_SERVER_FQDN/CI_PROJECT_ROOT_NAMESPACE:$CI_PROJECT_ROOT_NAMESPACE/CI_PROJECT_NAME:$CI_PROJECT_NAME"
|
||||
@ -166,12 +167,12 @@ create-release:
|
||||
- export StarLock_VERSION=${CI_COMMIT_TAG#*-}
|
||||
- echo "Uploading StarLock-${StarLock_VERSION} packages to
|
||||
${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${StarLock_VERSION}/StarLock-${StarLock_VERSION}-*"
|
||||
- 'curl -i --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file build/app/outputs/flutter-apk/starlock-xhj-release-${CI_COMMIT_TAG}.apk
|
||||
"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${StarLock_VERSION}/starlock-xhj-release-${CI_COMMIT_TAG}.apk"'
|
||||
- 'curl -i --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file build/app/outputs/flutter-apk/starlock-xhj_bundle-release-${CI_COMMIT_TAG}.aab
|
||||
"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${StarLock_VERSION}/starlock-xhj_bundle-release-${CI_COMMIT_TAG}.aab"'
|
||||
- 'curl -i --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file build/app/outputs/flutter-ipa/starlock-xhj-release-${CI_COMMIT_TAG}.ipa
|
||||
"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${StarLock_VERSION}/starlock-xhj-release-${CI_COMMIT_TAG}.ipa"'
|
||||
- 'curl -i --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file build/app/outputs/flutter-apk/starlock-sky-release-${CI_COMMIT_TAG}.apk
|
||||
"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${StarLock_VERSION}/starlock-sky-release-${CI_COMMIT_TAG}.apk"'
|
||||
- 'curl -i --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file build/app/outputs/flutter-apk/starlock-sky-release-${CI_COMMIT_TAG}.aab
|
||||
"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${StarLock_VERSION}/starlock-sky-release-${CI_COMMIT_TAG}.aab"'
|
||||
- 'curl -i --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file build/app/outputs/flutter-ipa/starlock-sky-release-${CI_COMMIT_TAG}.ipa
|
||||
"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${StarLock_VERSION}/starlock-sky-release-${CI_COMMIT_TAG}.ipa"'
|
||||
release:
|
||||
name: '$CI_COMMIT_TAG'
|
||||
description: '$(cat changelog.md)'
|
||||
@ -179,14 +180,14 @@ create-release:
|
||||
ref: '$CI_COMMIT_TAG'
|
||||
assets:
|
||||
links:
|
||||
- name: 'xhj apk binary package'
|
||||
url: '${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${CI_COMMIT_TAG}/starlock-xhj-release-${CI_COMMIT_TAG}.apk'
|
||||
- name: 'sky apk binary package'
|
||||
url: '${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${CI_COMMIT_TAG}/starlock-sky-release-${CI_COMMIT_TAG}.apk'
|
||||
link_type: 'package'
|
||||
- name: 'xhj bundle binary package'
|
||||
url: '${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${CI_COMMIT_TAG}/starlock-xhj_bundle-release-${CI_COMMIT_TAG}.aab'
|
||||
- name: 'sky bundle binary package'
|
||||
url: '${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${CI_COMMIT_TAG}/starlock-sky-release-${CI_COMMIT_TAG}.aab'
|
||||
link_type: 'package'
|
||||
- name: 'xhj ipa binary package'
|
||||
url: '${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${CI_COMMIT_TAG}/starlock-xhj-release-${CI_COMMIT_TAG}.ipa'
|
||||
- name: 'sky ipa binary package'
|
||||
url: '${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${CI_COMMIT_TAG}/starlock-sky-release-${CI_COMMIT_TAG}.ipa'
|
||||
link_type: 'package'
|
||||
|
||||
notify_success:
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
# 星锁APP
|
||||
|
||||
测试ci
|
||||
星云项目组旗下的智能锁应用,其中锁相关数据接入星云平台,业务数据接入星锁自有后台。
|
||||
|
||||
基于Flutter技术架构,支持Android和iOS平台。
|
||||
@ -61,7 +61,7 @@ keytool -list -v -keystore android/app/sky.jks
|
||||
```
|
||||
|
||||
输入密码(在android/app/build.gradle:38可以看到)
|
||||
|
||||
测试ci
|
||||
一般需要的是:证书指纹-SHA1 看起来像 95:6B:***********(共59个字符)
|
||||
|
||||
## 编译
|
||||
|
||||
@ -226,7 +226,7 @@ android {
|
||||
// You can update the following values to match your application needs.
|
||||
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration.
|
||||
minSdkVersion 25
|
||||
targetSdkVersion 34
|
||||
targetSdkVersion 35
|
||||
versionCode flutterVersionCode.toInteger()
|
||||
versionName flutterVersionName
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
@ -358,8 +358,14 @@ dependencies {
|
||||
implementation 'com.umeng.umsdk:asms:1.8.5'
|
||||
//</cn>
|
||||
//<com>
|
||||
implementation 'cn.jiguang.sdk.plugin:fcm:5.2.3'
|
||||
implementation 'com.google.firebase:firebase-messaging:23.0.5'
|
||||
// implementation 'cn.jiguang.sdk.plugin:fcm:5.2.3'
|
||||
// implementation 'com.google.firebase:firebase-messaging:23.0.5'
|
||||
//</com>
|
||||
|
||||
//FCM云消息与极光FCM插件
|
||||
implementation 'com.google.firebase:firebase-messaging:23.2.1'
|
||||
implementation 'cn.jiguang.sdk.plugin:fcm:5.2.2'
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -8,20 +8,21 @@ export ENV_BUILD_WORKSPACE=${CI_PROJECT_DIR}
|
||||
echo "GITLAB_WORKSPACE: ${CI_PROJECT_DIR}"
|
||||
cd ${CI_PROJECT_DIR}/android
|
||||
echo "ENV_BUILD_TAG:${ENV_BUILD_TAG},ENV_BUILD_BRANCH:${ENV_BUILD_BRANCH}"
|
||||
regex='^v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z]+\.[0-9]+)?$'
|
||||
if [[ "${ENV_BUILD_BRANCH}" == "canary_release" ]]; then
|
||||
# 只支持 v1.2.3_sky 这种tag格式
|
||||
regex='^v[0-9]+\.[0-9]+\.[0-9]+_sky$'
|
||||
if [[ "${ENV_BUILD_BRANCH}" == "canary_release_sky" ]]; then
|
||||
echo "===build canary_release: ${NEXT_VERSION}"
|
||||
export ENV_BUILD_TAG=${NEXT_VERSION}
|
||||
bundle exec fastlane release_apk flavor:xhj --verbose
|
||||
bundle exec fastlane release_apk flavor:sky --verbose
|
||||
elif [[ $ENV_BUILD_TAG =~ $regex ]]; then
|
||||
echo "===build release===$ENV_BUILD_TAG"
|
||||
bundle exec fastlane release_apk flavor:xhj --verbose
|
||||
bundle exec fastlane release_bundle flavor:xhj_bundle --verbose
|
||||
elif [[ "${ENV_BUILD_BRANCH}" == "develop" ]]; then
|
||||
bundle exec fastlane release_apk flavor:sky --verbose
|
||||
bundle exec fastlane release_bundle flavor:sky --verbose
|
||||
elif [[ "${ENV_BUILD_BRANCH}" == "develop_sky" ]]; then
|
||||
echo "===build dev===${NEXT_VERSION}"
|
||||
bundle exec fastlane beta flavor:xhj env:dev --verbose
|
||||
elif [[ "${ENV_BUILD_BRANCH}" == "release" ]] || [[ "${ENV_BUILD_BRANCH}" == "feat_devops" ]] ; then
|
||||
bundle exec fastlane beta flavor:sky env:dev --verbose
|
||||
elif [[ "${ENV_BUILD_BRANCH}" == "release_sky" || "${ENV_BUILD_BRANCH}" == "feat_devops_sky" ]] ; then
|
||||
echo "===build pre===${NEXT_VERSION}"
|
||||
bundle exec fastlane beta flavor:xhj env:pre --verbose
|
||||
bundle exec fastlane beta flavor:sky env:pre --verbose
|
||||
fi
|
||||
exit 0
|
||||
@ -44,10 +44,6 @@ platform :android do
|
||||
print_header '🏁 Before All'
|
||||
print_log $current_branch
|
||||
print_log $current_tag
|
||||
print_log $path_file_preview_apk_default
|
||||
print_log $path_file_release_apk_default
|
||||
print_log $path_file_preview_apk_copy
|
||||
print_log $path_file_release_apk_copy
|
||||
Dir.chdir "../.." do
|
||||
sh('pwd')
|
||||
end
|
||||
@ -55,11 +51,9 @@ platform :android do
|
||||
|
||||
desc "Submit a new Beta Build to Pgy Beta"
|
||||
lane :beta do |options|
|
||||
flavor = options[:flavor]
|
||||
env = options[:env]
|
||||
UI.user_error!("flavor is required") unless flavor
|
||||
UI.user_error!("env is required") unless env
|
||||
print_log "build #{flavor} on #{env}"
|
||||
print_log "build sky on #{env}"
|
||||
build_number = Time.now.strftime("%Y%m%d%H")
|
||||
print_log "BuildNo #{build_number}"
|
||||
build_version = $next_version
|
||||
@ -69,11 +63,12 @@ platform :android do
|
||||
print_log "last_git_commit_short_hash #{short_hash}"
|
||||
remove_zone_pre_build(zone:"com")
|
||||
Dir.chdir "../.." do
|
||||
sh("flutter","clean")
|
||||
sh("flutter","pub","get")
|
||||
sh("flutter", "build", "apk", "--no-tree-shake-icons", "--release", "--flavor", "#{flavor}_#{env}", "-t", "lib/main_#{flavor}_#{env}.dart", "--build-number=#{build_number}", "--build-name=#{build_version}")
|
||||
sh("flutter", "build", "apk", "--no-tree-shake-icons", "--release", "--flavor", "sky_#{env}", "-t", "lib/main_sky_#{env}.dart", "--build-number=#{build_number}", "--build-name=#{build_version}")
|
||||
end
|
||||
old_file_path = File.join($path_apk_output_dir, "app-#{flavor}_#{env}-release.apk")
|
||||
new_file_path = File.join($path_apk_output_dir, "starlock-#{flavor}-preview-#{build_version}.apk")
|
||||
old_file_path = File.join($path_apk_output_dir, "app-sky_#{env}-release.apk")
|
||||
new_file_path = File.join($path_apk_output_dir, "starlock-sky-preview-#{build_version}.apk")
|
||||
File.rename(old_file_path, new_file_path)
|
||||
logs = changelog_from_git_commits(
|
||||
pretty: '- %s (%cn)',
|
||||
@ -85,9 +80,7 @@ platform :android do
|
||||
|
||||
desc "Build & upload a new version to Gitlab Release"
|
||||
lane :release_apk do |options|
|
||||
flavor = options[:flavor]
|
||||
UI.user_error!("flavor is required") unless flavor
|
||||
print_log "build flavor for: #{flavor}"
|
||||
print_log "build sky"
|
||||
build_number = Time.now.strftime("%Y%m%d%H")
|
||||
print_log "BuildNo #{build_number}"
|
||||
build_version = $current_tag.match(/^v(\d+\.\d+\.\d+)/).captures[0]
|
||||
@ -98,18 +91,16 @@ platform :android do
|
||||
remove_zone_pre_build(zone:"com")
|
||||
Dir.chdir "../.." do
|
||||
sh("flutter","pub","get")
|
||||
sh("flutter", "build", "apk", "--no-tree-shake-icons", "--release", "--flavor", "#{flavor}", "-t", "lib/main_#{flavor}_lite.dart", "--build-number=#{build_number}", "--build-name=#{build_version}")
|
||||
sh("flutter", "build", "apk", "--no-tree-shake-icons", "--release", "--flavor", "sky", "-t", "lib/main_sky_lite.dart", "--build-number=#{build_number}", "--build-name=#{build_version}")
|
||||
end
|
||||
old_apk_file_path = File.join($path_apk_output_dir, "app-#{flavor}-release.apk")
|
||||
new_apk_file_path = File.join($path_apk_output_dir, "starlock-#{flavor}-release-"+$current_tag+".apk")
|
||||
old_apk_file_path = File.join($path_apk_output_dir, "app-sky-release.apk")
|
||||
new_apk_file_path = File.join($path_apk_output_dir, "starlock-sky-release-"+$current_tag+".apk")
|
||||
File.rename(old_apk_file_path, new_apk_file_path)
|
||||
end
|
||||
|
||||
desc "Build & upload a new version to Gitlab Release"
|
||||
lane :release_bundle do |options|
|
||||
flavor = options[:flavor]
|
||||
UI.user_error!("flavor is required") unless flavor
|
||||
print_log "build flavor for: #{flavor}"
|
||||
print_log "build sky"
|
||||
build_number = Time.now.strftime("%Y%m%d%H")
|
||||
print_log "BuildNo #{build_number}"
|
||||
build_version = $current_tag.match(/^v(\d+\.\d+\.\d+)/).captures[0]
|
||||
@ -120,10 +111,10 @@ platform :android do
|
||||
remove_zone_pre_build(zone:"cn")
|
||||
Dir.chdir "../.." do
|
||||
sh("flutter","pub","get")
|
||||
sh("flutter", "build", "appbundle", "--no-tree-shake-icons", "--release", "--flavor", "#{flavor}", "-t", "lib/main_#{flavor}_lite.dart", "--build-number=#{build_number}", "--build-name=#{build_version}")
|
||||
sh("flutter", "build", "appbundle", "--no-tree-shake-icons", "--release", "--flavor", "sky", "-t", "lib/main_sky_lite.dart", "--build-number=#{build_number}", "--build-name=#{build_version}")
|
||||
end
|
||||
old_bundle_file_path = File.join($path_bundle_output_dir , "/#{flavor}Release/app-#{flavor}-release.aab")
|
||||
new_bundle_file_path = File.join($path_bundle_output_dir , "/#{flavor}Release/starlock-#{flavor}-release-"+$current_tag+".aab")
|
||||
old_bundle_file_path = File.join($path_bundle_output_dir , "/skyRelease/app-sky-release.aab")
|
||||
new_bundle_file_path = File.join($path_bundle_output_dir , "/skyRelease/starlock-sky-release-"+$current_tag+".aab")
|
||||
File.rename(old_bundle_file_path, new_bundle_file_path)
|
||||
sh('cp',new_bundle_file_path,$path_apk_output_dir)
|
||||
end
|
||||
|
||||
@ -29,8 +29,8 @@
|
||||
|
||||
#player {
|
||||
object-fit: cover;
|
||||
height: 56vh;
|
||||
transform: rotate(-90deg);
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
BIN
images/guide/1.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
images/guide/2.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
images/guide/3.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
images/guide/4.png
Normal file
|
After Width: | Height: | Size: 9.2 KiB |
|
Before Width: | Height: | Size: 14 KiB |
BIN
images/main/addFingerprint/0.jpg
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
images/main/addFingerprint/1.jpg
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
images/main/addFingerprint/2.jpg
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
images/main/addFingerprint/3.jpg
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
images/main/addFingerprint/4.jpg
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
images/main/addFingerprint/5.jpg
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
images/main/addFingerprint/6.jpg
Normal file
|
After Width: | Height: | Size: 67 KiB |
BIN
images/other/2.png
Normal file
|
After Width: | Height: | Size: 70 KiB |
BIN
images/other/ai.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
images/other/matter.png
Normal file
|
After Width: | Height: | Size: 7.0 KiB |
BIN
images/other/tuya.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
31
ios/LCKBridge.swift
Normal file
@ -0,0 +1,31 @@
|
||||
import Foundation
|
||||
import UIKit
|
||||
import LiveCommunicationKit
|
||||
|
||||
@objc class LCKBridge: NSObject {
|
||||
@objc static func presentCallInterfaceFromRootVC(_ rootVC: UIViewController, callerName: String) {
|
||||
if #available(iOS 17.4, *) {
|
||||
// 配置ConversationManager
|
||||
let config = ConversationManager.Configuration(
|
||||
ringtoneName: "notes_of_the_optimistic",
|
||||
iconTemplateImageData: UIImage(named: "AppIcon")?.pngData(),
|
||||
maximumConversationGroups: 1,
|
||||
maximumConversationsPerConversationGroup: 1,
|
||||
includesConversationInRecents: false,
|
||||
supportsVideo: false,
|
||||
supportedHandleTypes: [.generic, .phoneNumber, .emailAddress]
|
||||
)
|
||||
let manager = ConversationManager(configuration: config)
|
||||
let local = Handle(type: .generic, value: callerName, displayName: callerName)
|
||||
let update = Conversation.Update(localMember: local, members: [local], activeRemoteMembers: [local])
|
||||
Task {
|
||||
do {
|
||||
try await manager.reportNewIncomingConversation(uuid: UUID(), update: update)
|
||||
print("成功报告新来电")
|
||||
} catch {
|
||||
print("报告新来电失败: \(error.localizedDescription)")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
133
ios/Podfile.lock
@ -1,6 +1,4 @@
|
||||
PODS:
|
||||
- aj_captcha_flutter (0.0.1):
|
||||
- Flutter
|
||||
- AlicloudPush (1.9.9.8):
|
||||
- AlicloudSender
|
||||
- AlicloudUT
|
||||
@ -15,17 +13,6 @@ PODS:
|
||||
- AlicloudUTDID
|
||||
- aliyun_face_plugin (0.0.1):
|
||||
- Flutter
|
||||
- AMap3DMap (10.0.700):
|
||||
- AMapFoundation (>= 1.8.0)
|
||||
- amap_flutter_location (0.0.1):
|
||||
- AMapLocation
|
||||
- Flutter
|
||||
- amap_flutter_map (0.0.1):
|
||||
- AMap3DMap
|
||||
- Flutter
|
||||
- AMapFoundation (1.8.2)
|
||||
- AMapLocation (2.10.0):
|
||||
- AMapFoundation (>= 1.8.0)
|
||||
- app_settings (5.1.1):
|
||||
- Flutter
|
||||
- audio_session (0.0.1):
|
||||
@ -40,6 +27,7 @@ PODS:
|
||||
- connectivity_plus (0.0.1):
|
||||
- Flutter
|
||||
- FlutterMacOS
|
||||
- CryptoSwift (1.8.4)
|
||||
- device_info_plus (0.0.1):
|
||||
- Flutter
|
||||
- DKImagePickerController/Core (4.3.9):
|
||||
@ -121,11 +109,16 @@ PODS:
|
||||
- GoogleUtilities/UserDefaults (~> 8.0)
|
||||
- PromisesObjC (~> 2.4)
|
||||
- Flutter (1.0.0)
|
||||
- flutter_app_badger (1.3.0):
|
||||
- Flutter
|
||||
- flutter_blue_plus (0.0.1):
|
||||
- Flutter
|
||||
- flutter_bugly (0.0.1):
|
||||
- Bugly (= 2.6.1)
|
||||
- Flutter
|
||||
- flutter_callkit_incoming (0.0.1):
|
||||
- CryptoSwift
|
||||
- Flutter
|
||||
- flutter_local_notifications (0.0.1):
|
||||
- Flutter
|
||||
- flutter_native_contact_picker (0.0.1):
|
||||
@ -272,6 +265,8 @@ PODS:
|
||||
- UMDevice
|
||||
- url_launcher_ios (0.0.1):
|
||||
- Flutter
|
||||
- video_decode_plugin (0.0.1):
|
||||
- Flutter
|
||||
- video_player_avfoundation (0.0.1):
|
||||
- Flutter
|
||||
- FlutterMacOS
|
||||
@ -283,11 +278,8 @@ PODS:
|
||||
- WechatOpenSDK-XCFramework (2.0.4)
|
||||
|
||||
DEPENDENCIES:
|
||||
- aj_captcha_flutter (from `.symlinks/plugins/aj_captcha_flutter/ios`)
|
||||
- AlicloudPush (~> 1.9.9)
|
||||
- aliyun_face_plugin (from `.symlinks/plugins/aliyun_face_plugin/ios`)
|
||||
- amap_flutter_location (from `.symlinks/plugins/amap_flutter_location/ios`)
|
||||
- amap_flutter_map (from `.symlinks/plugins/amap_flutter_map/ios`)
|
||||
- app_settings (from `.symlinks/plugins/app_settings/ios`)
|
||||
- audio_session (from `.symlinks/plugins/audio_session/ios`)
|
||||
- audioplayers_darwin (from `.symlinks/plugins/audioplayers_darwin/ios`)
|
||||
@ -299,8 +291,10 @@ DEPENDENCIES:
|
||||
- firebase_analytics (from `.symlinks/plugins/firebase_analytics/ios`)
|
||||
- firebase_core (from `.symlinks/plugins/firebase_core/ios`)
|
||||
- Flutter (from `Flutter`)
|
||||
- flutter_app_badger (from `.symlinks/plugins/flutter_app_badger/ios`)
|
||||
- flutter_blue_plus (from `.symlinks/plugins/flutter_blue_plus/ios`)
|
||||
- flutter_bugly (from `.symlinks/plugins/flutter_bugly/ios`)
|
||||
- flutter_callkit_incoming (from `.symlinks/plugins/flutter_callkit_incoming/ios`)
|
||||
- flutter_local_notifications (from `.symlinks/plugins/flutter_local_notifications/ios`)
|
||||
- flutter_native_contact_picker (from `.symlinks/plugins/flutter_native_contact_picker/ios`)
|
||||
- flutter_pcm_sound (from `.symlinks/plugins/flutter_pcm_sound/ios`)
|
||||
@ -327,6 +321,7 @@ DEPENDENCIES:
|
||||
- UMDevice
|
||||
- umeng_common_sdk (from `.symlinks/plugins/umeng_common_sdk/ios`)
|
||||
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
|
||||
- video_decode_plugin (from `.symlinks/plugins/video_decode_plugin/ios`)
|
||||
- video_player_avfoundation (from `.symlinks/plugins/video_player_avfoundation/darwin`)
|
||||
- video_thumbnail (from `.symlinks/plugins/video_thumbnail/ios`)
|
||||
- webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/ios`)
|
||||
@ -340,10 +335,8 @@ SPEC REPOS:
|
||||
- AlicloudUtils
|
||||
- EMASRest
|
||||
https://github.com/CocoaPods/Specs.git:
|
||||
- AMap3DMap
|
||||
- AMapFoundation
|
||||
- AMapLocation
|
||||
- Bugly
|
||||
- CryptoSwift
|
||||
- DKImagePickerController
|
||||
- DKPhotoGallery
|
||||
- Firebase
|
||||
@ -369,14 +362,8 @@ SPEC REPOS:
|
||||
- WechatOpenSDK-XCFramework
|
||||
|
||||
EXTERNAL SOURCES:
|
||||
aj_captcha_flutter:
|
||||
:path: ".symlinks/plugins/aj_captcha_flutter/ios"
|
||||
aliyun_face_plugin:
|
||||
:path: ".symlinks/plugins/aliyun_face_plugin/ios"
|
||||
amap_flutter_location:
|
||||
:path: ".symlinks/plugins/amap_flutter_location/ios"
|
||||
amap_flutter_map:
|
||||
:path: ".symlinks/plugins/amap_flutter_map/ios"
|
||||
app_settings:
|
||||
:path: ".symlinks/plugins/app_settings/ios"
|
||||
audio_session:
|
||||
@ -399,10 +386,14 @@ EXTERNAL SOURCES:
|
||||
:path: ".symlinks/plugins/firebase_core/ios"
|
||||
Flutter:
|
||||
:path: Flutter
|
||||
flutter_app_badger:
|
||||
:path: ".symlinks/plugins/flutter_app_badger/ios"
|
||||
flutter_blue_plus:
|
||||
:path: ".symlinks/plugins/flutter_blue_plus/ios"
|
||||
flutter_bugly:
|
||||
:path: ".symlinks/plugins/flutter_bugly/ios"
|
||||
flutter_callkit_incoming:
|
||||
:path: ".symlinks/plugins/flutter_callkit_incoming/ios"
|
||||
flutter_local_notifications:
|
||||
:path: ".symlinks/plugins/flutter_local_notifications/ios"
|
||||
flutter_native_contact_picker:
|
||||
@ -449,6 +440,8 @@ EXTERNAL SOURCES:
|
||||
:path: ".symlinks/plugins/umeng_common_sdk/ios"
|
||||
url_launcher_ios:
|
||||
:path: ".symlinks/plugins/url_launcher_ios/ios"
|
||||
video_decode_plugin:
|
||||
:path: ".symlinks/plugins/video_decode_plugin/ios"
|
||||
video_player_avfoundation:
|
||||
:path: ".symlinks/plugins/video_player_avfoundation/darwin"
|
||||
video_thumbnail:
|
||||
@ -457,83 +450,81 @@ EXTERNAL SOURCES:
|
||||
:path: ".symlinks/plugins/webview_flutter_wkwebview/ios"
|
||||
|
||||
SPEC CHECKSUMS:
|
||||
aj_captcha_flutter: dd7af1aa064bdd621ae335b819bab07309c3c023
|
||||
AlicloudPush: 88529c9b796e4ece0601de0867b30359f55b61f7
|
||||
AlicloudSender: 1f468b6bd962a099ffc19d45e3608b0fe98f259d
|
||||
AlicloudUT: 6d1cf30d57d096b7e9bb4b069dd0ba6ad59a3338
|
||||
AlicloudUTDID: 4e9d44c2fd704b3508069c38eaec9d6a759e702c
|
||||
AlicloudUtils: 2a78de434a8b2dc99e408c4d6220e654076d9ef0
|
||||
aliyun_face_plugin: 7a90b6526c5acea616062e809699294c782c3eb8
|
||||
AMap3DMap: 6ee456d7ba946ebbad580a343b74ffa8e9936175
|
||||
amap_flutter_location: 44ff5beb64f42e0bf5feb402fe299dac0013af6f
|
||||
amap_flutter_map: 979e54d227cedac6c7504a2151bfbf3bcf96760a
|
||||
AMapFoundation: 9885c48fc3a78fdfb84a0299a2293e56ea3c9fec
|
||||
AMapLocation: 5248aec2455ebb5d104b367813c946430a2ee033
|
||||
app_settings: 017320c6a680cdc94c799949d95b84cb69389ebc
|
||||
audio_session: 088d2483ebd1dc43f51d253d4a1c517d9a2e7207
|
||||
audioplayers_darwin: 877d9a4d06331c5c374595e46e16453ac7eafa40
|
||||
auto_orientation: 102ed811a5938d52c86520ddd7ecd3a126b5d39d
|
||||
aliyun_face_plugin: 8b3b7961de363c53d841d3b484506e85bdcfb756
|
||||
app_settings: 5127ae0678de1dcc19f2293271c51d37c89428b2
|
||||
audio_session: f08db0697111ac84ba46191b55488c0563bb29c6
|
||||
audioplayers_darwin: ccf9c770ee768abb07e26d90af093f7bab1c12ab
|
||||
auto_orientation: a1600c9ed72e6e96982fb4e1214463343342432a
|
||||
Bugly: 217ac2ce5f0f2626d43dbaa4f70764c953a26a31
|
||||
camera_avfoundation: dd002b0330f4981e1bbcb46ae9b62829237459a4
|
||||
connectivity_plus: ddd7f30999e1faaef5967c23d5b6d503d10434db
|
||||
device_info_plus: e5c5da33f982a436e103237c0c85f9031142abed
|
||||
camera_avfoundation: 04b44aeb14070126c6529e5ab82cc7c9fca107cf
|
||||
connectivity_plus: 3f6c9057f4cd64198dc826edfb0542892f825343
|
||||
CryptoSwift: e64e11850ede528a02a0f3e768cec8e9d92ecb90
|
||||
device_info_plus: d668d0dcad87727e865495c472b911b15d7ee26a
|
||||
DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c
|
||||
DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60
|
||||
EMASRest: 8df6f87836767a9415ad5cc4af739bc9d215b475
|
||||
file_picker: ce3938a0df3cc1ef404671531facef740d03f920
|
||||
file_picker: 5f42b9d5580e30b57b4863f9d94b448016b702e5
|
||||
Firebase: 9f574c08c2396885b5e7e100ed4293d956218af9
|
||||
firebase_analytics: 1a66fe8d4375eccff44671ea37897683a78b2675
|
||||
firebase_core: ceec591a66629daaee82d3321551692c4a871493
|
||||
firebase_analytics: 2090f32a7f5364b03cdf11aa7e904f4610309563
|
||||
firebase_core: 53cecb83c72fea329b267bb0accb06a33e9f036a
|
||||
FirebaseAnalytics: 27eb78b97880ea4a004839b9bac0b58880f5a92a
|
||||
FirebaseCore: 3cf438f431f18c12cdf2aaf64434648b63f7e383
|
||||
FirebaseCoreInternal: d6c17dafc8dc33614733a8b52df78fcb4394c881
|
||||
FirebaseInstallations: 6ef4a1c7eb2a61ee1f74727d7f6ce2e72acf1414
|
||||
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
|
||||
flutter_blue_plus: 4837da7d00cf5d441fdd6635b3a57f936778ea96
|
||||
flutter_bugly: bf35df32a9c5d50b8aacdd35bd8ddc5b55150dae
|
||||
flutter_local_notifications: 4cde75091f6327eb8517fa068a0a5950212d2086
|
||||
flutter_native_contact_picker: bd430ba0fbf82768bb50c2c52a69a65759a8f907
|
||||
flutter_pcm_sound: de0572ca4f99091cc2abfcc31601b8a4ddd33c0e
|
||||
flutter_voice_processor: 2b89b93d69b02227ae3fd58589ee0bcfa3ca2a82
|
||||
fluttertoast: e9a18c7be5413da53898f660530c56f35edfba9c
|
||||
fluwx: daa284756ce53442b3d0417ceeda66e981906811
|
||||
gallery_saver: 9fc173c9f4fcc48af53b2a9ebea1b643255be542
|
||||
google_maps_flutter_ios: f135b968a67c05679e0a53538e900b5c174b0d99
|
||||
flutter_app_badger: 16b371e989d04cd265df85be2c3851b49cb68d18
|
||||
flutter_blue_plus: e5808fc4e5ebc58bb911635f8fdaf5e2b4da2754
|
||||
flutter_bugly: a77131ff7b385a481c594830dc89aa53e8e7fbee
|
||||
flutter_callkit_incoming: cb8138af67cda6dd981f7101a5d709003af21502
|
||||
flutter_local_notifications: ad39620c743ea4c15127860f4b5641649a988100
|
||||
flutter_native_contact_picker: ebff97ae8c8110e9de4590d6e363f974dca52a8c
|
||||
flutter_pcm_sound: e9c2f6ce580eefcab2af46763f0354484d5c4ac8
|
||||
flutter_voice_processor: a4e08ad27a55554d962a71033461e32638cee3f6
|
||||
fluttertoast: 76fea30fcf04176325f6864c87306927bd7d2038
|
||||
fluwx: 6bf9c5a3a99ad31b0de137dd92370a0d10a60f4b
|
||||
gallery_saver: 1d68d1818df11b1afa84a97d1a530463753e92e3
|
||||
google_maps_flutter_ios: e6aba27b584112778b931f1116527f78c9dba99b
|
||||
GoogleAppMeasurement: 6e49ffac7d3f2c3ded9cc663f912a13b67bbd0de
|
||||
GoogleMaps: 20d7b12be49a14287f797e88e0e31bc4156aaeb4
|
||||
GoogleUtilities: 26a3abef001b6533cf678d3eb38fd3f614b7872d
|
||||
image_gallery_saver: cb43cc43141711190510e92c460eb1655cd343cb
|
||||
image_picker_ios: c560581cceedb403a6ff17f2f816d7fea1421fc1
|
||||
image_gallery_saver: 14711d79da40581063e8842a11acf1969d781ed7
|
||||
image_picker_ios: 7fe1ff8e34c1790d6fff70a32484959f563a928a
|
||||
ios-voice-processor: 8e32d7f980a06d392d128ef1cd19cf6ddcaca3c1
|
||||
JCore: 024c73b04e110b496e93d8c127ea9cd1ed934e4c
|
||||
JPush: b71f497a3c1b825c7843fd97f290b05d5cd75f2e
|
||||
jpush_flutter: c87be254790933c0363684169ef9d3d279a5adc5
|
||||
just_audio: baa7252489dbcf47a4c7cc9ca663e9661c99aafa
|
||||
jpush_flutter: 81be43c2095cac5c2ac45e673e26c83230304015
|
||||
just_audio: 6c031bb61297cf218b4462be616638e81c058e97
|
||||
JVerification: 0774807f44dd788c78d50303a14e133735807856
|
||||
jverify: 337ea43ac1e16f9484f4195abe787d1b6241163c
|
||||
jverify: 59d8e9a5835616c1deed9cf67dbd9679aa1ca244
|
||||
libwebp: 1786c9f4ff8a279e4dac1e8f385004d5fc253009
|
||||
nanopb: fad817b59e0457d11a5dfbde799381cd727c1275
|
||||
network_info_plus: 6d0c3eb8367b8164fa3fb0c19875e3f59d49697f
|
||||
open_filex: 6e26e659846ec990262224a12ef1c528bb4edbe4
|
||||
package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e
|
||||
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
|
||||
permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2
|
||||
network_info_plus: b6c3b27559bf719cc53ef571a947b3ac4629754c
|
||||
open_filex: 432f3cd11432da3e39f47fcc0df2b1603854eff1
|
||||
package_info_plus: ae4a63389b62b5be8544b36bfc5b069617938813
|
||||
path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
|
||||
permission_handler_apple: 4ed2196e43d0651e8ff7ca3483a069d469701f2d
|
||||
PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
|
||||
SDWebImage: dfe95b2466a9823cf9f0c6d01217c06550d7b29a
|
||||
shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78
|
||||
sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec
|
||||
shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7
|
||||
sqflite: c35dad70033b8862124f8337cc994a809fcd9fa3
|
||||
SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4
|
||||
system_settings: 8f5cdbfa72c677fc8d665b863bcc20d393d87e9d
|
||||
system_settings: 0afa5deab4239f6b9325f54aba2d3b0932bcf23d
|
||||
Toast: 1f5ea13423a1e6674c4abdac5be53587ae481c4e
|
||||
UMCommon: 8b4cd0423297c39bca6eea1ec896558b40e5bcf7
|
||||
UMDevice: dcdf7ec167387837559d149fbc7d793d984faf82
|
||||
umeng_common_sdk: a8abd7f86dfd013dbbeeae587ee143760c6582f2
|
||||
url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe
|
||||
video_player_avfoundation: 7c6c11d8470e1675df7397027218274b6d2360b3
|
||||
video_thumbnail: c4e2a3c539e247d4de13cd545344fd2d26ffafd1
|
||||
webview_flutter_wkwebview: 2a23822e9039b7b1bc52e5add778e5d89ad488d1
|
||||
umeng_common_sdk: 095b63e6f83b71548725a7c03a6c17b23be6674b
|
||||
url_launcher_ios: 694010445543906933d732453a59da0a173ae33d
|
||||
video_decode_plugin: 07649b4703fdf618daf7000af58f3b251c3e280f
|
||||
video_player_avfoundation: 2cef49524dd1f16c5300b9cd6efd9611ce03639b
|
||||
video_thumbnail: b637e0ad5f588ca9945f6e2c927f73a69a661140
|
||||
webview_flutter_wkwebview: 45a041c7831641076618876de3ba75c712860c6b
|
||||
WechatOpenSDK-XCFramework: 36fb2bea0754266c17184adf4963d7e6ff98b69f
|
||||
|
||||
PODFILE CHECKSUM: 728f9c851a19709391c77c54ed3556e484b54db6
|
||||
|
||||
COCOAPODS: 1.14.3
|
||||
COCOAPODS: 1.16.2
|
||||
|
||||
4
ios/Runner-Bridging-Header.h
Normal file
@ -0,0 +1,4 @@
|
||||
//
|
||||
// Use this file to import your target's public headers that you would like to expose to Swift.
|
||||
//
|
||||
|
||||
@ -7,6 +7,7 @@
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
044929092E13AE5D0062AC4D /* LCKBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 044929082E13AE5D0062AC4D /* LCKBridge.swift */; };
|
||||
04717D692D1B97E100089BD3 /* InfoPlist_sky.strings in Resources */ = {isa = PBXBuildFile; fileRef = 04717D672D1B97E100089BD3 /* InfoPlist_sky.strings */; };
|
||||
04717D6D2D1B983300089BD3 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 04717D6B2D1B983200089BD3 /* InfoPlist.strings */; };
|
||||
04717D712D1B9B5A00089BD3 /* InfoPlist_xhj.strings in Resources */ = {isa = PBXBuildFile; fileRef = 04717D6F2D1B9B5A00089BD3 /* InfoPlist_xhj.strings */; };
|
||||
@ -100,6 +101,8 @@
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
0420903B2C0EEAA50073E654 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Main.strings"; sourceTree = "<group>"; };
|
||||
044929082E13AE5D0062AC4D /* LCKBridge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LCKBridge.swift; sourceTree = "<group>"; };
|
||||
0449290A2E13AE5F0062AC4D /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
|
||||
04717D682D1B97E100089BD3 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/InfoPlist_sky.strings"; sourceTree = "<group>"; };
|
||||
04717D6A2D1B97E800089BD3 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist_sky.strings; sourceTree = "<group>"; };
|
||||
04717D6C2D1B983200089BD3 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
@ -462,6 +465,7 @@
|
||||
97C146E51CF9000F007C117D = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
044929082E13AE5D0062AC4D /* LCKBridge.swift */,
|
||||
82F1ED1B2BE8BA8E00265D59 /* BioAuthEngine.bundle */,
|
||||
82F1ED192BE8BA7D00265D59 /* OCRXMedia.bundle */,
|
||||
82F1ED172BE8BA6900265D59 /* APBToygerFacadeSuitable.bundle */,
|
||||
@ -476,6 +480,7 @@
|
||||
7EA577AFEEE10224BA96C569 /* preLaunchScreen.storyboard */,
|
||||
9A03C622761920C324D80733 /* skyLaunchScreen.storyboard */,
|
||||
6A6F5C86239927252C06A16A /* xhjLaunchScreen.storyboard */,
|
||||
0449290A2E13AE5F0062AC4D /* Runner-Bridging-Header.h */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
@ -606,7 +611,7 @@
|
||||
TargetAttributes = {
|
||||
97C146ED1CF9000F007C117D = {
|
||||
CreatedOnToolsVersion = 7.3.1;
|
||||
LastSwiftMigration = 1430;
|
||||
LastSwiftMigration = 1630;
|
||||
};
|
||||
};
|
||||
};
|
||||
@ -793,10 +798,14 @@
|
||||
inputFileListPaths = (
|
||||
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
name = "[CP] Copy Pods Resources";
|
||||
outputFileListPaths = (
|
||||
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
|
||||
);
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
|
||||
@ -809,6 +818,7 @@
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
044929092E13AE5D0062AC4D /* LCKBridge.swift in Sources */,
|
||||
8297E49B2AE7974700E886FA /* AppDelegate.m in Sources */,
|
||||
8297E4102AE75AC500E886FA /* XSFlutterManager.m in Sources */,
|
||||
97C146F31CF9000F007C117D /* main.m in Sources */,
|
||||
@ -1073,6 +1083,7 @@
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 4A63B2C308CB401731950EC8 /* Pods-Runner.debug-sky.xcconfig */;
|
||||
buildSettings = {
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-sky.entitlements";
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
@ -1092,6 +1103,8 @@
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner-Bridging-Header.h";
|
||||
SWIFT_VERSION = 6.0;
|
||||
TARGETED_DEVICE_FAMILY = 1;
|
||||
};
|
||||
name = "Debug-sky";
|
||||
@ -1171,6 +1184,7 @@
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 22D858E988707FF26E068457 /* Pods-Runner.debug-xhj.xcconfig */;
|
||||
buildSettings = {
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-xhj.entitlements";
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
@ -1190,6 +1204,8 @@
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner-Bridging-Header.h";
|
||||
SWIFT_VERSION = 6.0;
|
||||
TARGETED_DEVICE_FAMILY = 1;
|
||||
};
|
||||
name = "Debug-xhj";
|
||||
@ -1198,12 +1214,14 @@
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 16A83D21DFB231D8453DC681 /* Pods-Runner.release-sky.xcconfig */;
|
||||
buildSettings = {
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-sky.entitlements";
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
|
||||
CODE_SIGN_STYLE = Manual;
|
||||
DEVELOPMENT_TEAM = "";
|
||||
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = NAQ5PL2DYC;
|
||||
GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = "";
|
||||
INFOPLIST_FILE = Runner/info_sky.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
@ -1216,6 +1234,8 @@
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner-Bridging-Header.h";
|
||||
SWIFT_VERSION = 6.0;
|
||||
TARGETED_DEVICE_FAMILY = 1;
|
||||
};
|
||||
name = "Release-sky";
|
||||
@ -1224,6 +1244,7 @@
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = CDC2B8ED804B514A774F187D /* Pods-Runner.release-xhj.xcconfig */;
|
||||
buildSettings = {
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-xhj.entitlements";
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
|
||||
@ -1243,6 +1264,8 @@
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner-Bridging-Header.h";
|
||||
SWIFT_VERSION = 6.0;
|
||||
TARGETED_DEVICE_FAMILY = 1;
|
||||
};
|
||||
name = "Release-xhj";
|
||||
@ -1470,6 +1493,7 @@
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 72E2A6A227EA101C0167D322 /* Pods-Runner.debug-local.xcconfig */;
|
||||
buildSettings = {
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = "Runner/RunnerDebug-dev.entitlements";
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
@ -1489,6 +1513,9 @@
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner-Bridging-Header.h";
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 6.0;
|
||||
TARGETED_DEVICE_FAMILY = 1;
|
||||
};
|
||||
name = "Debug-local";
|
||||
@ -1568,6 +1595,7 @@
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = D697F91E8405773AB9A5881E /* Pods-Runner.pre-release-sky.xcconfig */;
|
||||
buildSettings = {
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-sky.entitlements";
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
|
||||
@ -1587,6 +1615,8 @@
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner-Bridging-Header.h";
|
||||
SWIFT_VERSION = 6.0;
|
||||
TARGETED_DEVICE_FAMILY = 1;
|
||||
};
|
||||
name = "Pre-release-sky";
|
||||
@ -1666,6 +1696,7 @@
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 126D1370182AB44291C67A10 /* Pods-Runner.dev-release-sky.xcconfig */;
|
||||
buildSettings = {
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-sky.entitlements";
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
|
||||
@ -1685,6 +1716,8 @@
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner-Bridging-Header.h";
|
||||
SWIFT_VERSION = 6.0;
|
||||
TARGETED_DEVICE_FAMILY = 1;
|
||||
};
|
||||
name = "Dev-release-sky";
|
||||
@ -1764,6 +1797,7 @@
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 789004F1B475B44713E199BC /* Pods-Runner.pre-release-xhj.xcconfig */;
|
||||
buildSettings = {
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-xhj.entitlements";
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
|
||||
@ -1783,6 +1817,8 @@
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner-Bridging-Header.h";
|
||||
SWIFT_VERSION = 6.0;
|
||||
TARGETED_DEVICE_FAMILY = 1;
|
||||
};
|
||||
name = "Pre-release-xhj";
|
||||
@ -1862,6 +1898,7 @@
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = ED3A443EA1439FD0FB4BCF80 /* Pods-Runner.dev-release-xhj.xcconfig */;
|
||||
buildSettings = {
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-xhj.entitlements";
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
|
||||
@ -1881,6 +1918,8 @@
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner-Bridging-Header.h";
|
||||
SWIFT_VERSION = 6.0;
|
||||
TARGETED_DEVICE_FAMILY = 1;
|
||||
};
|
||||
name = "Dev-release-xhj";
|
||||
|
||||
@ -3,13 +3,20 @@
|
||||
#import "GeneratedPluginRegistrant.h"
|
||||
#import "CommonDefine.h"
|
||||
#import "XSFlutterManager.h"
|
||||
#import "Runner-Swift.h"
|
||||
|
||||
#import <UserNotifications/UserNotifications.h>
|
||||
#import <PushKit/PushKit.h>
|
||||
#import <CallKit/CallKit.h>
|
||||
// #import <UMCommon/UMCommon.h>
|
||||
|
||||
|
||||
@interface AppDelegate()
|
||||
@interface AppDelegate()<PKPushRegistryDelegate, CXProviderDelegate>
|
||||
@property (nonatomic, strong) FlutterMethodChannel *methodChannel;
|
||||
@property (nonatomic, strong) CXProvider *callKitProvider;
|
||||
@property (nonatomic, copy) NSString *pendingCallKitEvent; // 缓存未处理的CallKit事件
|
||||
@property (nonatomic, strong) NSUUID *lastCallUUID;
|
||||
@property (nonatomic, copy) NSString *voipTokenString; // + 新增:缓存VoIP Token
|
||||
|
||||
@end
|
||||
|
||||
@ -34,11 +41,60 @@
|
||||
}
|
||||
[JPUSHService registerForRemoteNotificationConfig:entity delegate:self];
|
||||
|
||||
// 注册VoIP推送
|
||||
PKPushRegistry *voipRegistry = [[PKPushRegistry alloc] initWithQueue:dispatch_get_main_queue()];
|
||||
voipRegistry.delegate = self;
|
||||
voipRegistry.desiredPushTypes = [NSSet setWithObject:PKPushTypeVoIP];
|
||||
|
||||
XSFlutterManager *VC = [[XSFlutterManager alloc] init];
|
||||
self.window.rootViewController = VC;
|
||||
[self.window makeKeyAndVisible];
|
||||
|
||||
// 初始化FlutterMethodChannel
|
||||
FlutterViewController *controller = (FlutterViewController *)self.window.rootViewController;
|
||||
self.methodChannel = [FlutterMethodChannel methodChannelWithName:@"com.starlock/callkit" binaryMessenger:controller.binaryMessenger];
|
||||
// 注册拉取pending事件方法
|
||||
__weak typeof(self) weakSelf = self;
|
||||
[self.methodChannel setMethodCallHandler:^(FlutterMethodCall *call, FlutterResult result) {
|
||||
if ([call.method isEqualToString:@"get_pending_event"]) {
|
||||
if (weakSelf.pendingCallKitEvent) {
|
||||
result(weakSelf.pendingCallKitEvent);
|
||||
weakSelf.pendingCallKitEvent = nil;
|
||||
} else {
|
||||
result(nil);
|
||||
}
|
||||
} else if ([call.method isEqualToString:@"end_call"]) {
|
||||
NSLog(@"[CallKit] 收到Flutter端结束通话请求");
|
||||
// 结束CallKit通话
|
||||
// 这里只能结束最近一次来电,需保存UUID
|
||||
if (weakSelf.lastCallUUID) {
|
||||
CXCallEndedReason reason = CXCallEndedReasonRemoteEnded;
|
||||
[weakSelf.callKitProvider reportCallWithUUID:weakSelf.lastCallUUID endedAtDate:[NSDate date] reason:reason];
|
||||
weakSelf.lastCallUUID = nil;
|
||||
result(@"ok");
|
||||
} else {
|
||||
NSLog(@"[CallKit] 无有效UUID,无法结束通话");
|
||||
result(@"no_call");
|
||||
}
|
||||
} else if ([call.method isEqualToString:@"get_voip_token"]) { // + 新增
|
||||
if (weakSelf.voipTokenString) {
|
||||
result(weakSelf.voipTokenString);
|
||||
} else {
|
||||
result(nil);
|
||||
}
|
||||
} else {
|
||||
result(FlutterMethodNotImplemented);
|
||||
}
|
||||
}];
|
||||
// 初始化CallKit Provider(仅国外包)
|
||||
#if USE_CALLKIT
|
||||
CXProviderConfiguration *providerConfiguration = [[CXProviderConfiguration alloc] initWithLocalizedName:@"来电"];
|
||||
providerConfiguration.supportsVideo = NO;
|
||||
providerConfiguration.maximumCallsPerCallGroup = 1;
|
||||
self.callKitProvider = [[CXProvider alloc] initWithConfiguration:providerConfiguration];
|
||||
[self.callKitProvider setDelegate:self queue:nil];
|
||||
#endif
|
||||
|
||||
return YES;
|
||||
}
|
||||
|
||||
@ -168,6 +224,73 @@
|
||||
[JPUSHService handleRemoteNotification:userInfo];
|
||||
}
|
||||
|
||||
#pragma mark - PKPushRegistryDelegate
|
||||
// 获取VoIP Token
|
||||
- (void)pushRegistry:(PKPushRegistry *)registry didUpdatePushCredentials:(PKPushCredentials *)credentials forType:(PKPushType)type {
|
||||
if ([type isEqualToString:PKPushTypeVoIP]) {
|
||||
const unsigned char *tokenBytes = credentials.token.bytes;
|
||||
NSMutableString *tokenString = [NSMutableString string];
|
||||
for (NSInteger i = 0; i < credentials.token.length; i++) {
|
||||
[tokenString appendFormat:@"%02x", tokenBytes[i]];
|
||||
}
|
||||
NSLog(@"[VoIP] didUpdatePushCredentials, token: %@", tokenString);
|
||||
self.voipTokenString = tokenString; // + 缓存token
|
||||
if (self.methodChannel) {
|
||||
[self.methodChannel invokeMethod:@"voip_token" arguments:tokenString];
|
||||
}
|
||||
// 若Flutter未ready,Flutter端可通过get_voip_token拉取
|
||||
}
|
||||
}
|
||||
// 收到VoIP推送
|
||||
- (void)pushRegistry:(PKPushRegistry *)registry didReceiveIncomingPushWithPayload:(PKPushPayload *)payload forType:(PKPushType)type withCompletionHandler:(void (^)(void))completion {
|
||||
if ([type isEqualToString:PKPushTypeVoIP]) {
|
||||
NSLog(@"[VoIP] didReceiveIncomingPushWithPayload: %@", payload.dictionaryPayload);
|
||||
#if USE_CALLKIT
|
||||
// 国外环境,直接用CallKit弹窗
|
||||
NSString *callerName = @"来电"; // 可根据payload内容自定义
|
||||
// 复用已初始化的provider
|
||||
CXCallUpdate *update = [[CXCallUpdate alloc] init];
|
||||
update.remoteHandle = [[CXHandle alloc] initWithType:CXHandleTypeGeneric value:callerName];
|
||||
update.hasVideo = NO;
|
||||
NSUUID *callUUID = [NSUUID UUID];
|
||||
self.lastCallUUID = callUUID;
|
||||
[self.callKitProvider reportNewIncomingCallWithUUID:callUUID update:update completion:^(NSError * _Nullable error) {
|
||||
if (error) {
|
||||
NSLog(@"CallKit error: %@", error);
|
||||
}
|
||||
}];
|
||||
#else
|
||||
// 国内环境,使用LiveCommunicationKit弹窗
|
||||
UIViewController *rootVC = [UIApplication sharedApplication].delegate.window.rootViewController;
|
||||
NSString *callerName = @"来电"; // 可根据payload内容自定义
|
||||
[LCKBridge presentCallInterfaceFromRootVC:rootVC callerName:callerName];
|
||||
#endif
|
||||
}
|
||||
if (completion) {
|
||||
completion();
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - CXProviderDelegate
|
||||
// 用户点击"接听"
|
||||
- (void)provider:(CXProvider *)provider performAnswerCallAction:(CXAnswerCallAction *)action {
|
||||
NSLog(@"[CallKit] 用户接听来电");
|
||||
if (self.methodChannel) {
|
||||
[self.methodChannel invokeMethod:@"callkit_answered" arguments:nil];
|
||||
} else {
|
||||
self.pendingCallKitEvent = @"callkit_answered";
|
||||
}
|
||||
[action fulfill];
|
||||
}
|
||||
// 用户点击"拒绝"或挂断
|
||||
- (void)provider:(CXProvider *)provider performEndCallAction:(CXEndCallAction *)action {
|
||||
NSLog(@"[CallKit] 用户拒绝/挂断来电");
|
||||
if (self.methodChannel) {
|
||||
[self.methodChannel invokeMethod:@"callkit_declined" arguments:nil];
|
||||
} else {
|
||||
self.pendingCallKitEvent = @"callkit_declined";
|
||||
}
|
||||
[action fulfill];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@ -2,8 +2,6 @@
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
<false/>
|
||||
<key>CADisableMinimumFrameDurationOnPhone</key>
|
||||
<true/>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
@ -53,6 +51,8 @@
|
||||
</array>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>$(FLUTTER_BUILD_NUMBER)</string>
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
<false/>
|
||||
<key>LSApplicationQueriesSchemes</key>
|
||||
<array>
|
||||
<string>weixin</string>
|
||||
@ -108,6 +108,7 @@
|
||||
<key>UIBackgroundModes</key>
|
||||
<array>
|
||||
<string>remote-notification</string>
|
||||
<string>voip</string>
|
||||
</array>
|
||||
<key>UIFileSharingEnabled</key>
|
||||
<true/>
|
||||
|
||||
60
ios/Runner/LCKBridge.swift
Normal file
@ -0,0 +1,60 @@
|
||||
import Foundation
|
||||
import UIKit
|
||||
#if USE_CALLKIT
|
||||
import CallKit
|
||||
#endif
|
||||
import LiveCommunicationKit
|
||||
|
||||
@objc(LCKBridge)
|
||||
class LCKBridge: NSObject {
|
||||
// CallKit来电弹窗
|
||||
@objc(presentCallInterfaceWithCallKit:)
|
||||
class func presentCallInterfaceWithCallKit(_ callerName: NSString) {
|
||||
#if USE_CALLKIT
|
||||
let providerConfiguration = CXProviderConfiguration(localizedName: callerName as String)
|
||||
providerConfiguration.supportsVideo = false
|
||||
providerConfiguration.maximumCallsPerCallGroup = 1
|
||||
let provider = CXProvider(configuration: providerConfiguration)
|
||||
let update = CXCallUpdate()
|
||||
update.remoteHandle = CXHandle(type: .generic, value: callerName as String)
|
||||
update.hasVideo = false
|
||||
provider.setDelegate(nil, queue: nil)
|
||||
provider.reportNewIncomingCall(with: UUID(), update: update) { error in
|
||||
if let error = error {
|
||||
print("CallKit来电弹窗失败: \(error.localizedDescription)")
|
||||
} else {
|
||||
print("CallKit来电弹窗成功")
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
// LiveCommunicationKit来电弹窗
|
||||
@objc(presentCallInterfaceFromRootVC:callerName:)
|
||||
class func presentCallInterfaceFromRootVC(_ rootVC: UIViewController, callerName: NSString) {
|
||||
#if !USE_CALLKIT
|
||||
if #available(iOS 17.4, *) {
|
||||
// 配置ConversationManager
|
||||
let config = ConversationManager.Configuration(
|
||||
ringtoneName: "notes_of_the_optimistic",
|
||||
iconTemplateImageData: UIImage(named: "AppIcon")?.pngData(),
|
||||
maximumConversationGroups: 1,
|
||||
maximumConversationsPerConversationGroup: 1,
|
||||
includesConversationInRecents: false,
|
||||
supportsVideo: false,
|
||||
supportedHandleTypes: [.generic, .phoneNumber, .emailAddress]
|
||||
)
|
||||
let manager = ConversationManager(configuration: config)
|
||||
let local = Handle(type: .generic, value: callerName as String, displayName: callerName as String)
|
||||
let update = Conversation.Update(localMember: local, members: [local], activeRemoteMembers: [local])
|
||||
Task {
|
||||
do {
|
||||
try await manager.reportNewIncomingConversation(uuid: UUID(), update: update)
|
||||
print("成功报告新来电")
|
||||
} catch {
|
||||
print("报告新来电失败: \(error.localizedDescription)")
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@ -3,7 +3,7 @@
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>aps-environment</key>
|
||||
<string>development</string>
|
||||
<string>production</string>
|
||||
<key>com.apple.developer.associated-domains</key>
|
||||
<array>
|
||||
<string>applinks:lock.skychip.top</string>
|
||||
|
||||
@ -2,8 +2,6 @@
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
<false/>
|
||||
<key>CADisableMinimumFrameDurationOnPhone</key>
|
||||
<true/>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
@ -53,6 +51,8 @@
|
||||
</array>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>$(FLUTTER_BUILD_NUMBER)</string>
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
<false/>
|
||||
<key>LSApplicationQueriesSchemes</key>
|
||||
<array>
|
||||
<string>weixin</string>
|
||||
@ -86,6 +86,8 @@
|
||||
<string>应用请求相机,以便于拍摄照片,用于头像上传及人脸认证</string>
|
||||
<key>NSContactsUsageDescription</key>
|
||||
<string>Reason we need access to the contact list</string>
|
||||
<key>NSFileProtectionKey</key>
|
||||
<string>NSFileProtectionCompleteUntilFirstUserAuthentication</string>
|
||||
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
|
||||
<string>我们需要访问您的位置信息,以便更加精准的扫描到所在位置的蓝牙锁设备</string>
|
||||
<key>NSLocationAlwaysUsageDescription</key>
|
||||
@ -106,7 +108,10 @@
|
||||
<key>UIBackgroundModes</key>
|
||||
<array>
|
||||
<string>remote-notification</string>
|
||||
<string>voip</string>
|
||||
</array>
|
||||
<key>UIFileSharingEnabled</key>
|
||||
<true/>
|
||||
<key>UILaunchStoryboardName</key>
|
||||
<string>skyLaunchScreen</string>
|
||||
<key>UIMainStoryboardFile</key>
|
||||
@ -123,10 +128,6 @@
|
||||
</array>
|
||||
<key>UIViewControllerBasedStatusBarAppearance</key>
|
||||
<false/>
|
||||
<key>NSFileProtectionKey</key>
|
||||
<string>NSFileProtectionCompleteUntilFirstUserAuthentication</string>
|
||||
<key>UIFileSharingEnabled</key>
|
||||
<true/>
|
||||
<key>io.flutter.embedded_views_preview</key>
|
||||
<true/>
|
||||
</dict>
|
||||
|
||||
@ -2,8 +2,6 @@
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
<false/>
|
||||
<key>CADisableMinimumFrameDurationOnPhone</key>
|
||||
<true/>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
@ -53,6 +51,8 @@
|
||||
</array>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>$(FLUTTER_BUILD_NUMBER)</string>
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
<false/>
|
||||
<key>LSApplicationQueriesSchemes</key>
|
||||
<array>
|
||||
<string>weixin</string>
|
||||
@ -108,6 +108,7 @@
|
||||
<key>UIBackgroundModes</key>
|
||||
<array>
|
||||
<string>remote-notification</string>
|
||||
<string>voip</string>
|
||||
</array>
|
||||
<key>UIFileSharingEnabled</key>
|
||||
<true/>
|
||||
|
||||
17
ios/build.sh
@ -9,19 +9,20 @@ echo "GITLAB_WORKSPACE: ${CI_PROJECT_DIR}"
|
||||
cd ${CI_PROJECT_DIR}/ios
|
||||
#bundle exec pod install
|
||||
echo "ENV_BUILD_TAG:${ENV_BUILD_TAG},ENV_BUILD_BRANCH:${ENV_BUILD_BRANCH}"
|
||||
regex='^v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z]+\.[0-9]+)?$'
|
||||
if [[ "${ENV_BUILD_BRANCH}" == "canary_release" ]]; then
|
||||
# 只支持 v1.2.3_sky 这种tag格式
|
||||
regex='^v[0-9]+\.[0-9]+\.[0-9]+_sky$'
|
||||
if [[ "${ENV_BUILD_BRANCH}" == "canary_release_sky" ]]; then
|
||||
echo "===build canary_release: ${NEXT_VERSION}"
|
||||
export ENV_BUILD_TAG=${NEXT_VERSION}
|
||||
bundle exec fastlane release_ipa flavor:xhj --verbose
|
||||
bundle exec fastlane release_ipa flavor:sky --verbose
|
||||
elif [[ $ENV_BUILD_TAG =~ $regex ]]; then
|
||||
echo "===build release===$ENV_BUILD_TAG"
|
||||
bundle exec fastlane release_ipa flavor:xhj --verbose
|
||||
elif [[ "${ENV_BUILD_BRANCH}" == "develop" ]]; then
|
||||
bundle exec fastlane release_ipa flavor:sky --verbose
|
||||
elif [[ "${ENV_BUILD_BRANCH}" == "develop_sky" ]]; then
|
||||
echo "===build dev===${NEXT_VERSION}"
|
||||
bundle exec fastlane beta flavor:xhj env:Dev --verbose
|
||||
elif [[ "${ENV_BUILD_BRANCH}" == "release" ]] || [[ "${ENV_BUILD_BRANCH}" == "feat_devops" ]] ; then
|
||||
bundle exec fastlane beta flavor:sky env:Dev --verbose
|
||||
elif [[ "${ENV_BUILD_BRANCH}" == "release_sky" || "${ENV_BUILD_BRANCH}" == "feat_devops_sky" ]] ; then
|
||||
echo "===build pre===${NEXT_VERSION}"
|
||||
bundle exec fastlane beta flavor:xhj env:Pre --verbose
|
||||
bundle exec fastlane beta flavor:sky env:Pre --verbose
|
||||
fi
|
||||
exit 0
|
||||
@ -17,22 +17,13 @@ default_platform(:ios)
|
||||
|
||||
# setup_travis
|
||||
|
||||
# --- xhj Const ---
|
||||
$signing_identity_xhj_distribution = 'iPhone Distribution: Shenzhen Xinhongjia Electronics Co., Ltd. (P8997RW3V8)'
|
||||
$app_identifier = 'xhj'
|
||||
$provisioning_name_adhoc = 'StarApt Project Mobile Ad Hoc'
|
||||
$provisioning_name_distribution = 'StarApt Project Mobile Distribution'
|
||||
$gym_config_sky_preview = 'Preview-xhj'
|
||||
$gym_config_sky_release = 'Release'
|
||||
|
||||
# --- sky Const ---
|
||||
$signing_identity_sky_distribution = 'iPhone Distribution: Shenzhen Xinhongjia Electronics Co., Ltd. (P8997RW3V8)'
|
||||
$signing_identity_distribution = 'iPhone Distribution: Shenzhen Xinhongjia Electronics Co., Ltd. (P8997RW3V8)'
|
||||
$app_identifier = 'sky'
|
||||
$provisioning_name_adhoc = 'StarApt Project Mobile Ad Hoc'
|
||||
$provisioning_name_distribution = 'StarApt Project Mobile Distribution'
|
||||
$gym_config_sky_preview = 'Preview-sky'
|
||||
$gym_config_sky_release = 'Release'
|
||||
|
||||
$gym_config_preview = 'Preview-sky'
|
||||
$gym_config_release = 'Release'
|
||||
|
||||
# --- common Const ---
|
||||
$match_type_adhoc = 'adhoc'
|
||||
@ -72,35 +63,32 @@ platform :ios do
|
||||
|
||||
desc "Build & Deliver to Pgy"
|
||||
lane :beta do |options|
|
||||
flavor = options[:flavor]
|
||||
env = options[:env]
|
||||
UI.user_error!("flavor is required") unless flavor
|
||||
UI.user_error!("env is required") unless env
|
||||
print_log "build #{flavor} on #{env}"
|
||||
print_log "build sky on #{env}"
|
||||
build_number = Time.now.strftime("%Y%m%d%H%M")
|
||||
print_log "Build Commits #{build_number}"
|
||||
build_version = $next_version # Time.now.strftime("%Y%m%d%H%M%S")
|
||||
build_version = $next_version
|
||||
print_log "build_version #{build_version}"
|
||||
commit_hash = last_git_commit
|
||||
short_hash = commit_hash[:abbreviated_commit_hash]
|
||||
print_log "last_git_commit_short_hash #{short_hash}"
|
||||
remove_zone_pre_build(zone:"com")
|
||||
Dir.chdir "../.." do
|
||||
sh("flutter","clean")
|
||||
sh("flutter","pub","get")
|
||||
end
|
||||
Dir.chdir ".." do
|
||||
#sh("bundle", "exec" ,"pod", "install")
|
||||
sh("pod", "install")
|
||||
end
|
||||
Dir.chdir "../.." do
|
||||
sh("flutter", "build", "ios", "--no-tree-shake-icons", "--no-codesign", "--release", "--flavor", "#{flavor}", "-t", "lib/main_#{flavor}_#{env}.dart", "--build-number=#{build_number}", "--build-name=#{build_version}")
|
||||
sh("flutter", "build", "ios", "--no-tree-shake-icons", "--no-codesign", "--release", "--flavor", "sky", "-t", "lib/main_sky_#{env}.dart", "--build-number=#{build_number}", "--build-name=#{build_version}")
|
||||
end
|
||||
#set_bundle_short_version('./Runner/Info.plist', $current_branch)
|
||||
gym_scheme_preview="#{flavor}"
|
||||
gym_scheme_preview="sky"
|
||||
print_log "gym_scheme_preview #{gym_scheme_preview}"
|
||||
gym_configuration = "#{env}-release-#{flavor}"
|
||||
gym_configuration = "#{env}-release-sky"
|
||||
print_log "gym_configuration #{gym_configuration}"
|
||||
ipa_default_filename = "starlock-#{flavor}-preview-#{build_version}.ipa"
|
||||
ipa_default_filename = "starlock-sky-preview-#{build_version}.ipa"
|
||||
print_log "ipa_default_filename #{ipa_default_filename}"
|
||||
gym(
|
||||
scheme: gym_scheme_preview,
|
||||
@ -109,12 +97,11 @@ platform :ios do
|
||||
output_directory: $path_ipa_output_dir,
|
||||
output_name: ipa_default_filename,
|
||||
export_method: "ad-hoc",
|
||||
xcargs: "GCC_PREPROCESSOR_DEFINITIONS='USE_CALLKIT=1 $(inherited)'",
|
||||
export_options: {
|
||||
provisioningProfiles: {
|
||||
"com.xhjcn.lock.dev" => "Adhoc_com.xhjcn.lock.dev.mobileprovision",
|
||||
"com.xhjcn.lock.pre" => "Adhoc_com.xhjcn.lock.pre.mobileprovision",
|
||||
"com.skychip.lock.dev" => "Adhoc_com.skychip.lock.dev.mobileprovision",
|
||||
"com.skychip.lock.pre" => "Adhoc_com.skychip.lock.pre.mobileprovision",
|
||||
"com.skychip.lock.pre" => "Adhoc_com.skychip.lock.pre.mobileprovision"
|
||||
}
|
||||
}
|
||||
)
|
||||
@ -128,9 +115,7 @@ platform :ios do
|
||||
|
||||
desc "Build & Deliver to App Store Connect"
|
||||
lane :release_ipa do |options|
|
||||
flavor = options[:flavor]
|
||||
UI.user_error!("flavor is required") unless flavor
|
||||
print_log "build flavor: #{flavor}"
|
||||
print_log "build sky"
|
||||
build_number = Time.now.strftime("%Y%m%d%H%M")
|
||||
print_log "Build Commits #{build_number}"
|
||||
build_version = $current_tag.match(/^v(\d+\.\d+\.\d+)/).captures[0]
|
||||
@ -143,17 +128,16 @@ platform :ios do
|
||||
sh("flutter","pub","get")
|
||||
end
|
||||
Dir.chdir ".." do
|
||||
#sh("bundle", "exec" ,"pod", "install")
|
||||
sh("pod", "install")
|
||||
end
|
||||
Dir.chdir "../.." do
|
||||
sh("flutter", "build", "ios", "--no-tree-shake-icons", "--no-codesign", "--release", "--flavor", "#{flavor}", "-t", "lib/main_#{flavor}_lite.dart", "--build-number=#{build_number}", "--build-name=#{build_version}")
|
||||
sh("flutter", "build", "ios", "--no-tree-shake-icons", "--no-codesign", "--release", "--flavor", "sky", "-t", "lib/main_sky_lite.dart", "--build-number=#{build_number}", "--build-name=#{build_version}")
|
||||
end
|
||||
gym_scheme_release="#{flavor}"
|
||||
gym_scheme_release="sky"
|
||||
print_log "gym_scheme_release #{gym_scheme_release}"
|
||||
gym_configuration = "Release-#{flavor}"
|
||||
gym_configuration = "Release-sky"
|
||||
print_log "gym_configuration #{gym_configuration}"
|
||||
ipa_default_filename = "starlock-#{flavor}-release-"+$current_tag+".ipa"
|
||||
ipa_default_filename = "starlock-sky-release-"+$current_tag+".ipa"
|
||||
print_log "ipa_default_filename #{ipa_default_filename}"
|
||||
gym(
|
||||
scheme: gym_scheme_release,
|
||||
@ -162,14 +146,14 @@ platform :ios do
|
||||
output_directory: $path_ipa_output_dir,
|
||||
output_name: ipa_default_filename,
|
||||
export_method: "app-store",
|
||||
xcargs: "GCC_PREPROCESSOR_DEFINITIONS='USE_CALLKIT=1 $(inherited)'",
|
||||
export_options: {
|
||||
provisioningProfiles: {
|
||||
"com.xhjcn.lock" => "Appstore_com.xhjcn.lock.mobileprovision",
|
||||
"com.skychip.lock" => "Appstore_com.skychip.lock.mobileprovision",
|
||||
"com.skychip.lock" => "Appstore_com.skychip.lock.mobileprovision"
|
||||
}
|
||||
}
|
||||
)
|
||||
auth_key_prefix=flavor.upcase
|
||||
auth_key_prefix="SKY"
|
||||
print_log "auth_key_prefix #{auth_key_prefix}"
|
||||
api_key = app_store_connect_api_key(
|
||||
key_id: ENV["#{auth_key_prefix}_APPLE_AUTH_KEY_ID"],
|
||||
|
||||
2363
lan/lan_ar.json
@ -1065,7 +1065,7 @@
|
||||
"波兰语": "Polski",
|
||||
"斯洛伐克语": "Slovenčina",
|
||||
"捷克语": "Čeština",
|
||||
"希腊语": "Ελληνικά",
|
||||
"希腊语": "ελληνικά",
|
||||
"希伯来语": "עברית",
|
||||
"塞尔维亚语": "Српски",
|
||||
"土耳其语": "Türkçe",
|
||||
@ -1078,8 +1078,11 @@
|
||||
"印度尼西亚语": "Bahasa Indonesia",
|
||||
"芬兰语": "Suomi",
|
||||
"丹麦语": "Dansk",
|
||||
"印地语": "हिंदीName",
|
||||
"印地语": "हिंदी",
|
||||
"乌尔都语": "اوردو",
|
||||
"亚美尼亚语": "Հայերեն",
|
||||
"格鲁吉亚语": "ქართული",
|
||||
"巴西葡萄牙语": "Português do Brasil",
|
||||
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
|
||||
"繁体中文(中国香港)": "繁體中文(中國香港)",
|
||||
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "След нулиране, метакарпалните вени на ключалката ще бъдат изтрити. Сигурен ли сте, че искате да се възстанови?",
|
||||
@ -1152,40 +1155,24 @@
|
||||
"3.安装Google Home APP,点击左上角的加号按钮": "3. Инсталирайте приложението Google Home и щракнете върху бутона плюс в горния ляв ъгъл",
|
||||
"暂无最新记录": "В момента няма най-новите налични записи",
|
||||
"请将手机切换至2.4G WiFi进行手动连接": "Моля, превключете телефона си на 2.4G WiFi за ръчно свързване",
|
||||
"设备重置": "Нулиране на устройството",
|
||||
"请确认设备已重置": "Моля, потвърдете, че устройството е нулирано",
|
||||
"添加设备前,请确保设备已重置为出厂状态。": "Преди да добавите устройството, уверете се, че е нулирано до фабричните настройки.",
|
||||
"设备已重置": "Устройството е нулирано",
|
||||
"加不了锁常见问题": "Често срещани проблеми при добавяне на ключалка",
|
||||
"蓝牙未开启或未授权": "Bluetooth не е включен или не е разрешен",
|
||||
"请确保手机蓝牙已开启,并授权App使用蓝牙权限。": "Уверете се, че Bluetooth на телефона е включен и приложението има разрешение.",
|
||||
"检查手机设置中的蓝牙权限,确保已授权给App。": "Проверете разрешенията за Bluetooth в настройките на телефона и се уверете, че приложението има разрешение.",
|
||||
"未重置锁": "Ключалката не е нулирана",
|
||||
"请先将锁重置为出厂状态,重置方法详见上一步指引。": "Първо нулирайте ключалката до фабричните настройки, вижте предишната стъпка за метода.",
|
||||
"找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。": "Намерете бутона за нулиране на ключалката и го задръжте, докато чуете звук или видите мигаща светлина.",
|
||||
"锁电量过低": "Батерията на ключалката е ниска",
|
||||
"锁电量过低可能导致无法正常连接和添加。": "Ниската батерия може да доведе до проблеми с връзката и добавянето.",
|
||||
"请更换电池后重试。": "Сменете батерията и опитайте отново.",
|
||||
"距离过远": "Разстоянието е твърде голямо",
|
||||
"请确保手机与锁的距离在有效范围内。": "Уверете се, че разстоянието между телефона и ключалката е в допустимите граници.",
|
||||
"将手机靠近锁,距离保持在1米以内。": "Дръжте телефона близо до ключалката, разстоянието да е под 1 метър.",
|
||||
"锁已被其他用户添加": "Ключалката е добавена от друг потребител",
|
||||
"如果锁已被其他用户添加,需要先解除绑定。": "Ако ключалката е добавена от друг, първо трябва да бъде разкачена.",
|
||||
"请联系锁的管理员解除绑定,或使用管理员权限重置锁。": "Свържете се с администратора на ключалката или използвайте администраторски права за нулиране.",
|
||||
"使用小程序": "Използвайте мини-програма",
|
||||
"如果App无法正常添加锁,可以尝试使用小程序版本。": "Ако приложението не може да добави ключалката, опитайте с мини-програмата.",
|
||||
"打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。": "Отворете WeChat, потърсете '星星锁Lite' мини-програма и опитайте да добавите ключалката.",
|
||||
"尝试升级固件": "Опитайте актуализация на фърмуера",
|
||||
"升级说明": "Инструкции за актуализация",
|
||||
"如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:": "Ако горните методи не помогнат, опитайте актуализация на фърмуера на ключалката. Преди актуализацията се уверете:",
|
||||
"升级注意事项": "Батерията на ключалката е достатъчна\n• Получен е правилният фърмуер файл\n• Не прекъсвайте връзката по време на актуализацията",
|
||||
"找不到锁?点此查看。": "Не можете да намерите ключалката? Кликнете тук.",
|
||||
"常见问题": "Често задавани въпроси",
|
||||
"固件升级": "Актуализация на фърмуера",
|
||||
"固件升级描述": "Кликнете върху бутона \"Връщане към настройките на устройството\" в долния десен ъгъл, за да се върнете към страницата с настройки на устройството и да се опитате да актуализирате фърмуера.",
|
||||
"邮箱地址必须包含@符号": "Адресът на електронната поща трябва да съдържа '@'.",
|
||||
"手机号只能包含数字": "Телефонният номер може да съдържа само цифри",
|
||||
"重置方法请查阅设备说明书": "Проверете инструкциите за устройството",
|
||||
"我已重置,继续添加": "Нулирането е успешно, продължете",
|
||||
"添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。": "Преди да добавите устройството, уверете се, че е нулирано до фабричните настройки. След нулирането всички данни за потребителите, включително отпечатъци от пръсти, пароли и карти, ще бъдат изтрити."
|
||||
"语音包设置": "Настройки на гласовите пакети",
|
||||
"第三方平台设置": "Настройки на платформи на трети страни",
|
||||
"涂鸦智能": "Tuya Smart",
|
||||
"锁语音包设置": "Заключване на настройките на гласовия пакет",
|
||||
"(中国台湾)": "(中国台湾)",
|
||||
"男声": "Мъжки глас",
|
||||
"女声": "Женски глас",
|
||||
"您的图像和视频数据仅保留": "Данните ви за изображения и видеоклипове се запазват само",
|
||||
"后图像和视频数据将会失效,开通": "След това данните за изображението и видеото ще бъдат невалидни и активирани",
|
||||
"云存会员": "Членство в Cloud Storage",
|
||||
"服务,图像视频信息随心存!": "Информацията за обслужване, изображения и видео са във вашето сърце!",
|
||||
"图像": "изображение",
|
||||
"视频": "Видео",
|
||||
"当前国家不支持手机验证码注册,请使用邮箱进行注册": "В момента страната не поддържа регистрация на код за потвърждение на мобилен телефон, моля, използвайте имейл адреса си, за да се регистрирате",
|
||||
"注:": "примечание:",
|
||||
"必需在开始时间24小时内使用一次,否则将失效": "Его необходимо использовать один раз в течение 24 часов с момента начала, иначе он будет недействительным.",
|
||||
"这是单次密码,只能使用一次": "Это однократный пароль, который можно использовать только один раз.",
|
||||
"您好": "Здравствуйте",
|
||||
"您的开门密码是": "Ваш пароль",
|
||||
"开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标": "При открытии замка сначала активируйте клавиатуру замка, затем введите пароль, чтобы закончить #, # клавиша в правом нижнем углу клавиатуры, возможно, другие значки"
|
||||
}
|
||||
@ -83,8 +83,8 @@
|
||||
"上班时间": "সিস্টেম",
|
||||
"下班时间": "ক্লাসিং",
|
||||
"本周": "ইঙ্গোনেক",
|
||||
"单休": "এক-ডে-ওয়েওয়েন্ডName",
|
||||
"双休": "টেটো-ডেওওয়েলেন্ডName",
|
||||
"单休": "এক-ডে-ওয়েওয়েন্ড",
|
||||
"双休": "টেটো-ডেওওয়েলেন্ড",
|
||||
"单双休": "এক-টেটো-ডে-ওওয়েডেন্ড",
|
||||
"年": "ইয়ার",
|
||||
"月": "থ",
|
||||
@ -104,7 +104,7 @@
|
||||
"门磁": "ডোরনেসিসর",
|
||||
"自动闭锁": "স্বয়ংক্রিয় লক",
|
||||
"锁声音": "লক",
|
||||
"防撬报警": "ওয়েটperalertGenericName",
|
||||
"防撬报警": "ওয়েটperalertGeneric",
|
||||
"重置键": "ইউনিটন",
|
||||
"锁时间": "লকক",
|
||||
"诊断": "অ্যারিওনস",
|
||||
@ -237,7 +237,7 @@
|
||||
"搜索所有类型的锁": "স্যাকানাল্ডসপিসফক্স",
|
||||
"门锁": "ডোর-লক",
|
||||
"挂锁": "আনলক",
|
||||
"保险箱锁": "মাইন্টfelockGenericName",
|
||||
"保险箱锁": "মাইন্টfelockGeneric",
|
||||
"智能门禁": "লিজেন্টেসেস কন্ট্রোল",
|
||||
"车位锁": "কিকিংলক",
|
||||
"摸亮触摸屏": "টুকরাইকিউট্ট",
|
||||
@ -343,7 +343,7 @@
|
||||
"卡": "বিকশিত",
|
||||
"指纹": "ডিগ্রিমপ্রিন",
|
||||
"人脸": "ফেস",
|
||||
"配件商城": "লককName",
|
||||
"配件商城": "লকক",
|
||||
"公司名称": "অ্যাকম্পেনিনাম",
|
||||
"请输入公司名字": "কনস্টার অ্যাকম্পেনিনাম",
|
||||
"提示": "চিন্ট",
|
||||
@ -579,7 +579,7 @@
|
||||
"请输入wifi名称": "ক্যাপিলাইজ",
|
||||
"虹膜": "নিয়",
|
||||
"手掌": "Pp",
|
||||
"商城": "XmallName",
|
||||
"商城": "Xmall",
|
||||
"我的": "My",
|
||||
"微信公众号推送": "ইয়াক",
|
||||
"蓝牙": "নিকট্রিয়াথ",
|
||||
@ -710,7 +710,7 @@
|
||||
"传输期间请勿离开当前页面": "নির্দিষ্ট নেতৃত্বাধীন",
|
||||
"机型": "ডাইলস",
|
||||
"硬件版本": "ডার্ওয়ারভেন্স",
|
||||
"固件版本": "FmwareversionName",
|
||||
"固件版本": "Fmwareversion",
|
||||
"手动升级": "ধুয়াল ফলাগ্রাড",
|
||||
"设备连接中...": "প্রাচীন...",
|
||||
"未避免异常情况,请在门打开时升级": "সাউন oidযোগ্য exceptionstionsণনশনস, ক্যাপিলাইস",
|
||||
@ -897,7 +897,7 @@
|
||||
"配网成功": "নকর্ক ওয়ার্ক",
|
||||
"配网失败": "নবক ওয়ার্ক",
|
||||
"该锁的无线键盘都将被删除": "অলসবিহীন",
|
||||
"实时画面": "রিয়েল-টাইমপেসিচারName",
|
||||
"实时画面": "রিয়েল-টাইমপেসিচার",
|
||||
"适合门口较为安全的环境。": "ভিডিওটেবল ফরফরাসী ইলেই মাইউইভেনমেন্টের দরজা।",
|
||||
"仅发生特定事件才录像,并可查看实时画面。": "কেবলমাত্র আলোচনার কোর্সডন্ডথের রিয়েল-টাইমপিসিচার হয়ত।",
|
||||
"一般情况下,满电可使用7-8个月": "আন্ডারমালবিক",
|
||||
@ -996,7 +996,7 @@
|
||||
"类型:自定义-永久": "টাইপ:",
|
||||
"实时播放": "রিয়েল-টাইমপিপ্লেব্যাক",
|
||||
"点击对讲": "ক্লিক্টোকম",
|
||||
"长按开锁": "লংপ্রেসtocunlockGenericName",
|
||||
"长按开锁": "লংপ্রেসtocunlockGeneric",
|
||||
"接听失败": "ডিফাইরেডটুআনসাইওয়ার",
|
||||
"请在锁设置中开启远程开锁": "ক্যাপিলাইজ এসব... ...সংকলকিং",
|
||||
"接听": "অ্যানসাওয়ার",
|
||||
@ -1015,7 +1015,7 @@
|
||||
"呼叫提醒": "ক্যান্সাল",
|
||||
"收到来自": "আইভেদ্রোম",
|
||||
"锁的呼叫": "লোককল",
|
||||
"加载数据中": "ব্লুডিং-ডাটাName",
|
||||
"加载数据中": "ব্লুডিং-ডাটা",
|
||||
"搜索所有锁类型": "কোআরসার্লককপিস",
|
||||
"锁电量更新时间": "লক",
|
||||
"1月": "জিনা",
|
||||
@ -1031,7 +1031,7 @@
|
||||
"11月": "নভ",
|
||||
"12月": "ব্লিক",
|
||||
"热门城市": "আই",
|
||||
"导出锁数据": "পোর্টlockdataName",
|
||||
"导出锁数据": "পোর্টlockdata",
|
||||
"一键开锁": "এক-চ্যাক্লাক",
|
||||
"已开通": "উত্স",
|
||||
"编辑员工": "এডিটওফ",
|
||||
@ -1065,7 +1065,7 @@
|
||||
"波兰语": "Polski",
|
||||
"斯洛伐克语": "Slovenčina",
|
||||
"捷克语": "Čeština",
|
||||
"希腊语": "Ελληνικά",
|
||||
"希腊语": "ελληνικά",
|
||||
"希伯来语": "עברית",
|
||||
"塞尔维亚语": "Српски",
|
||||
"土耳其语": "Türkçe",
|
||||
@ -1078,8 +1078,11 @@
|
||||
"印度尼西亚语": "Bahasa Indonesia",
|
||||
"芬兰语": "Suomi",
|
||||
"丹麦语": "Dansk",
|
||||
"印地语": "हिंदीName",
|
||||
"印地语": "हिंदी",
|
||||
"乌尔都语": "اوردو",
|
||||
"亚美尼亚语": "Հայերեն",
|
||||
"格鲁吉亚语": "ქართული",
|
||||
"巴西葡萄牙语": "Português do Brasil",
|
||||
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
|
||||
"繁体中文(中国香港)": "繁體中文(中國香港)",
|
||||
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "ব্যান্ডোটারআইসেট, হাসিপাল রিরিইনস্ফথেলকবইল্ডজেডড।?",
|
||||
@ -1152,40 +1155,24 @@
|
||||
"3.安装Google Home APP,点击左上角的加号按钮": "গুগল হোম অ্যাপ্লিকেশনটি ইনস্টল করুন এবং উপরের বাম কোণে প্লাস বোতামটি ক্লিক করুন",
|
||||
"暂无最新记录": "বর্তমানে কোনও সাম্প্রতিকতম রেকর্ড সুলভ নেই",
|
||||
"请将手机切换至2.4G WiFi进行手动连接": "ম্যানুয়াল সংযোগের জন্য দয়া করে আপনার ফোনটি 2.4 জি ওয়াইফাইতে স্যুইচ করুন",
|
||||
"设备重置": "ডিভাইস রিসেট",
|
||||
"请确认设备已重置": "অনুগ্রহ করে নিশ্চিত করুন ডিভাইসটি রিসেট হয়েছে",
|
||||
"添加设备前,请确保设备已重置为出厂状态。": "ডিভাইস যোগ করার আগে, নিশ্চিত করুন ডিভাইসটি ফ্যাক্টরি সেটিংসে রিসেট হয়েছে।",
|
||||
"设备已重置": "ডিভাইসটি রিসেট হয়েছে",
|
||||
"加不了锁常见问题": "লক যোগ করতে সমস্যা - সাধারণ প্রশ্ন",
|
||||
"蓝牙未开启或未授权": "ব্লুটুথ চালু নেই বা অনুমোদিত নয়",
|
||||
"请确保手机蓝牙已开启,并授权App使用蓝牙权限。": "ফোনের ব্লুটুথ চালু আছে এবং অ্যাপকে অনুমতি দেওয়া হয়েছে তা নিশ্চিত করুন।",
|
||||
"检查手机设置中的蓝牙权限,确保已授权给App。": "ফোনের সেটিংসে ব্লুটুথ অনুমতি পরীক্ষা করুন এবং অ্যাপকে অনুমতি দিন।",
|
||||
"未重置锁": "লক রিসেট হয়নি",
|
||||
"请先将锁重置为出厂状态,重置方法详见上一步指引。": "প্রথমে লকটি ফ্যাক্টরি সেটিংসে রিসেট করুন, আগের ধাপে পদ্ধতি দেখুন।",
|
||||
"找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。": "লকের রিসেট বোতামটি খুঁজে বের করুন, 'বিপ' শব্দ শোনা বা ইন্ডিকেটর লাইট জ্বলে ওঠা পর্যন্ত চেপে ধরুন।",
|
||||
"锁电量过低": "লকের ব্যাটারি কম",
|
||||
"锁电量过低可能导致无法正常连接和添加。": "লকের ব্যাটারি কম থাকলে সংযোগ ও যোগ করতে সমস্যা হতে পারে।",
|
||||
"请更换电池后重试。": "ব্যাটারি পরিবর্তন করে আবার চেষ্টা করুন।",
|
||||
"距离过远": "দূরত্ব বেশি",
|
||||
"请确保手机与锁的距离在有效范围内。": "ফোন ও লকের দূরত্ব বৈধ সীমার মধ্যে আছে তা নিশ্চিত করুন।",
|
||||
"将手机靠近锁,距离保持在1米以内。": "ফোনটি লকের কাছে রাখুন, দূরত্ব ১ মিটারের মধ্যে রাখুন।",
|
||||
"锁已被其他用户添加": "লকটি অন্য ব্যবহারকারী দ্বারা যোগ করা হয়েছে",
|
||||
"如果锁已被其他用户添加,需要先解除绑定。": "লকটি যদি অন্য ব্যবহারকারী দ্বারা যোগ করা হয়ে থাকে, তাহলে প্রথমে আনবাইন্ড করুন।",
|
||||
"请联系锁的管理员解除绑定,或使用管理员权限重置锁。": "লকের অ্যাডমিনের সাথে যোগাযোগ করুন বা অ্যাডমিন অনুমতি ব্যবহার করে লক রিসেট করুন।",
|
||||
"使用小程序": "মিনি প্রোগ্রাম ব্যবহার করুন",
|
||||
"如果App无法正常添加锁,可以尝试使用小程序版本。": "অ্যাপ দিয়ে লক যোগ করা না গেলে, মিনি প্রোগ্রাম ব্যবহার করে দেখুন।",
|
||||
"打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。": "WeChat খুলুন, '星星锁Lite' মিনি প্রোগ্রাম খুঁজুন এবং লক যোগ করার চেষ্টা করুন।",
|
||||
"尝试升级固件": "ফার্মওয়্যার আপডেট চেষ্টা করুন",
|
||||
"升级说明": "আপগ্রেড নির্দেশনা",
|
||||
"如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:": "উপরের পদ্ধতিগুলো কাজ না করলে, লকের ফার্মওয়্যার আপডেট করার চেষ্টা করুন। আপডেটের আগে নিশ্চিত করুন:",
|
||||
"升级注意事项": "লকের ব্যাটারি যথেষ্ট\n• সঠিক ফার্মওয়্যার ফাইল আছে\n• আপডেট চলাকালীন সংযোগ বিচ্ছিন্ন করবেন না",
|
||||
"找不到锁?点此查看。": "লক খুঁজে পাচ্ছেন না? এখানে ক্লিক করুন।",
|
||||
"常见问题": "সাধারণ সমস্যা",
|
||||
"固件升级": "ফার্মওয়্যার আপডেট",
|
||||
"固件升级描述": "দয়া করে নিশ্চিত করুন ডিভাইসটি রিসেট হয়েছে",
|
||||
"邮箱地址必须包含@符号": "ইমেইল ঠিকানা '@' অনুমতি দিতে হবে।",
|
||||
"手机号只能包含数字": "ফোন নম্বর শুধুমাত্র সংখ্যা অনুমতি দিতে হবে",
|
||||
"重置方法请查阅设备说明书": "ডিভাইসের ব্যবহার নির্দেশনা দেখুন",
|
||||
"我已重置,继续添加": "রিসেট সম্পন্ন হয়েছে, চালিয়ে যান",
|
||||
"添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。": "ডিভাইস যোগ করার আগে, নিশ্চিত করুন ডিভাইসটি ফ্যাক্টরি সেটিংসে রিসেট হয়েছে। রিসেট করার পরে, সকল ব্যবহারকারী ডেটা, যার মধ্যে অংগুলি, পাসওয়ার্ড এবং কার্ড অন্তর্ভুক্ত, মুছে ফেলা হবে।"
|
||||
"语音包设置": "ভয়েস প্যাকেজ সেটিংস",
|
||||
"第三方平台设置": "তৃতীয় পক্ষের প্ল্যাটফর্ম সেটিংস",
|
||||
"涂鸦智能": "Tuya Smart",
|
||||
"锁语音包设置": "ভয়েস প্যাকেজ সেটিংস লক করুন",
|
||||
"(中国台湾)": "(中国台湾)",
|
||||
"男声": "পুরুষের কণ্ঠ",
|
||||
"女声": "নারী কণ্ঠ",
|
||||
"您的图像和视频数据仅保留": "আপনার চিত্র এবং ভিডিও ডেটা কেবল ধরে রাখা হয়",
|
||||
"后图像和视频数据将会失效,开通": "এর পরে, চিত্র এবং ভিডিও ডেটা অবৈধ এবং সক্রিয় হবে",
|
||||
"云存会员": "ক্লাউড স্টোরেজ সদস্যতা",
|
||||
"服务,图像视频信息随心存!": "পরিষেবা, চিত্র এবং ভিডিও তথ্য আপনার হৃদয়ে!",
|
||||
"图像": "প্রতিচ্ছবি",
|
||||
"视频": "ভিডিও",
|
||||
"当前国家不支持手机验证码注册,请使用邮箱进行注册": "বর্তমানে, দেশটি মোবাইল ফোন যাচাইকরণ কোড নিবন্ধন সমর্থন করে না, নিবন্ধন করতে দয়া করে আপনার ইমেল ঠিকানা ব্যবহার করুন",
|
||||
"注:": "নোট:",
|
||||
"必需在开始时间24小时内使用一次,否则将失效": "শুরু করার সময় 24 ঘন্টার মধ্যে একবার ব্যবহার করা প্রয়োজন, অন্যথায় এটি শেষ হবে",
|
||||
"这是单次密码,只能使用一次": "এটি একক পাসওয়ার্ড, শুধুমাত্র একবার ব্যবহার করা যায়।",
|
||||
"您好": "হ্যালো!",
|
||||
"您的开门密码是": "আপনার দরজা খোলার পাসওয়ার্ড",
|
||||
"开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标": "লক খোলার সময়, প্রথমে লক কীবোর্ড সক্রিয় করুন, তারপর পাসওয়ার্ড টাইপ করুন, যা # সংখ্যা দিয়ে শেষ হয়, # সংখ্যা কী কীবোর্ডের নিচের"
|
||||
}
|
||||
@ -1065,7 +1065,7 @@
|
||||
"波兰语": "Polski",
|
||||
"斯洛伐克语": "Slovenčina",
|
||||
"捷克语": "Čeština",
|
||||
"希腊语": "Ελληνικά",
|
||||
"希腊语": "ελληνικά",
|
||||
"希伯来语": "עברית",
|
||||
"塞尔维亚语": "Српски",
|
||||
"土耳其语": "Türkçe",
|
||||
@ -1078,8 +1078,11 @@
|
||||
"印度尼西亚语": "Bahasa Indonesia",
|
||||
"芬兰语": "Suomi",
|
||||
"丹麦语": "Dansk",
|
||||
"印地语": "हिंदीName",
|
||||
"印地语": "हिंदी",
|
||||
"乌尔都语": "اوردو",
|
||||
"亚美尼亚语": "Հայերեն",
|
||||
"格鲁吉亚语": "ქართული",
|
||||
"巴西葡萄牙语": "Português do Brasil",
|
||||
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
|
||||
"繁体中文(中国香港)": "繁體中文(中國香港)",
|
||||
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Po resetování budou metakarpální žíly zámku odstraněny. Jste si jistý, že chcete resetovat?",
|
||||
@ -1152,40 +1155,24 @@
|
||||
"3.安装Google Home APP,点击左上角的加号按钮": "3. Nainstalujte aplikaci Google Home a klikněte na tlačítko plus v levém horním rohu",
|
||||
"暂无最新记录": "Momentálně nejsou k dispozici žádné nejnovější záznamy",
|
||||
"请将手机切换至2.4G WiFi进行手动连接": "Přepněte prosím svůj telefon na 2.4G WiFi pro ruční připojení",
|
||||
"设备重置": "Obnovení zařízení",
|
||||
"请确认设备已重置": "Potvrďte, že zařízení bylo obnoveno",
|
||||
"添加设备前,请确保设备已重置为出厂状态。": "Před přidáním zařízení se ujistěte, že bylo obnoveno do továrního nastavení.",
|
||||
"设备已重置": "Zařízení bylo obnoveno",
|
||||
"加不了锁常见问题": "Časté problémy při přidávání zámku",
|
||||
"蓝牙未开启或未授权": "Bluetooth není zapnutý nebo není povolený",
|
||||
"请确保手机蓝牙已开启,并授权App使用蓝牙权限。": "Ujistěte se, že je Bluetooth v telefonu zapnutý a aplikace má oprávnění.",
|
||||
"检查手机设置中的蓝牙权限,确保已授权给App。": "Zkontrolujte oprávnění Bluetooth v nastavení telefonu a ujistěte se, že aplikace má oprávnění.",
|
||||
"未重置锁": "Zámek nebyl obnoven",
|
||||
"请先将锁重置为出厂状态,重置方法详见上一步指引。": "Nejprve obnovte zámek do továrního nastavení, viz předchozí krok.",
|
||||
"找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。": "Najděte tlačítko pro obnovení na zámku a podržte jej, dokud neuslyšíte pípnutí nebo neuvidíte blikající kontrolku.",
|
||||
"锁电量过低": "Nízká baterie zámku",
|
||||
"锁电量过低可能导致无法正常连接和添加。": "Nízká baterie může způsobit problémy s připojením a přidáním.",
|
||||
"请更换电池后重试。": "Vyměňte baterii a zkuste to znovu.",
|
||||
"距离过远": "Vzdálenost je příliš velká",
|
||||
"请确保手机与锁的距离在有效范围内。": "Ujistěte se, že vzdálenost mezi telefonem a zámkem je v povoleném rozsahu.",
|
||||
"将手机靠近锁,距离保持在1米以内。": "Přibližte telefon k zámku, vzdálenost udržujte do 1 metru.",
|
||||
"锁已被其他用户添加": "Zámek byl přidán jiným uživatelem",
|
||||
"如果锁已被其他用户添加,需要先解除绑定。": "Pokud byl zámek přidán jiným uživatelem, je třeba jej nejprve odpojit.",
|
||||
"请联系锁的管理员解除绑定,或使用管理员权限重置锁。": "Kontaktujte správce zámku nebo použijte oprávnění správce k obnovení zámku.",
|
||||
"使用小程序": "Použijte mini-program",
|
||||
"如果App无法正常添加锁,可以尝试使用小程序版本。": "Pokud aplikace nemůže zámek přidat, zkuste mini-program.",
|
||||
"打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。": "Otevřete WeChat, vyhledejte '星星锁Lite' mini-program a zkuste přidat zámek.",
|
||||
"尝试升级固件": "Zkuste aktualizaci firmwaru",
|
||||
"升级说明": "Pokyny k aktualizaci",
|
||||
"如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:": "Pokud výše uvedené metody nepomohou, zkuste aktualizovat firmware zámku. Před aktualizací se ujistěte:",
|
||||
"升级注意事项": "Baterie zámku je dostatečná\n• Máte správný soubor firmwaru\n• Během aktualizace neodpojujte",
|
||||
"找不到锁?点此查看。": "Nelze najít zámek? Klikněte zde.",
|
||||
"常见问题": "Časté problémy",
|
||||
"固件升级": "Aktualizace firmwaru",
|
||||
"固件升级描述": "Klikněte na tlačítko \"Regresar a la configuración del dispositivo\" en la parte inferior derecha para volver a la página de configuración del dispositivo y probar la actualización del firmware.",
|
||||
"邮箱地址必须包含@符号": "E-mailová adresa musí obsahovat '@'.",
|
||||
"手机号只能包含数字": "Telefonní číslo může obsahovat pouze číslice",
|
||||
"重置方法请查阅设备说明书": "Provedení resetu naleznete v návodu k použití",
|
||||
"我已重置,继续添加": "Reset byl úspěšný, pokračujte",
|
||||
"添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。": "Před přidáním zařízení se ujistěte, že je resetováno do továrního nastavení. Po resetu budou odstraněny všechna uživatelská data, včetně otisků prstů, hesel a karet."
|
||||
"语音包设置": "Nastavení hlasového balíčku",
|
||||
"第三方平台设置": "Nastavení platformy třetích stran",
|
||||
"涂鸦智能": "Tuya Smart",
|
||||
"锁语音包设置": "Zamknout nastavení hlasového balíčku",
|
||||
"(中国台湾)": "(中国台湾)",
|
||||
"男声": "Mužský hlas",
|
||||
"女声": "Ženský hlas",
|
||||
"您的图像和视频数据仅保留": "Uchovávají se pouze vaše obrazová data a data videí",
|
||||
"后图像和视频数据将会失效,开通": "Poté budou obrazová a video data neplatná a aktivovaná",
|
||||
"云存会员": "Členství v cloudovém úložišti",
|
||||
"服务,图像视频信息随心存!": "Servis, obrazové a video informace jsou na prvním místě!",
|
||||
"图像": "obraz",
|
||||
"视频": "Video",
|
||||
"当前国家不支持手机验证码注册,请使用邮箱进行注册": "V současné době země nepodporuje registraci ověřovacího kódu mobilního telefonu, k registraci použijte prosím svou e-mailovou adresu",
|
||||
"注:": "Poznámka:",
|
||||
"必需在开始时间24小时内使用一次,否则将失效": "Je nutné použít jednou do 24 hodin od začátku, jinak vyprší.",
|
||||
"这是单次密码,只能使用一次": "Jedná se o jednorázové heslo, které lze použít pouze jednou.",
|
||||
"您好": "Dobrý den.",
|
||||
"您的开门密码是": "Vaše otevírací heslo je",
|
||||
"开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标": "Při odemknutí nejprve aktivujte klávesnici pro zamyknutí a potom zadejte heslo, které končí číslem # a číslo # je v pravém dolním rohu klávesnice, může být další ikona"
|
||||
}
|
||||
@ -63,7 +63,7 @@
|
||||
"授权管理员拥有操作这把锁的重要权限,请确保只发给我你信任的人": "Den autoriserede administrator har flertal tilladelse til at betjene denne lås.",
|
||||
"功能开启后,你将可以通过网关远程开锁。此功能的开启和关闭只能在锁附近通过手机蓝牙进行。": "Denne funktion giver dig mulighed for at låse Smart Lock fjernbetjening via en Gateway. Denne funktion kan kun slås til eller fra via Bluetooth.",
|
||||
"排列方式": "Listetype",
|
||||
"早到榜": "Tidlig listeName",
|
||||
"早到榜": "Tidlig liste",
|
||||
"迟到榜": "Forsinkede lister",
|
||||
"当前模式": "Nuværende tilstand",
|
||||
"勤奋榜": "Arbejdshård liste:",
|
||||
@ -116,7 +116,7 @@
|
||||
"微信二维码": "Lås op QR- kode",
|
||||
"拥有电子钥匙的人,通过微信扫一扫这个二维码,即可开门。每把锁的二维码都不相同,你可以将其打印出来贴在对应的锁旁边": "Folk med elektroniske nøgler kan åbne døren ved at scanne denne QR-kode gennem WeChat. QR-koden for hver lås er anderledes. Du kan udskrive det ud og indsætte det ved siden af den tilsvarende lås",
|
||||
"锁编号": "Låsnummer",
|
||||
"电量": "BatteriName",
|
||||
"电量": "Batteri",
|
||||
"锁分组": "Lås gruppen",
|
||||
"选择分组": "Vælg gruppe",
|
||||
"创建新分组": "Opret en gruppe",
|
||||
@ -157,7 +157,7 @@
|
||||
"选择锁类型": "Vælg låstype",
|
||||
"NFC无源锁": "NFC Passiv lås",
|
||||
"添加设备": "Tilføj enhed",
|
||||
"网关": "GatewayName",
|
||||
"网关": "Gateway",
|
||||
"客服": "Kundeservice:",
|
||||
"设置": "Indstillinger",
|
||||
"更多设置": "Mere sæt",
|
||||
@ -185,7 +185,7 @@
|
||||
"删除账号": "Slet konto",
|
||||
"个人信息": "Kontoinformation",
|
||||
"头像": "Avatar",
|
||||
"昵称": "NickNameName",
|
||||
"昵称": "NickName",
|
||||
"请输入昵称": "Indtast venligst dit kaldenavn",
|
||||
"修改昵称": "Omdøb",
|
||||
"修改账号": "Redigér konto",
|
||||
@ -213,10 +213,10 @@
|
||||
"网关连接的锁": "Lås forbundet til denne Gateway",
|
||||
"信号强": "Stærk",
|
||||
"选择网关类型": "Vælg gateway- type",
|
||||
"添加网关": "Tilføj gatewayName",
|
||||
"添加网关": "Tilføj gateway",
|
||||
"重新通电": "Tilslut kraften",
|
||||
"指示灯": "Indikator Lys",
|
||||
"选择网关": "Vælg gatewayName",
|
||||
"选择网关": "Vælg gateway",
|
||||
"不支持5G WiFi网络,请选择2.4G WiFi网络进行配置": "5G understøttes ikke, Vælg et WiFi på 2.4G.",
|
||||
"WiFi密码": "WiFi- adgangskort",
|
||||
"请输入WiFi密码": "Indtast WiFi- adgangskode",
|
||||
@ -245,7 +245,7 @@
|
||||
"附近的锁": "Nærlig låse",
|
||||
"如需修改名字请重新命名,点击确定添加锁": "Hvis du vil ændre navnet, skal du omdøbe, klikke på OK for at tilføje låse",
|
||||
"添加锁时,手机必须在锁旁边": "Når du tilføjer en lås, skal telefonen være ved siden af låsen",
|
||||
"登录": "LoginName",
|
||||
"登录": "Login",
|
||||
"注册": "Registrer",
|
||||
"我已阅读并同意": "Jeg har læst og indvilliget",
|
||||
"验证码": "Kode",
|
||||
@ -305,7 +305,7 @@
|
||||
"胁迫卡": "Stresskort",
|
||||
"员工是否有密码": "Har allerede adgangskode",
|
||||
"员工是否有卡": "Har allerede kort",
|
||||
"员工是否有指纹": "Sæt fingeraftrykket alleredeName",
|
||||
"员工是否有指纹": "Sæt fingeraftrykket allerede",
|
||||
"获取钥匙": "Hent nøgle",
|
||||
"获取卡": "Hent kort",
|
||||
"获取指纹": "Hent fingeraftryk",
|
||||
@ -316,11 +316,11 @@
|
||||
"开门器": "Døråbnere",
|
||||
"面容开锁": "Ansigt åbnes",
|
||||
"开门方向设置": "Åbningsvejssæt",
|
||||
"电机功率设置": "Indstilling af MotorPowerName",
|
||||
"电机功率设置": "Indstilling af MotorPower",
|
||||
"开锁时是否需联网": "Hvis Internet er påkrævet ved oplåsning",
|
||||
"选择要加入分组的锁": "Vælg lockS der skal tilføjes til denne gruppe.",
|
||||
"锁数量": "Låstællinger",
|
||||
"小米IOT平台": "Xiaomi IOT-platformName",
|
||||
"小米IOT平台": "Xiaomi IOT-platform",
|
||||
"面容开锁设置": "Ansigtet låser op sæt",
|
||||
"感应距离": "Følelsesafstand",
|
||||
"防误开": "Forhindre forkert åbning",
|
||||
@ -365,7 +365,7 @@
|
||||
"员工是否有人脸": "Om medarbejderen har et ansigt",
|
||||
"同时删除员工钥匙": "Slet hans/ hendes ekey",
|
||||
"删除": "Slet",
|
||||
"确定要删除员工吗?": "Slet denne medarbejderName",
|
||||
"确定要删除员工吗?": "Slet denne medarbejder",
|
||||
"月统计": "Månedlig statistik",
|
||||
"迟到": "Forsinker",
|
||||
"早退": "Forsvind tidligt",
|
||||
@ -519,7 +519,7 @@
|
||||
"网络访问失败,请检查网络是否正常": "Forespørgsel mislykkedes.Netværk utilgængelig, Kontroller og tilslut din enhed til 3G/4G/WIFI",
|
||||
"清空": "Ryd",
|
||||
"是否清空?": "Forstået?",
|
||||
"消息详情": "Brev- infoName",
|
||||
"消息详情": "Brev- info",
|
||||
"创建时间": "Oprettelsestid",
|
||||
"管理员详情": "Oplysninger om administrator",
|
||||
"当被胁迫要求强行开锁时,使用胁迫卡会触发报警,报警信息会推送给管理员,该功能需要锁联网。": "Hvis nogen tvinger dig til at åbne døren, kan du bruge dette kort. Alarmen vil blive sendt til administratorerne. For at bruge denne funktion, skal du sørge for din lås er online.",
|
||||
@ -691,7 +691,7 @@
|
||||
"请输入身份证号和真实姓名": "Indtast venligst dit ID- nummer og rigtige navn.",
|
||||
"点击返回设备配对": "Tryk på Tilbage til enhedsparing",
|
||||
"无法连接?尝试升级": "Kan ikke forbinde?",
|
||||
"固件升级提示": "Prompt for opgradering af FirmwareName",
|
||||
"固件升级提示": "Prompt for opgradering af Firmware",
|
||||
"请先获取固件文件到手机本地,再选择升级": "Få venligst firmware-filen til den lokale telefon først, og vælg derefter Opgrader",
|
||||
"固件升级中": "Firmwaren bliver opgraderet",
|
||||
"取消升级": "Annullér opgraderingen",
|
||||
@ -703,7 +703,7 @@
|
||||
"传输中": "I transit",
|
||||
"发送人": "Udstedt af:",
|
||||
"发送时间": "Udstedt tid",
|
||||
"钥匙详情": "Ekey- infoName",
|
||||
"钥匙详情": "Ekey- info",
|
||||
"姓名": "Navn",
|
||||
"发送": "Send",
|
||||
"请确认姓名全名和身份证号码是否正确": "Bekræft venligst, at det fulde navn og ID-nummer er korrekt.",
|
||||
@ -834,7 +834,7 @@
|
||||
"微信": "WeChat",
|
||||
"朋友圈": "Øjeblikker",
|
||||
"QQ": "QQ",
|
||||
"QQ空间": "QQZoneName",
|
||||
"QQ空间": "QQZone",
|
||||
"微博": "Weibo Formand",
|
||||
"FaceBook": "Facebook",
|
||||
"链接": "Tilknytning",
|
||||
@ -872,7 +872,7 @@
|
||||
"再返回一次退出": "Afslut igen.",
|
||||
"请先添加锁": "Tilføj venligst låsen først.",
|
||||
"可视对讲": "Visuel interkom.",
|
||||
"详细日志": "Detaljeret log logName",
|
||||
"详细日志": "Detaljeret log log",
|
||||
"已复制到剪切板": "Kopieret",
|
||||
"拍照": "Fotografi",
|
||||
"从相册选择": "Vælg mellem albumet",
|
||||
@ -1065,7 +1065,7 @@
|
||||
"波兰语": "Polski",
|
||||
"斯洛伐克语": "Slovenčina",
|
||||
"捷克语": "Čeština",
|
||||
"希腊语": "Ελληνικά",
|
||||
"希腊语": "ελληνικά",
|
||||
"希伯来语": "עברית",
|
||||
"塞尔维亚语": "Српски",
|
||||
"土耳其语": "Türkçe",
|
||||
@ -1078,8 +1078,11 @@
|
||||
"印度尼西亚语": "Bahasa Indonesia",
|
||||
"芬兰语": "Suomi",
|
||||
"丹麦语": "Dansk",
|
||||
"印地语": "हिंदीName",
|
||||
"印地语": "हिंदी",
|
||||
"乌尔都语": "اوردو",
|
||||
"亚美尼亚语": "Հայերեն",
|
||||
"格鲁吉亚语": "ქართული",
|
||||
"巴西葡萄牙语": "Português do Brasil",
|
||||
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
|
||||
"繁体中文(中国香港)": "繁體中文(中國香港)",
|
||||
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Efter nulstilling, de metacarpal vener i låsen vil blive slettet. Er du sikker på at du vil nulstille?",
|
||||
@ -1097,7 +1100,7 @@
|
||||
"支持的国家值": "USA, Canada, Storbritannien, Australien, Indien, Tyskland, Frankrig, Italien, Spanien, Japan.",
|
||||
"操作流程": "Driftsprocesser",
|
||||
"操作流程值": "1 Tilføj en lås og gateway med Smart lås APP\n\n2 Aktiver den fjernlåsefunktion af låsen i APP (denne funktion er slukket som standard). Hvis du ikke har denne indstilling, understøtter låsen ikke Alexa\n\n3 Tilføj færdigheder til Alexa og autorisere dem med Smart lås APP konto og adgangskode. Når godkendelsen er vellykket, kan du opdage enheder under kontoen\n\n4 Find låsen i Alexa-appen, tænd stemme oplåsfunktionen og indstille adgangskoden for sproget.\n\n5 Låsen kan betjenes gennem Alexa",
|
||||
"Google Home": "Google-hjemName",
|
||||
"Google Home": "Google-hjem",
|
||||
"Action name": "Handlingsnavn",
|
||||
"ScienerSmart": "ScienerSmart",
|
||||
"支持的语言": "Understøttede sprog",
|
||||
@ -1152,40 +1155,24 @@
|
||||
"3.安装Google Home APP,点击左上角的加号按钮": "3. Installer Google Home-appen, og klik på plusknappen i øverste venstre hjørne",
|
||||
"暂无最新记录": "Der er i øjeblikket ingen nyeste optegnelser tilgængelige",
|
||||
"请将手机切换至2.4G WiFi进行手动连接": "Skift venligst din telefon til 2.4G WiFi for manuel forbindelse",
|
||||
"设备重置": "Nulstil enhed",
|
||||
"请确认设备已重置": "Bekræft venligst, at enheden er nulstillet",
|
||||
"添加设备前,请确保设备已重置为出厂状态。": "Sørg for, at enheden er nulstillet til fabriksindstillinger, før du tilføjer den.",
|
||||
"设备已重置": "Enheden er nulstillet",
|
||||
"加不了锁常见问题": "Almindelige problemer ved tilføjelse af lås",
|
||||
"蓝牙未开启或未授权": "Bluetooth er ikke aktiveret eller ikke godkendt",
|
||||
"请确保手机蓝牙已开启,并授权App使用蓝牙权限。": "Sørg for, at Bluetooth er aktiveret på telefonen, og at appen har tilladelse.",
|
||||
"检查手机设置中的蓝牙权限,确保已授权给App。": "Tjek Bluetooth-tilladelser i telefonens indstillinger, og sørg for, at appen har tilladelse.",
|
||||
"未重置锁": "Låsen er ikke nulstillet",
|
||||
"请先将锁重置为出厂状态,重置方法详见上一步指引。": "Nulstil først låsen til fabriksindstillinger, se forrige trin for metode.",
|
||||
"找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。": "Find nulstillingsknappen på låsen, og hold den nede, indtil du hører et bip eller ser indikatoren blinke.",
|
||||
"锁电量过低": "Låsebatteriet er lavt",
|
||||
"锁电量过低可能导致无法正常连接和添加。": "Lavt batteri kan forhindre korrekt tilslutning og tilføjelse.",
|
||||
"请更换电池后重试。": "Udskift batteriet og prøv igen.",
|
||||
"距离过远": "Afstanden er for stor",
|
||||
"请确保手机与锁的距离在有效范围内。": "Sørg for, at afstanden mellem telefon og lås er inden for det tilladte område.",
|
||||
"将手机靠近锁,距离保持在1米以内。": "Hold telefonen tæt på låsen, inden for 1 meter.",
|
||||
"锁已被其他用户添加": "Låsen er allerede tilføjet af en anden bruger",
|
||||
"如果锁已被其他用户添加,需要先解除绑定。": "Hvis låsen allerede er tilføjet af en anden, skal den først afbindes.",
|
||||
"请联系锁的管理员解除绑定,或使用管理员权限重置锁。": "Kontakt låsens administrator for at afbinde, eller brug administratorrettigheder til at nulstille låsen.",
|
||||
"使用小程序": "Brug mini-program",
|
||||
"如果App无法正常添加锁,可以尝试使用小程序版本。": "Hvis appen ikke kan tilføje låsen, kan du prøve mini-programmet.",
|
||||
"打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。": "Åbn WeChat, søg efter '星星锁Lite' mini-program, og prøv at tilføje låsen.",
|
||||
"尝试升级固件": "Prøv firmwareopgradering",
|
||||
"升级说明": "Opgraderingsvejledning",
|
||||
"如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:": "Hvis ovenstående ikke virker, kan du prøve at opgradere låsens firmware. Sørg for følgende før opgradering:",
|
||||
"升级注意事项": "Låsebatteriet er tilstrækkeligt\n• Korrekt firmware-fil er modtaget\n• Afbryd ikke under opgraderingen",
|
||||
"找不到锁?点此查看。": "Kan ikke finde låsen? Klik her.",
|
||||
"常见问题": "Almindelige problemer",
|
||||
"固件升级": "Firmware-opgradering",
|
||||
"固件升级描述": "Klik på knappen \"Tilbage til enhedsindstillinger\" i nederste højre hjørne for at vende tilbage til enhedsindstillingerne og prøve at opgradere firmware.",
|
||||
"邮箱地址必须包含@符号": "E-mail-adressen skal indeholde '@'.",
|
||||
"手机号只能包含数字": "Telefonnummeret kan kun indeholde tal",
|
||||
"重置方法请查阅设备说明书": "Se venligst låserens brugsanvisning",
|
||||
"我已重置,继续添加": "Nulstillingen er fuldført, fortsæt",
|
||||
"添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。": "Før du tilføjer låsen, sørg venligst for, at den er nulstillet til fabriksindstillinger. Efter nulstillingen vil alle brugerdata, herunder fingeraftryk, adgangskoder og kort, blive slettet."
|
||||
"语音包设置": "Indstillinger af stemmepakke",
|
||||
"第三方平台设置": "Indstillinger af tredjepartsplatforme",
|
||||
"涂鸦智能": "Tuya Smart",
|
||||
"锁语音包设置": "Lås stemmepakkeindstillinger",
|
||||
"(中国台湾)": "(中国台湾)",
|
||||
"男声": "Mandlige stemmer",
|
||||
"女声": "Kvindelige stemmer",
|
||||
"您的图像和视频数据仅保留": "Dine billed- og videodata opbevares kun",
|
||||
"后图像和视频数据将会失效,开通": "Derefter vil billed- og videodataene være ugyldige og aktiveret",
|
||||
"云存会员": "Medlemskab af Cloud Storage",
|
||||
"服务,图像视频信息随心存!": "Service-, billed- og videoinformation er i dit hjerte!",
|
||||
"图像": "billede",
|
||||
"视频": "Video",
|
||||
"当前国家不支持手机验证码注册,请使用邮箱进行注册": "I øjeblikket understøtter landet ikke registrering af mobiltelefonbekræftelseskode, brug venligst din e-mailadresse til at tilmelde dig",
|
||||
"注:": "Bemærk:",
|
||||
"必需在开始时间24小时内使用一次,否则将失效": "Bruges én gang inden for 24 timer, ellers udløber",
|
||||
"这是单次密码,只能使用一次": "Det er en enkelt adgangskode. Du kan kun bruge den én gang.",
|
||||
"您好": "Goddag.",
|
||||
"您的开门密码是": "Din adgangskode er",
|
||||
"开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标": "Når du låser op, skal du først aktivere lås tastaturet, og derefter indtaste adgangskoden, der slutter med #nummer, #nummer i nederste højre hjørne af tastaturet, der kan være andre ikoner"
|
||||
}
|
||||
@ -1065,7 +1065,7 @@
|
||||
"波兰语": "Polski",
|
||||
"斯洛伐克语": "Slovenčina",
|
||||
"捷克语": "Čeština",
|
||||
"希腊语": "Ελληνικά",
|
||||
"希腊语": "ελληνικά",
|
||||
"希伯来语": "עברית",
|
||||
"塞尔维亚语": "Српски",
|
||||
"土耳其语": "Türkçe",
|
||||
@ -1078,8 +1078,11 @@
|
||||
"印度尼西亚语": "Bahasa Indonesia",
|
||||
"芬兰语": "Suomi",
|
||||
"丹麦语": "Dansk",
|
||||
"印地语": "हिंदीName",
|
||||
"印地语": "हिंदी",
|
||||
"乌尔都语": "اوردو",
|
||||
"亚美尼亚语": "Հայերեն",
|
||||
"格鲁吉亚语": "ქართული",
|
||||
"巴西葡萄牙语": "Português do Brasil",
|
||||
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
|
||||
"繁体中文(中国香港)": "繁體中文(中國香港)",
|
||||
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Nach dem Zurücksetzen werden die Mittelhand adern des Schlosses gelöscht. Sind Sie sicher, dass Sie zurücksetzen wollen?",
|
||||
@ -1152,40 +1155,24 @@
|
||||
"3.安装Google Home APP,点击左上角的加号按钮": "3. Installiert die google-app und klicken auf den knopf hinzufügen in der oberen linken ecke",
|
||||
"暂无最新记录": "Wir haben keine neuen daten",
|
||||
"请将手机切换至2.4G WiFi进行手动连接": "Wenn manuelle verbindung hergestellt wird, schalten sie das handy auf 2,4 G WiFi",
|
||||
"设备重置": "Gerät zurücksetzen",
|
||||
"请确认设备已重置": "Bitte bestätigen Sie, dass das Gerät zurückgesetzt wurde",
|
||||
"添加设备前,请确保设备已重置为出厂状态。": "Stellen Sie vor dem Hinzufügen des Geräts sicher, dass es auf Werkseinstellungen zurückgesetzt wurde.",
|
||||
"设备已重置": "Gerät wurde zurückgesetzt",
|
||||
"加不了锁常见问题": "Häufige Probleme beim Hinzufügen des Schlosses",
|
||||
"蓝牙未开启或未授权": "Bluetooth ist nicht aktiviert oder nicht autorisiert",
|
||||
"请确保手机蓝牙已开启,并授权App使用蓝牙权限。": "Stellen Sie sicher, dass Bluetooth am Telefon aktiviert ist und die App berechtigt ist.",
|
||||
"检查手机设置中的蓝牙权限,确保已授权给App。": "Überprüfen Sie die Bluetooth-Berechtigungen in den Telefoneinstellungen und stellen Sie sicher, dass die App berechtigt ist.",
|
||||
"未重置锁": "Schloss nicht zurückgesetzt",
|
||||
"请先将锁重置为出厂状态,重置方法详见上一步指引。": "Setzen Sie das Schloss zuerst auf Werkseinstellungen zurück, siehe vorherigen Schritt für die Methode.",
|
||||
"找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。": "Suchen Sie die Reset-Taste am Schloss und halten Sie sie gedrückt, bis Sie einen Piepton hören oder die Anzeige blinkt.",
|
||||
"锁电量过低": "Schlossbatterie zu schwach",
|
||||
"锁电量过低可能导致无法正常连接和添加。": "Eine zu schwache Batterie kann zu Verbindungs- und Hinzufügeproblemen führen.",
|
||||
"请更换电池后重试。": "Bitte tauschen Sie die Batterie und versuchen Sie es erneut.",
|
||||
"距离过远": "Abstand zu groß",
|
||||
"请确保手机与锁的距离在有效范围内。": "Stellen Sie sicher, dass der Abstand zwischen Telefon und Schloss im zulässigen Bereich liegt.",
|
||||
"将手机靠近锁,距离保持在1米以内。": "Halten Sie das Telefon in einem Abstand von weniger als 1 Meter zum Schloss.",
|
||||
"锁已被其他用户添加": "Schloss wurde von einem anderen Benutzer hinzugefügt",
|
||||
"如果锁已被其他用户添加,需要先解除绑定。": "Wenn das Schloss bereits von einem anderen Benutzer hinzugefügt wurde, muss es zuerst entkoppelt werden.",
|
||||
"请联系锁的管理员解除绑定,或使用管理员权限重置锁。": "Kontaktieren Sie den Administrator des Schlosses oder setzen Sie das Schloss mit Administratorrechten zurück.",
|
||||
"使用小程序": "Mini-Programm verwenden",
|
||||
"如果App无法正常添加锁,可以尝试使用小程序版本。": "Wenn das Hinzufügen des Schlosses mit der App nicht funktioniert, versuchen Sie es mit dem Mini-Programm.",
|
||||
"打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。": "Öffnen Sie WeChat, suchen Sie nach '星星锁Lite' Mini-Programm und versuchen Sie, das Schloss hinzuzufügen.",
|
||||
"尝试升级固件": "Firmware-Upgrade versuchen",
|
||||
"升级说明": "Upgrade-Anleitung",
|
||||
"如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:": "Wenn die oben genannten Methoden nicht helfen, versuchen Sie ein Firmware-Upgrade. Stellen Sie vor dem Upgrade sicher:",
|
||||
"升级注意事项": "Schlossbatterie ausreichend\n• Richtiges Firmware-File erhalten\n• Während des Upgrades nicht trennen",
|
||||
"找不到锁?点此查看。": "Schloss nicht gefunden? Hier klicken.",
|
||||
"常见问题": "Häufige Probleme",
|
||||
"固件升级": "Firmware-Upgrade",
|
||||
"固件升级描述": "Klicken Sie auf die Schaltfläche \"Zurück zur Gerätekonfiguration\" in der unteren rechten Ecke, um zur Seite der Gerätekonfiguration zurückzukehren und das Firmware-Upgrade zu versuchen.",
|
||||
"邮箱地址必须包含@符号": "Die E-Mail-Adresse muss '@' enthalten.",
|
||||
"手机号只能包含数字": "Die Telefonnummer kann nur Zahlen enthalten",
|
||||
"重置方法请查阅设备说明书": "Bitte lesen Sie das Bedienungsanleitung des Gerätes",
|
||||
"我已重置,继续添加": "Zurücksetzen erfolgreich, fortfahren",
|
||||
"添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。": "Stellen Sie vor dem Hinzufügen des Geräts sicher, dass es auf Werkseinstellungen zurückgesetzt wurde. Nach dem Zurücksetzen werden alle Benutzerdaten, einschließlich Fingerabdrücke, Passwörter und Karten, gelöscht."
|
||||
"语音包设置": "Sprachpaketeinstellungen",
|
||||
"第三方平台设置": "Einstellungen von Drittanbieterplattformen",
|
||||
"涂鸦智能": "Tuya Smart",
|
||||
"锁语音包设置": "Sperren von Sprachpaketeinstellungen",
|
||||
"(中国台湾)": "(中国台湾)",
|
||||
"男声": "Männliche Stimme",
|
||||
"女声": "Frauenstimme",
|
||||
"您的图像和视频数据仅保留": "Ihre Bild- und Videodaten werden nur dann aufbewahrt",
|
||||
"后图像和视频数据将会失效,开通": "Danach sind die Bild- und Videodaten ungültig und aktiviert",
|
||||
"云存会员": "Cloud-Speicher-Mitgliedschaft",
|
||||
"服务,图像视频信息随心存!": "Service-, Bild- und Videoinformationen liegen Ihnen am Herzen!",
|
||||
"图像": "Bild",
|
||||
"视频": "Video",
|
||||
"当前国家不支持手机验证码注册,请使用邮箱进行注册": "Derzeit unterstützt das Land die Registrierung von Verifizierungscodes für Mobiltelefone nicht, bitte verwenden Sie Ihre E-Mail-Adresse, um sich zu registrieren",
|
||||
"注:": "Hinweis:",
|
||||
"必需在开始时间24小时内使用一次,否则将失效": "Muss innerhalb von 24 Stunden nach Startzeit einmal verwendet werden, sonst läuft es ab",
|
||||
"这是单次密码,只能使用一次": "Dies ist ein Einmal-Passwort und kann nur einmal verwendet werden",
|
||||
"您好": "Hallo",
|
||||
"您的开门密码是": "Ihr Türöffnungscode lautet",
|
||||
"开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标": "Zum Entriegeln zuerst die Schloss-Tastatur aktivieren, dann das Passwort eingeben und mit # beenden. Die #-Taste befindet sich in der rechten unteren Ecke der Tastatur und kann ein anderes Symbol haben"
|
||||
}
|
||||
@ -97,7 +97,7 @@
|
||||
"日榜": "Καθημερινά",
|
||||
"月榜": "Μηνιαία",
|
||||
"考勤记录": "Καταγραφή",
|
||||
"假日信息": "Πληροφορίες διακοπώνName",
|
||||
"假日信息": "Πληροφορίες διακοπών",
|
||||
"基本信息": "Βασικά",
|
||||
"无线键盘": "Ασύρματο πληκτρολόγιο",
|
||||
"选择无线键盘": "Προσθήκη πληκτρολόγιου",
|
||||
@ -185,7 +185,7 @@
|
||||
"删除账号": "Διαγραφή λογαριασμού",
|
||||
"个人信息": "Πληροφορίες λογαριασμού",
|
||||
"头像": "Άβαταρ",
|
||||
"昵称": "NickNameName",
|
||||
"昵称": "NickName",
|
||||
"请输入昵称": "Παρακαλώ εισάγετε το ψευδώνυμό σας",
|
||||
"修改昵称": "Μετονομασία",
|
||||
"修改账号": "Επεξεργασία λογαριασμού",
|
||||
@ -693,7 +693,7 @@
|
||||
"无法连接?尝试升级": "Δεν μπορείτε να συνδεθείτε;",
|
||||
"固件升级提示": "Προτεινόμενη αναβάθμιση του Firmware",
|
||||
"请先获取固件文件到手机本地,再选择升级": "Παρακαλώ αποκτήστε πρώτα το αρχείο firmware στο τοπικό τηλέφωνο και στη συνέχεια επιλέξτε Αναβάθμιση",
|
||||
"固件升级中": "Το firmware αναβαθμίζεταιName",
|
||||
"固件升级中": "Το firmware αναβαθμίζεται",
|
||||
"取消升级": "Ακύρωση της αναβάθμισης",
|
||||
"固件传输中": "Άρθρο 10",
|
||||
"关闭": "Κλείσιμο",
|
||||
@ -834,7 +834,7 @@
|
||||
"微信": "WeChat",
|
||||
"朋友圈": "Στιγμές",
|
||||
"QQ": "QQ",
|
||||
"QQ空间": "QQZoneName",
|
||||
"QQ空间": "QQZone",
|
||||
"微博": "Γουίβο",
|
||||
"FaceBook": "Βιβλίο Facebook",
|
||||
"链接": "Δεσμός",
|
||||
@ -1065,7 +1065,7 @@
|
||||
"波兰语": "Polski",
|
||||
"斯洛伐克语": "Slovenčina",
|
||||
"捷克语": "Čeština",
|
||||
"希腊语": "Ελληνικά",
|
||||
"希腊语": "ελληνικά",
|
||||
"希伯来语": "עברית",
|
||||
"塞尔维亚语": "Српски",
|
||||
"土耳其语": "Türkçe",
|
||||
@ -1078,8 +1078,11 @@
|
||||
"印度尼西亚语": "Bahasa Indonesia",
|
||||
"芬兰语": "Suomi",
|
||||
"丹麦语": "Dansk",
|
||||
"印地语": "हिंदीName",
|
||||
"印地语": "हिंदी",
|
||||
"乌尔都语": "اوردو",
|
||||
"亚美尼亚语": "Հայերեն",
|
||||
"格鲁吉亚语": "ქართული",
|
||||
"巴西葡萄牙语": "Português do Brasil",
|
||||
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
|
||||
"繁体中文(中国香港)": "繁體中文(中國香港)",
|
||||
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Μετά την επαναφορά, οι μετακάρπιες φλέβες της κλειδαριάς θα διαγραφούν. Είστε σίγουροι ότι θέλετε να επαναφέρετε;",
|
||||
@ -1097,12 +1100,12 @@
|
||||
"支持的国家值": "ΗΠΑ, Καναδάς, Ηνωμένο Βασίλειο, Αυστραλία, Ινδία, Γερμανία, Γαλλία, Ιταλία, Ισπανία, Ιαπωνία",
|
||||
"操作流程": "Διαδικασία λειτουργίας",
|
||||
"操作流程值": "1 Προσθέστε μια κλειδαριά και πύλη με την Smart κλειδαριά APP\n\n2 Ενεργοποιήστε τη λειτουργία απομακρυσμένου ξεκλειδώματος της κλειδαριάς στο APP (αυτή η συνάρτηση είναι απενεργοποιημένη από προεπιλογή). Αν δεν έχετε αυτή την επιλογή, η κλειδαριά δεν υποστηρίζει Alexa\n\n3 Προσθέστε τις δεξιότητες στην Alexa και να τις εξουσιοδοτήσετε με το λογαριασμό και τον κωδικό πρόσβασης Smart. Μετά την επιτυχία της εξουσιοδότησης, μπορείτε να ανακαλύψετε συσκευές κάτω από τον λογαριασμό\n\n4 Εντοπίστε την κλειδαριά στην εφαρμογή Alexa, ενεργοποιήστε τη λειτουργία φωνής ξεκλειδώματος, και να ορίσετε τον κωδικό πρόσβασης γλώσσας\n\n5 Η κλειδαριά μπορεί να λειτουργήσει μέσω Alexa",
|
||||
"Google Home": "Σπίτι του GoogleName",
|
||||
"Google Home": "Σπίτι του Google",
|
||||
"Action name": "Όνομα ενέργειας",
|
||||
"ScienerSmart": "ΕπιστήμοναςSmart",
|
||||
"支持的语言": "Υποστηριζόμενες γλώσσες",
|
||||
"英语": "Αγγλική",
|
||||
"Google Home操作流程的值": "1. Χρησιμοποιήστε το Smart Lock APP για να προσθέσετε κλειδαριές και πύλες\n\n2. Ενεργοποιήστε τη λειτουργία απομακρυσμένου ξεκλειδώματος της κλειδαριάς στο APP (αυτή η λειτουργία είναι απενεργοποιημένη από προεπιλογή). Χωρίς αυτή την επιλογή, η κλειδαριά δεν υποστηρίζει το Google HomeName\n\n3. Εγκαταστήστε το Google Home APP και κάντε κλικ στο \" \" πλήκτρο στην επάνω αριστερή γωνία\n\n4. Στη σελίδα Ρυθμίσεις, επιλέξτε \"Εργασία με Google\"\n\n5. Αναζητήστε το \"ScienerSmart\" και να χρησιμοποιήσετε τον έξυπνο λογαριασμό και τον κωδικό πρόσβασης για να εξουσιοδοτήσει",
|
||||
"Google Home操作流程的值": "1. Χρησιμοποιήστε το Smart Lock APP για να προσθέσετε κλειδαριές και πύλες\n\n2. Ενεργοποιήστε τη λειτουργία απομακρυσμένου ξεκλειδώματος της κλειδαριάς στο APP (αυτή η λειτουργία είναι απενεργοποιημένη από προεπιλογή). Χωρίς αυτή την επιλογή, η κλειδαριά δεν υποστηρίζει το Google Home\n\n3. Εγκαταστήστε το Google Home APP και κάντε κλικ στο \" \" πλήκτρο στην επάνω αριστερή γωνία\n\n4. Στη σελίδα Ρυθμίσεις, επιλέξτε \"Εργασία με Google\"\n\n5. Αναζητήστε το \"ScienerSmart\" και να χρησιμοποιήσετε τον έξυπνο λογαριασμό και τον κωδικό πρόσβασης για να εξουσιοδοτήσει",
|
||||
"密码需至少包含数字/字母/字符中的2种组合": "Ο κωδικός πρόσβασης πρέπει να περιέχει τουλάχιστον 2 από τα ακόλουθα: αριθμούς, γράμματα και ειδικούς χαρακτήρες.",
|
||||
"已开锁": "Ξεκλείδωμα",
|
||||
"已闭锁": "Κλειδωμένο",
|
||||
@ -1152,40 +1155,24 @@
|
||||
"3.安装Google Home APP,点击左上角的加号按钮": "3. Εγκαταστήστε την εφαρμογή Google Home και κάντε κλικ στο κουμπί συν στην επάνω αριστερή γωνία",
|
||||
"暂无最新记录": "Προς το παρόν δεν υπάρχουν διαθέσιμες τελευταίες εγγραφές",
|
||||
"请将手机切换至2.4G WiFi进行手动连接": "Αλλάξτε το τηλέφωνό σας σε 2.4G WiFi για χειροκίνητη σύνδεση",
|
||||
"设备重置": "Επαναφορά συσκευής",
|
||||
"请确认设备已重置": "Παρακαλώ επιβεβαιώστε ότι η συσκευή έχει επαναφερθεί",
|
||||
"添加设备前,请确保设备已重置为出厂状态。": "Πριν προσθέσετε τη συσκευή, βεβαιωθείτε ότι έχει επαναφερθεί στις εργοστασιακές ρυθμίσεις.",
|
||||
"设备已重置": "Η συσκευή έχει επαναφερθεί",
|
||||
"加不了锁常见问题": "Συχνά προβλήματα κατά την προσθήκη κλειδαριάς",
|
||||
"蓝牙未开启或未授权": "Το Bluetooth δεν είναι ενεργοποιημένο ή δεν έχει δοθεί άδεια",
|
||||
"请确保手机蓝牙已开启,并授权App使用蓝牙权限。": "Βεβαιωθείτε ότι το Bluetooth του τηλεφώνου είναι ενεργοποιημένο και η εφαρμογή έχει άδεια.",
|
||||
"检查手机设置中的蓝牙权限,确保已授权给App。": "Ελέγξτε τα δικαιώματα Bluetooth στις ρυθμίσεις του τηλεφώνου και βεβαιωθείτε ότι η εφαρμογή έχει άδεια.",
|
||||
"未重置锁": "Η κλειδαριά δεν έχει επαναφερθεί",
|
||||
"请先将锁重置为出厂状态,重置方法详见上一步指引。": "Επαναφέρετε πρώτα την κλειδαριά στις εργοστασιακές ρυθμίσεις, δείτε τον προηγούμενο οδηγό για τη μέθοδο.",
|
||||
"找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。": "Βρείτε το κουμπί επαναφοράς στην κλειδαριά, κρατήστε το πατημένο μέχρι να ακούσετε έναν ήχο ή να αναβοσβήσει το φως.",
|
||||
"锁电量过低": "Χαμηλή μπαταρία κλειδαριάς",
|
||||
"锁电量过低可能导致无法正常连接和添加。": "Η χαμηλή μπαταρία μπορεί να προκαλέσει προβλήματα σύνδεσης και προσθήκης.",
|
||||
"请更换电池后重试。": "Αλλάξτε μπαταρία και δοκιμάστε ξανά.",
|
||||
"距离过远": "Η απόσταση είναι πολύ μεγάλη",
|
||||
"请确保手机与锁的距离在有效范围内。": "Βεβαιωθείτε ότι η απόσταση μεταξύ τηλεφώνου και κλειδαριάς είναι εντός του επιτρεπτού ορίου.",
|
||||
"将手机靠近锁,距离保持在1米以内。": "Φέρτε το τηλέφωνο κοντά στην κλειδαριά, διατηρώντας την απόσταση κάτω από 1 μέτρο.",
|
||||
"锁已被其他用户添加": "Η κλειδαριά έχει προστεθεί από άλλον χρήστη",
|
||||
"如果锁已被其他用户添加,需要先解除绑定。": "Αν η κλειδαριά έχει προστεθεί από άλλον, πρέπει πρώτα να αποσυνδεθεί.",
|
||||
"请联系锁的管理员解除绑定,或使用管理员权限重置锁。": "Επικοινωνήστε με τον διαχειριστή της κλειδαριάς ή χρησιμοποιήστε δικαιώματα διαχειριστή για επαναφορά.",
|
||||
"使用小程序": "Χρήση mini-program",
|
||||
"如果App无法正常添加锁,可以尝试使用小程序版本。": "Αν η εφαρμογή δεν μπορεί να προσθέσει την κλειδαριά, δοκιμάστε το mini-program.",
|
||||
"打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。": "Ανοίξτε το WeChat, αναζητήστε το '星星锁Lite' mini-program και δοκιμάστε να προσθέσετε την κλειδαριά.",
|
||||
"尝试升级固件": "Δοκιμάστε αναβάθμιση υλικολογισμικού",
|
||||
"升级说明": "Οδηγίες αναβάθμισης",
|
||||
"如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:": "Αν τα παραπάνω δεν βοηθήσουν, δοκιμάστε αναβάθμιση υλικολογισμικού. Πριν την αναβάθμιση βεβαιωθείτε:",
|
||||
"升级注意事项": "Η μπαταρία της κλειδαριάς είναι επαρκής\n• Έχετε το σωστό αρχείο υλικολογισμικού\n• Μην διακόψετε τη σύνδεση κατά την αναβάθμιση",
|
||||
"找不到锁?点此查看。": "Δεν βρίσκετε την κλειδαριά; Πατήστε εδώ.",
|
||||
"常见问题": "Συχνές ερωτήσεις",
|
||||
"固件升级": "Αναβάθμιση υλικολογισμικού",
|
||||
"固件升级描述": "Κάντε κλικ στο κουμπί \"Επιστροφή στις ρυθμίσεις συσκευής\" στην κάτω δεξιά γωνία για να επιστρέψετε στη σελίδα ρυθμίσεων συσκευής και να δοκιμάσετε να αναβαθμίσετε το υλικολογισμικό.",
|
||||
"邮箱地址必须包含@符号": "Η διεύθυνση email πρέπει να περιέχει '@'.",
|
||||
"手机号只能包含数字": "Ο αριθμός τηλεφώνου μπορεί να περιέχει μόνο αριθμούς",
|
||||
"重置方法请查阅设备说明书": "Δείτε το πρόγραμμα χρήσης της συσκευής",
|
||||
"我已重置,继续添加": "Επαναφορά ολοκληρώθηκε, συνέχεια",
|
||||
"添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。": "Πριν προσθέσετε τη συσκευή, βεβαιωθείτε ότι έχει επαναφερθεί στις εργοστασιακές ρυθμίσεις. Μετά την επαναφορά, όλα τα δεδομένα των χρηστών, συμπεριλαμβανομένων των αποτυπώσεων δακτυλίων, κωδικών και καρτών, θα διαγραφούν."
|
||||
"语音包设置": "Ρυθμίσεις πακέτου φωνής",
|
||||
"第三方平台设置": "Ρυθμίσεις πλατφόρμας τρίτων",
|
||||
"涂鸦智能": "Tuya Smart",
|
||||
"锁语音包设置": "Ρυθμίσεις κλειδώματος πακέτου φωνής",
|
||||
"(中国台湾)": "(中国台湾)",
|
||||
"男声": "Ανδρική φωνή",
|
||||
"女声": "Γυναικεία φωνή",
|
||||
"您的图像和视频数据仅保留": "Τα δεδομένα εικόνας και βίντεο διατηρούνται μόνο",
|
||||
"后图像和视频数据将会失效,开通": "Μετά από αυτό, τα δεδομένα εικόνας και βίντεο θα είναι άκυρα και θα ενεργοποιηθούν",
|
||||
"云存会员": "Συνδρομή Cloud Storage",
|
||||
"服务,图像视频信息随心存!": "Οι πληροφορίες εξυπηρέτησης, εικόνας και βίντεο είναι στην καρδιά σας!",
|
||||
"图像": "εικόνα",
|
||||
"视频": "Βίντεο",
|
||||
"当前国家不支持手机验证码注册,请使用邮箱进行注册": "Προς το παρόν, η χώρα δεν υποστηρίζει την εγγραφή κωδικού επαλήθευσης κινητού τηλεφώνου, χρησιμοποιήστε τη διεύθυνση email σας για να εγγραφείτε",
|
||||
"注:": "Σημείωση:",
|
||||
"必需在开始时间24小时内使用一次,否则将失效": "Πρέπει να χρησιμοποιηθεί μία φορά εντός 24 ωρών από την ώρα έναρξης, διαφορετικά θα λήξει",
|
||||
"这是单次密码,只能使用一次": "Είναι ένας μοναδικός κωδικός πρόσβασης. Μπορεί να χρησιμοποιηθεί μόνο μία φορά.",
|
||||
"您好": "Γεια σας.",
|
||||
"您的开门密码是": "Ο κωδικός σας είναι",
|
||||
"开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标": "Όταν ξεκλειδώσετε, ενεργοποιήστε το πληκτρολόγιο κλειδαριού και πληκτρολογήστε τον κωδικό πρόσβασης, ο οποίος τελειώνει με το νούμερο # και το νούμερο # είναι στην κάτω δεξιά γωνία του πληκτρολόγιου, μπορεί να είναι ένα άλλο εικονίδιο"
|
||||
}
|
||||
2382
lan/lan_en.json
@ -1065,7 +1065,7 @@
|
||||
"波兰语": "Polski",
|
||||
"斯洛伐克语": "Slovenčina",
|
||||
"捷克语": "Čeština",
|
||||
"希腊语": "Ελληνικά",
|
||||
"希腊语": "ελληνικά",
|
||||
"希伯来语": "עברית",
|
||||
"塞尔维亚语": "Српски",
|
||||
"土耳其语": "Türkçe",
|
||||
@ -1078,8 +1078,11 @@
|
||||
"印度尼西亚语": "Bahasa Indonesia",
|
||||
"芬兰语": "Suomi",
|
||||
"丹麦语": "Dansk",
|
||||
"印地语": "हिंदीName",
|
||||
"印地语": "हिंदी",
|
||||
"乌尔都语": "اوردو",
|
||||
"亚美尼亚语": "Հայերեն",
|
||||
"格鲁吉亚语": "ქართული",
|
||||
"巴西葡萄牙语": "Português do Brasil",
|
||||
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
|
||||
"繁体中文(中国香港)": "繁體中文(中國香港)",
|
||||
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Después del reinicio, se eliminarán las venas metacarpiales de la cerradura. ¿Está seguro de que desea restablecer?",
|
||||
@ -1152,40 +1155,24 @@
|
||||
"3.安装Google Home APP,点击左上角的加号按钮": "3. Instale la aplicación de Google Home y haga clic en el botón más en la esquina superior izquierda",
|
||||
"暂无最新记录": "Actualmente no hay registros más recientes disponibles",
|
||||
"请将手机切换至2.4G WiFi进行手动连接": "Por favor cambia tu teléfono a 2.4G WiFi para la conexión manual",
|
||||
"设备重置": "Restablecimiento del dispositivo",
|
||||
"请确认设备已重置": "Por favor, confirme que el dispositivo ha sido restablecido",
|
||||
"添加设备前,请确保设备已重置为出厂状态。": "Antes de agregar el dispositivo, asegúrese de que se haya restablecido a la configuración de fábrica.",
|
||||
"设备已重置": "El dispositivo ha sido restablecido",
|
||||
"加不了锁常见问题": "Problemas comunes al agregar la cerradura",
|
||||
"蓝牙未开启或未授权": "Bluetooth no está activado o autorizado",
|
||||
"请确保手机蓝牙已开启,并授权App使用蓝牙权限。": "Asegúrese de que el Bluetooth esté activado y la aplicación tenga permisos.",
|
||||
"检查手机设置中的蓝牙权限,确保已授权给App。": "Verifique los permisos de Bluetooth en la configuración del teléfono y asegúrese de que la aplicación esté autorizada.",
|
||||
"未重置锁": "La cerradura no ha sido restablecida",
|
||||
"请先将锁重置为出厂状态,重置方法详见上一步指引。": "Restablezca primero la cerradura a la configuración de fábrica, consulte el paso anterior.",
|
||||
"找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。": "Busque el botón de restablecimiento en la cerradura, manténgalo presionado hasta escuchar un pitido o ver la luz indicadora parpadear.",
|
||||
"锁电量过低": "Batería de la cerradura baja",
|
||||
"锁电量过低可能导致无法正常连接和添加。": "La batería baja puede causar problemas de conexión y adición.",
|
||||
"请更换电池后重试。": "Cambie la batería y vuelva a intentarlo.",
|
||||
"距离过远": "Demasiado lejos",
|
||||
"请确保手机与锁的距离在有效范围内。": "Asegúrese de que el teléfono esté dentro del alcance de la cerradura.",
|
||||
"将手机靠近锁,距离保持在1米以内。": "Acerque el teléfono a la cerradura, mantenga la distancia dentro de 1 metro.",
|
||||
"锁已被其他用户添加": "La cerradura ya ha sido agregada por otro usuario",
|
||||
"如果锁已被其他用户添加,需要先解除绑定。": "Si la cerradura ya ha sido agregada, desvincúlela primero.",
|
||||
"请联系锁的管理员解除绑定,或使用管理员权限重置锁。": "Contacte al administrador de la cerradura para desvincularla o use permisos de administrador para restablecerla.",
|
||||
"使用小程序": "Usar mini programa",
|
||||
"如果App无法正常添加锁,可以尝试使用小程序版本。": "Si la aplicación no funciona, pruebe la versión mini programa.",
|
||||
"打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。": "Abra WeChat, busque '星星锁Lite' e intente agregar la cerradura a través del mini programa.",
|
||||
"尝试升级固件": "Intentar actualizar el firmware",
|
||||
"升级说明": "Instrucciones de actualización",
|
||||
"如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:": "Si nada funciona, intente actualizar el firmware de la cerradura. Antes de actualizar, asegúrese de que:",
|
||||
"升级注意事项": "• La batería de la cerradura está suficientemente cargada\n• Tiene el archivo de firmware correcto\n• No desconecte durante la actualización",
|
||||
"找不到锁?点此查看。": "¿No encuentra la cerradura? Haga clic aquí.",
|
||||
"常见问题": "Problemas comunes",
|
||||
"固件升级": "Actualización de firmware",
|
||||
"固件升级描述": "Haga clic en el botón \"Regresar a la configuración del dispositivo\" en la parte inferior derecha para volver a la página de configuración del dispositivo y probar la actualización del firmware.",
|
||||
"邮箱地址必须包含@符号": "La dirección de correo electrónico debe contener '@'.",
|
||||
"手机号只能包含数字": "El número de teléfono solo puede contener números",
|
||||
"重置方法请查阅设备说明书": "Consulte el manual del dispositivo",
|
||||
"我已重置,继续添加": "He restablecido, continúe",
|
||||
"添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。": "Antes de agregar el dispositivo, asegúrese de que se haya restablecido a la configuración de fábrica. Después del restablecimiento, se eliminarán todos los datos de los usuarios, incluidos los dedos, las contraseñas y las tarjetas."
|
||||
"语音包设置": "Configuración del paquete de voz",
|
||||
"第三方平台设置": "Configuración de la Plataforma de terceros",
|
||||
"涂鸦智能": "Tuya Smart",
|
||||
"锁语音包设置": "Configuración del paquete de voz de bloqueo",
|
||||
"(中国台湾)": "(中国台湾)",
|
||||
"男声": "Voz masculina",
|
||||
"女声": "Voz femenina",
|
||||
"您的图像和视频数据仅保留": "Solo se conservan los datos de imagen y vídeo",
|
||||
"后图像和视频数据将会失效,开通": "Después de eso, los datos de imagen y video no serán válidos y se activarán",
|
||||
"云存会员": "Membresía de almacenamiento en la nube",
|
||||
"服务,图像视频信息随心存!": "¡La información de servicio, imagen y video está en su corazón!",
|
||||
"图像": "imagen",
|
||||
"视频": "Vídeo",
|
||||
"当前国家不支持手机验证码注册,请使用邮箱进行注册": "Actualmente, el país no admite el registro de códigos de verificación de teléfonos móviles, utilice su dirección de correo electrónico para registrarse",
|
||||
"注:": "Nota:",
|
||||
"必需在开始时间24小时内使用一次,否则将失效": "Debe usarse una vez dentro de las 24 horas de inicio, de lo contrario caducará.",
|
||||
"这是单次密码,只能使用一次": "Esta es una contraseña única y solo se puede usar una vez.",
|
||||
"您好": "Hola",
|
||||
"您的开门密码是": "Su contraseña de apertura es",
|
||||
"开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标": "Al abrir la cerradura, primero active el teclado de la cerradura e introduzca la contraseña para terminar con el número, la tecla de número está en la esquina inferior derecha del teclado, puede ser otro icono"
|
||||
}
|
||||
@ -55,7 +55,7 @@
|
||||
"密码详情": "Parooli infoComment",
|
||||
"修改密码": "Parooli muutmine",
|
||||
"添加虹膜": "Lisa Iiris",
|
||||
"添加门磁": "UksessensorName",
|
||||
"添加门磁": "Uksessensor",
|
||||
"添加无线键盘": "Juhtmeta klaviatuuri",
|
||||
"添加手掌": "Lisa palmi",
|
||||
"请输入员工账号": "Sisesta töötaja konto",
|
||||
@ -101,7 +101,7 @@
|
||||
"基本信息": "Põhimõtted",
|
||||
"无线键盘": "Juhtmeta klaviatuuri",
|
||||
"选择无线键盘": "Lisa klaviatuuri",
|
||||
"门磁": "UksessensorName",
|
||||
"门磁": "Uksessensor",
|
||||
"自动闭锁": "Automaatne lukustamine",
|
||||
"锁声音": "Heli lukustamine",
|
||||
"防撬报警": "Häire Tamperi",
|
||||
@ -185,7 +185,7 @@
|
||||
"删除账号": "Kustuta konto",
|
||||
"个人信息": "Konto teave",
|
||||
"头像": "Avatar",
|
||||
"昵称": "NikNameName",
|
||||
"昵称": "NikName",
|
||||
"请输入昵称": "Palun sisesta oma hüüdnimi.",
|
||||
"修改昵称": "Nimeta ümber",
|
||||
"修改账号": "Redigeeri konto",
|
||||
@ -503,8 +503,8 @@
|
||||
"您的钥匙已冻结": "Sinu võti on külmutatud",
|
||||
"您的钥匙已过期": "Sinu võti aegus",
|
||||
"常开模式开启": "Lukk on läbisõidurežiimis",
|
||||
"超级管理员": "Super adminName",
|
||||
"授权管理员": "Lubatud adminName",
|
||||
"超级管理员": "Super admin",
|
||||
"授权管理员": "Lubatud admin",
|
||||
"普通用户": "Tavaline kasutaja",
|
||||
"余": "Saldos",
|
||||
"天": "Päev",
|
||||
@ -558,7 +558,7 @@
|
||||
"密码生成后,请在当日23:59前使用,否则过0点后失效。清空码用于清空今天0点之前生成的所有密码。": "Pärast parooli loomist palun kasutage seda enne 23:59 samal päeval, vastasel juhul on see kehtetu pärast kella 0. Selge koodi kasutatakse kõigi loodud paroolide tühjendamiseks täna enne kella 0.",
|
||||
"密码生成后,请在当日23:59前使用,否则过0点后失效。": "Pärast parooli loomist palun kasutage seda enne 23:59 samal päeval, vastasel juhul on see kehtetu pärast kella 0.",
|
||||
"清空密码底部提示": "Parool kehtib kuni 23:59 tühjendamise päeval",
|
||||
"相机": "KaameraName",
|
||||
"相机": "Kaamera",
|
||||
"相册": "Fotod",
|
||||
"读写": "Säilitamine",
|
||||
"定位": "Asukoht",
|
||||
@ -582,7 +582,7 @@
|
||||
"商城": "Kaubamaja",
|
||||
"我的": "Minu",
|
||||
"微信公众号推送": "Jutt avalik konto",
|
||||
"蓝牙": "BluetoothName",
|
||||
"蓝牙": "Bluetooth",
|
||||
"需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "Juurdepääs Bluetooth-i õigustele on vaja, et kasutada asukoha lisamise funktsiooni asukoha teavet",
|
||||
"请输入Email": "Sisesta oma e- postil",
|
||||
"请输入手机号": "Sisesta oma telefoninumber",
|
||||
@ -604,7 +604,7 @@
|
||||
"家人": "Pereliigem",
|
||||
"保存": "Salvesta",
|
||||
"APP推送": "APP lükkamine",
|
||||
"管理员": "AdministraatorName",
|
||||
"管理员": "Administraator",
|
||||
"未启用": "Pole lubatud",
|
||||
"已启用": "Lubatud",
|
||||
"省电模式": "Energiasäästu režiim",
|
||||
@ -613,7 +613,7 @@
|
||||
"自定义模式": "Kohandatud režiim",
|
||||
"猫眼设置": "Kassilmade seadmine",
|
||||
"猫眼工作模式": "Kassilmade töörežiim",
|
||||
"自动亮屏": "Automaatne erekraanName",
|
||||
"自动亮屏": "Automaatne erekraan",
|
||||
"亮屏持续时间": "Ekraan õigel ajal",
|
||||
"逗留警告": "Hoiatus.",
|
||||
"异常警告": "Ebatavaline hoiatus.",
|
||||
@ -745,7 +745,7 @@
|
||||
"为了让您及时收到重要通知和更新,我们需要获取通知权限。请点击“确定”按钮,然后在设置页面中启用通知权限。": "Oluliste uuenduste saamiseks klõpsake \"OK\" ja lubage teated seaded.",
|
||||
"开启后,可通过长按锁上的设置键重新上电,用APP重新添加": "Pärast sisselülitamist saad uuesti sisse vajutada klahvi lukk ja lisada see uuesti APP abil",
|
||||
"已有": "Praegune",
|
||||
"新增": "UusName",
|
||||
"新增": "Uus",
|
||||
"账号格式错误": "Halb vormingus",
|
||||
"接收者信息为空": "Saaja teave on tühi",
|
||||
"请输入时间(秒)": "Palun sisesta kellaaeg (sek)",
|
||||
@ -770,7 +770,7 @@
|
||||
"转移成功": "Ülekandmine",
|
||||
"该已锁被删除": "Lukustatud on kustutatud",
|
||||
"授权管理员只能查看和管理自己下发的钥匙、密码等权限": "Volitatud admin saab hallata ainult salakoode,ekeys ja etccreated ise.",
|
||||
"添加授权管理员": "Loo adminName",
|
||||
"添加授权管理员": "Loo admin",
|
||||
"导出记录": "Eksporditeenused",
|
||||
"选择时间段": "Vali ajavahemik",
|
||||
"导出": "Eksport",
|
||||
@ -834,7 +834,7 @@
|
||||
"微信": "WeChat",
|
||||
"朋友圈": "Hetked",
|
||||
"QQ": "QQ",
|
||||
"QQ空间": "QQZoneName",
|
||||
"QQ空间": "QQZone",
|
||||
"微博": "WeiboComment",
|
||||
"FaceBook": "FaceBook",
|
||||
"链接": "Lingi",
|
||||
@ -1065,7 +1065,7 @@
|
||||
"波兰语": "Polski",
|
||||
"斯洛伐克语": "Slovenčina",
|
||||
"捷克语": "Čeština",
|
||||
"希腊语": "Ελληνικά",
|
||||
"希腊语": "ελληνικά",
|
||||
"希伯来语": "עברית",
|
||||
"塞尔维亚语": "Српски",
|
||||
"土耳其语": "Türkçe",
|
||||
@ -1078,8 +1078,11 @@
|
||||
"印度尼西亚语": "Bahasa Indonesia",
|
||||
"芬兰语": "Suomi",
|
||||
"丹麦语": "Dansk",
|
||||
"印地语": "हिंदीName",
|
||||
"印地语": "हिंदी",
|
||||
"乌尔都语": "اوردو",
|
||||
"亚美尼亚语": "Հայերեն",
|
||||
"格鲁吉亚语": "ქართული",
|
||||
"巴西葡萄牙语": "Português do Brasil",
|
||||
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
|
||||
"繁体中文(中国香港)": "繁體中文(中國香港)",
|
||||
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Pärast lähtestamist kustutatakse luku metakarpaalveenid. Kas tõesti soovid lähtestada?",
|
||||
@ -1152,40 +1155,24 @@
|
||||
"3.安装Google Home APP,点击左上角的加号按钮": "3. Installige rakendus Google Home ja klõpsake vasakus ülanurgas plussnuppu",
|
||||
"暂无最新记录": "Praegu pole uusimaid andmeid saadaval",
|
||||
"请将手机切换至2.4G WiFi进行手动连接": "Käsitsi ühendamiseks lülitage telefon 2.4G WiFi-le",
|
||||
"设备重置": "Seadme lähtestamine",
|
||||
"请确认设备已重置": "Palun kinnitage, et seade on lähtestatud",
|
||||
"添加设备前,请确保设备已重置为出厂状态。": "Enne seadme lisamist veenduge, et see on tehaseseadetele lähtestatud.",
|
||||
"设备已重置": "Seade on lähtestatud",
|
||||
"加不了锁常见问题": "Levinumad probleemid luku lisamisel",
|
||||
"蓝牙未开启或未授权": "Bluetooth pole sisse lülitatud või pole lubatud",
|
||||
"请确保手机蓝牙已开启,并授权App使用蓝牙权限。": "Veenduge, et Bluetooth on sisse lülitatud ja rakendusel on luba seda kasutada.",
|
||||
"检查手机设置中的蓝牙权限,确保已授权给App。": "Kontrollige telefoni seadetes Bluetoothi õigusi ja veenduge, et rakendus on lubatud.",
|
||||
"未重置锁": "Lukku pole lähtestatud",
|
||||
"请先将锁重置为出厂状态,重置方法详见上一步指引。": "Lähtestage lukk esmalt tehaseseadetele, vt eelmist sammu.",
|
||||
"找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。": "Leidke lukul lähtestusnupp, hoidke seda all, kuni kuulete piiksu või näete indikaatorit vilkumas.",
|
||||
"锁电量过低": "Luku aku on liiga tühi",
|
||||
"锁电量过低可能导致无法正常连接和添加。": "Madal aku võib põhjustada ühenduse ja lisamise probleeme.",
|
||||
"请更换电池后重试。": "Vahetage patarei ja proovige uuesti.",
|
||||
"距离过远": "Liiga kaugel",
|
||||
"请确保手机与锁的距离在有效范围内。": "Veenduge, et telefon on luku tööraadiuses.",
|
||||
"将手机靠近锁,距离保持在1米以内。": "Hoidke telefon lukule lähedal, kuni 1 meetri kaugusel.",
|
||||
"锁已被其他用户添加": "Lukk on juba teise kasutaja poolt lisatud",
|
||||
"如果锁已被其他用户添加,需要先解除绑定。": "Kui lukk on juba lisatud, eemaldage sidumine esmalt.",
|
||||
"请联系锁的管理员解除绑定,或使用管理员权限重置锁。": "Võtke ühendust luku administraatoriga sidumise eemaldamiseks või kasutage administraatori õigusi lähtestamiseks.",
|
||||
"使用小程序": "Kasuta mini-rakendust",
|
||||
"如果App无法正常添加锁,可以尝试使用小程序版本。": "Kui rakendus ei tööta, proovige mini-rakendust.",
|
||||
"打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。": "Avage WeChat, otsige '星星锁Lite' ja proovige lisada lukk mini-rakenduse kaudu.",
|
||||
"尝试升级固件": "Proovige uuendada püsivara",
|
||||
"升级说明": "Uuendamise juhised",
|
||||
"如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:": "Kui miski ei aita, proovige lukku püsivara uuendada. Enne uuendamist veenduge:",
|
||||
"升级注意事项": "• Luku aku on piisavalt laetud\n• Teil on õige püsivara fail\n• Ärge katkestage ühendust uuendamise ajal",
|
||||
"找不到锁?点此查看。": "Ei leia lukku? Klõpsa siia.",
|
||||
"常见问题": "Tavalised probleemid",
|
||||
"固件升级": "Firmwarei uuendus",
|
||||
"固件升级描述": "Kliki paremas allnurgas \"Tagasi seadme seadistuste\" nuppu, et tagasi seadme seadistuste lehele ja proovida uuendada luku püsivara.",
|
||||
"邮箱地址必须包含@符号": "E-posti aadress peab sisaldama '@'.",
|
||||
"手机号只能包含数字": "Telefoninumber võib sisaldada ainult numbreid",
|
||||
"重置方法请查阅设备说明书": "Vaadake seadme kasutusjuhiseid",
|
||||
"我已重置,继续添加": "Lähtestamine on lõpetatud, jätkan lisamist",
|
||||
"添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。": "Enne seadme lisamist veenduge, et see on tehaseseadetele lähtestatud. Lähtestamise järel kustutatakse kõik seadme kasutajate andmed, sealhulgas sõrmejäljed, paroolid ja kortid."
|
||||
"语音包设置": "Häälepaketi seadistused",
|
||||
"第三方平台设置": "Kolmanda osapoole platvormi seaded",
|
||||
"涂鸦智能": "Tuya Smart",
|
||||
"锁语音包设置": "Lukustage häälepaketi seaded",
|
||||
"(中国台湾)": "(中国台湾)",
|
||||
"男声": "Meeste hääl",
|
||||
"女声": "Naiste hääl",
|
||||
"您的图像和视频数据仅保留": "Teie pildi- ja videoandmeid säilitatakse ainult",
|
||||
"后图像和视频数据将会失效,开通": "Pärast seda on pildi- ja videoandmed kehtetud ja aktiveeritud",
|
||||
"云存会员": "Pilvesalvestuse liikmelisus",
|
||||
"服务,图像视频信息随心存!": "Teenindus-, pildi- ja videoteave on teie südames!",
|
||||
"图像": "Piltide",
|
||||
"视频": "Video",
|
||||
"当前国家不支持手机验证码注册,请使用邮箱进行注册": "Praegu ei toeta riik mobiiltelefoni kinnituskoodi registreerimist, palun kasutage registreerumiseks oma e-posti aadressi",
|
||||
"注:": "Märkus:",
|
||||
"必需在开始时间24小时内使用一次,否则将失效": "Kasutada tuleb 24 tunni jooksul, muidu kaotab kehtivus.",
|
||||
"这是单次密码,只能使用一次": "See on ühekordne parool, mida saab kasutada ainult üks kord.",
|
||||
"您好": "Tere. Tere.",
|
||||
"您的开门密码是": "Teie salasõna on",
|
||||
"开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标": "Lukustamisel aktiveerige klaviatuur, seejärel sisestage parool, mis lõpeb numbriga # klaviatuuri paremas alumises nurgas, võib olla muud ikoonid"
|
||||
}
|
||||
@ -185,7 +185,7 @@
|
||||
"删除账号": "Poista tili",
|
||||
"个人信息": "Tilitiedot",
|
||||
"头像": "Avatar",
|
||||
"昵称": "NickNameName",
|
||||
"昵称": "NickName",
|
||||
"请输入昵称": "Anna nimitysi",
|
||||
"修改昵称": "Nimeä uudelleen",
|
||||
"修改账号": "Muokkaa tiliä",
|
||||
@ -216,7 +216,7 @@
|
||||
"添加网关": "Lisää porttiComment",
|
||||
"重新通电": "Yhdistä teho",
|
||||
"指示灯": "Indikaattori Valo",
|
||||
"选择网关": "Valitse porttiName",
|
||||
"选择网关": "Valitse portti",
|
||||
"不支持5G WiFi网络,请选择2.4G WiFi网络进行配置": "5G ei ole tuettu, valitse 2.4G:n WiFi.",
|
||||
"WiFi密码": "WiFi",
|
||||
"请输入WiFi密码": "Syötä WiFi- salasana.",
|
||||
@ -232,7 +232,7 @@
|
||||
"使用静态IP": "Käytä staattista IP",
|
||||
"请输入IP地址": "Anna IP- osoite",
|
||||
"请输入子网掩码": "Syötä aliverkkomaa",
|
||||
"请输入默认网关": "Siirry oletusporttiName",
|
||||
"请输入默认网关": "Siirry oletusportti",
|
||||
"所有锁": "Kaikki lukot",
|
||||
"搜索所有类型的锁": "Skannaa kaikenlaisia lukkoja",
|
||||
"门锁": "Ovilukko",
|
||||
@ -582,7 +582,7 @@
|
||||
"商城": "Ostoskeskus",
|
||||
"我的": "Minun",
|
||||
"微信公众号推送": "Keskustele julkinen tili",
|
||||
"蓝牙": "BluetoothName",
|
||||
"蓝牙": "Bluetooth",
|
||||
"需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "Pääsy Bluetooth-oikeuksiin vaaditaan käyttämään sijaintitietoja lisätä avaintoiminnon lisäämiseksi",
|
||||
"请输入Email": "Anna sähköposti",
|
||||
"请输入手机号": "Anna puhelinnumero",
|
||||
@ -834,7 +834,7 @@
|
||||
"微信": "Wechat",
|
||||
"朋友圈": "Hetket",
|
||||
"QQ": "QQ",
|
||||
"QQ空间": "QQZoneName",
|
||||
"QQ空间": "QQZone",
|
||||
"微博": "Weibo",
|
||||
"FaceBook": "FaceBook",
|
||||
"链接": "Linkkiä",
|
||||
@ -1065,7 +1065,7 @@
|
||||
"波兰语": "Polski",
|
||||
"斯洛伐克语": "Slovenčina",
|
||||
"捷克语": "Čeština",
|
||||
"希腊语": "Ελληνικά",
|
||||
"希腊语": "ελληνικά",
|
||||
"希伯来语": "עברית",
|
||||
"塞尔维亚语": "Српски",
|
||||
"土耳其语": "Türkçe",
|
||||
@ -1078,8 +1078,11 @@
|
||||
"印度尼西亚语": "Bahasa Indonesia",
|
||||
"芬兰语": "Suomi",
|
||||
"丹麦语": "Dansk",
|
||||
"印地语": "हिंदीName",
|
||||
"印地语": "हिंदी",
|
||||
"乌尔都语": "اوردو",
|
||||
"亚美尼亚语": "Հայերեն",
|
||||
"格鲁吉亚语": "ქართული",
|
||||
"巴西葡萄牙语": "Português do Brasil",
|
||||
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
|
||||
"繁体中文(中国香港)": "繁體中文(中國香港)",
|
||||
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Kun lukko on nollattu, metakarppinen suoneet poistetaan. Haluatko varmasti palauttaa?",
|
||||
@ -1152,40 +1155,24 @@
|
||||
"3.安装Google Home APP,点击左上角的加号按钮": "3. Asenna Google Home -sovellus ja napsauta vasemmassa yläkulmassa olevaa pluspainiketta",
|
||||
"暂无最新记录": "Viimeisimpiä tietoja ei ole tällä hetkellä saatavilla",
|
||||
"请将手机切换至2.4G WiFi进行手动连接": "Vaihda puhelimesi 2.4G WiFi-verkkoon manuaalista yhteyttä varten",
|
||||
"设备重置": "Laitteen nollaus",
|
||||
"请确认设备已重置": "Vahvista, että laite on nollattu",
|
||||
"添加设备前,请确保设备已重置为出厂状态。": "Varmista ennen laitteen lisäämistä, että se on palautettu tehdasasetuksiin.",
|
||||
"设备已重置": "Laite on nollattu",
|
||||
"加不了锁常见问题": "Yleiset ongelmat lukon lisäämisessä",
|
||||
"蓝牙未开启或未授权": "Bluetooth ei ole päällä tai ei ole sallittu",
|
||||
"请确保手机蓝牙已开启,并授权App使用蓝牙权限。": "Varmista, että Bluetooth on päällä ja sovelluksella on lupa käyttää sitä.",
|
||||
"检查手机设置中的蓝牙权限,确保已授权给App。": "Tarkista puhelimen asetuksista Bluetooth-oikeudet ja varmista, että sovellus on sallittu.",
|
||||
"未重置锁": "Lukkoa ei ole nollattu",
|
||||
"请先将锁重置为出厂状态,重置方法详见上一步指引。": "Nollaa lukko ensin tehdasasetuksiin, katso edellinen vaihe.",
|
||||
"找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。": "Etsi lukosta nollauspainike, pidä sitä painettuna, kunnes kuulet piippauksen tai näet valon vilkkuvan.",
|
||||
"锁电量过低": "Lukon akku on liian alhainen",
|
||||
"锁电量过低可能导致无法正常连接和添加。": "Alhainen akku voi aiheuttaa ongelmia yhteydessä ja lisäämisessä.",
|
||||
"请更换电池后重试。": "Vaihda paristo ja yritä uudelleen.",
|
||||
"距离过远": "Liian kaukana",
|
||||
"请确保手机与锁的距离在有效范围内。": "Varmista, että puhelin on lukon kantaman sisällä.",
|
||||
"将手机靠近锁,距离保持在1米以内。": "Pidä puhelin lähellä lukkoa, alle 1 metrin päässä.",
|
||||
"锁已被其他用户添加": "Lukko on jo lisätty toisen käyttäjän toimesta",
|
||||
"如果锁已被其他用户添加,需要先解除绑定。": "Jos lukko on jo lisätty, poista ensin paritus.",
|
||||
"请联系锁的管理员解除绑定,或使用管理员权限重置锁。": "Ota yhteyttä lukon ylläpitäjään parituksen poistamiseksi tai käytä ylläpitäjän oikeuksia nollaukseen.",
|
||||
"使用小程序": "Käytä mini-sovellusta",
|
||||
"如果App无法正常添加锁,可以尝试使用小程序版本。": "Jos sovellus ei toimi, kokeile mini-sovellusta.",
|
||||
"打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。": "Avaa WeChat, etsi '星星锁Lite' ja kokeile lisätä lukko mini-sovelluksen kautta.",
|
||||
"尝试升级固件": "Kokeile päivittää laiteohjelmisto",
|
||||
"升级说明": "Päivitysohjeet",
|
||||
"如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:": "Jos mikään ei auta, kokeile päivittää lukon laiteohjelmisto. Varmista ennen päivitystä:",
|
||||
"升级注意事项": "• Lukon akku on riittävästi ladattu\n• Oikea laiteohjelmistotiedosto on saatavilla\n• Älä katkaise yhteyttä päivityksen aikana",
|
||||
"找不到锁?点此查看。": "Etkö löydä lukkoa? Klikkaa tästä.",
|
||||
"常见问题": "Yleiset ongelmat",
|
||||
"固件升级": "Laitteen ohjelmiston päivitys",
|
||||
"固件升级描述": "Klikkaa \"Palauta laitteen asetukset\" -painiketta oikeassa alakulmassa, jotta voit palata laitteen asetuksiin ja yrittää päivittää laitteen ohjelmiston.",
|
||||
"邮箱地址必须包含@符号": "Sähköpostiosoitteessa on oltava '@'.",
|
||||
"手机号只能包含数字": "Puhelinnumero voi sisältää vain numerot",
|
||||
"重置方法请查阅设备说明书": "Katso laitteen käyttöohje",
|
||||
"我已重置,继续添加": "Nollaus onnistui, jatka lisäämistä",
|
||||
"添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。": "Varmista ennen laitteen lisäämistä, että se on palautettu tehdasasetuksiin. Nollauksen jälkeen kaikki laitteen käyttäjätietoja, kuten ääni, salasana ja kortit, poistetaan."
|
||||
"语音包设置": "Äänipaketin asetukset",
|
||||
"第三方平台设置": "Kolmannen osapuolen alustan asetukset",
|
||||
"涂鸦智能": "Tuya Smart",
|
||||
"锁语音包设置": "Lukitse äänipaketin asetukset",
|
||||
"(中国台湾)": "(中国台湾)",
|
||||
"男声": "Miehen ääni",
|
||||
"女声": "Naisten ääni",
|
||||
"您的图像和视频数据仅保留": "Kuva- ja videotietosi säilytetään vain",
|
||||
"后图像和视频数据将会失效,开通": "Sen jälkeen kuva- ja videotiedot ovat virheellisiä ja aktivoituvat",
|
||||
"云存会员": "Pilvitallennustilan jäsenyys",
|
||||
"服务,图像视频信息随心存!": "Palvelu-, kuva- ja videotiedot ovat sydämessäsi!",
|
||||
"图像": "kuva",
|
||||
"视频": "Video",
|
||||
"当前国家不支持手机验证码注册,请使用邮箱进行注册": "Tällä hetkellä maa ei tue matkapuhelimen vahvistuskoodin rekisteröintiä, käytä rekisteröitymiseen sähköpostiosoitettasi",
|
||||
"注:": "Huomautus:",
|
||||
"必需在开始时间24小时内使用一次,否则将失效": "Käytä kerran 24 tunnin kuluessa, muuten se päättyy.",
|
||||
"这是单次密码,只能使用一次": "Tämä on yksittäinen salasana, jota voidaan käyttää vain kerran.",
|
||||
"您好": "Tervehdys.",
|
||||
"您的开门密码是": "Salasanasi on",
|
||||
"开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标": "Kun avaat lukituksen, aktivoi lukitusnäppäimistö ensin ja kirjoita salasana, joka päättyy # numerolla, # näppäimistö on näppäimistön oikeassa alakulmassa, mahdollisesti muut kuvakkeet"
|
||||
}
|
||||
@ -1065,7 +1065,7 @@
|
||||
"波兰语": "Polski",
|
||||
"斯洛伐克语": "Slovenčina",
|
||||
"捷克语": "Čeština",
|
||||
"希腊语": "Ελληνικά",
|
||||
"希腊语": "ελληνικά",
|
||||
"希伯来语": "עברית",
|
||||
"塞尔维亚语": "Српски",
|
||||
"土耳其语": "Türkçe",
|
||||
@ -1078,8 +1078,11 @@
|
||||
"印度尼西亚语": "Bahasa Indonesia",
|
||||
"芬兰语": "Suomi",
|
||||
"丹麦语": "Dansk",
|
||||
"印地语": "हिंदीName",
|
||||
"印地语": "हिंदी",
|
||||
"乌尔都语": "اوردو",
|
||||
"亚美尼亚语": "Հայերեն",
|
||||
"格鲁吉亚语": "ქართული",
|
||||
"巴西葡萄牙语": "Português do Brasil",
|
||||
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
|
||||
"繁体中文(中国香港)": "繁體中文(中國香港)",
|
||||
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Après réinitialisation, les veines métacarpiennes de la serrure seront supprimées. Êtes-vous sûr de vouloir réinitialiser?",
|
||||
@ -1152,40 +1155,24 @@
|
||||
"3.安装Google Home APP,点击左上角的加号按钮": "3. Installez l’application Google Home et cliquez sur le bouton plus dans le coin supérieur gauche",
|
||||
"暂无最新记录": "Il n’y a actuellement aucun dernier enregistrement disponible",
|
||||
"请将手机切换至2.4G WiFi进行手动连接": "Veuillez passer votre téléphone à 2.4G WiFi pour une connexion manuelle",
|
||||
"设备重置": "Réinitialisation de l'appareil",
|
||||
"请确认设备已重置": "Veuillez confirmer que l'appareil a été réinitialisé",
|
||||
"添加设备前,请确保设备已重置为出厂状态。": "Avant d'ajouter l'appareil, assurez-vous qu'il a été réinitialisé aux paramètres d'usine.",
|
||||
"设备已重置": "L'appareil a été réinitialisé",
|
||||
"加不了锁常见问题": "Problèmes courants lors de l'ajout d'une serrure",
|
||||
"蓝牙未开启或未授权": "Bluetooth non activé ou non autorisé",
|
||||
"请确保手机蓝牙已开启,并授权App使用蓝牙权限。": "Assurez-vous que le Bluetooth est activé et que l'application a l'autorisation.",
|
||||
"检查手机设置中的蓝牙权限,确保已授权给App。": "Vérifiez les autorisations Bluetooth dans les paramètres du téléphone et assurez-vous que l'application est autorisée.",
|
||||
"未重置锁": "Serrure non réinitialisée",
|
||||
"请先将锁重置为出厂状态,重置方法详见上一步指引。": "Réinitialisez d'abord la serrure aux paramètres d'usine, voir l'étape précédente.",
|
||||
"找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。": "Trouvez le bouton de réinitialisation sur la serrure, maintenez-le enfoncé jusqu'à entendre un bip ou voir le voyant clignoter.",
|
||||
"锁电量过低": "Batterie de la serrure faible",
|
||||
"锁电量过低可能导致无法正常连接和添加。": "Une batterie faible peut entraîner des problèmes de connexion et d'ajout.",
|
||||
"请更换电池后重试。": "Remplacez la pile et réessayez.",
|
||||
"距离过远": "Trop loin",
|
||||
"请确保手机与锁的距离在有效范围内。": "Assurez-vous que le téléphone est à portée de la serrure.",
|
||||
"将手机靠近锁,距离保持在1米以内。": "Approchez le téléphone de la serrure, à moins d'un mètre.",
|
||||
"锁已被其他用户添加": "La serrure a déjà été ajoutée par un autre utilisateur",
|
||||
"如果锁已被其他用户添加,需要先解除绑定。": "Si la serrure a déjà été ajoutée, veuillez d'abord la dissocier.",
|
||||
"请联系锁的管理员解除绑定,或使用管理员权限重置锁。": "Contactez l'administrateur de la serrure pour la dissocier ou utilisez les droits d'administrateur pour la réinitialiser.",
|
||||
"使用小程序": "Utiliser le mini-programme",
|
||||
"如果App无法正常添加锁,可以尝试使用小程序版本。": "Si l'application ne fonctionne pas, essayez la version mini-programme.",
|
||||
"打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。": "Ouvrez WeChat, recherchez '星星锁Lite' et essayez d'ajouter la serrure via le mini-programme.",
|
||||
"尝试升级固件": "Essayer de mettre à jour le firmware",
|
||||
"升级说明": "Instructions de mise à jour",
|
||||
"如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:": "Si aucune méthode ne fonctionne, essayez de mettre à jour le firmware de la serrure. Avant la mise à jour, assurez-vous que :",
|
||||
"升级注意事项": "• La batterie de la serrure est suffisamment chargée\n• Vous avez le bon fichier firmware\n• Ne déconnectez pas pendant la mise à jour",
|
||||
"找不到锁?点此查看。": "Vous ne trouvez pas la serrure ? Cliquez ici.",
|
||||
"常见问题": "Problèmes courants",
|
||||
"固件升级": "Mise à jour du firmware",
|
||||
"固件升级描述": "Cliquez sur le bouton \"Retour aux paramètres de l'appareil\" en bas à droite pour revenir aux paramètres de l'appareil et essayer de mettre à jour le firmware.",
|
||||
"邮箱地址必须包含@符号": "L'adresse e-mail doit contenir '@'.",
|
||||
"手机号只能包含数字": "Le numéro de téléphone ne peut contenir que des chiffres",
|
||||
"重置方法请查阅设备说明书": "Consultez le manuel de l'appareil",
|
||||
"我已重置,继续添加": "Réinitialisation terminée, continuer",
|
||||
"添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。": "Avant d'ajouter l'appareil, assurez-vous qu'il a été réinitialisé aux paramètres d'usine. Après la réinitialisation, tous les données des utilisateurs, y compris les empreintes digitales, les mots de passe et les cartes, seront supprimés."
|
||||
"语音包设置": "Paramètres du pack vocal",
|
||||
"第三方平台设置": "Paramètres de plate - forme tierce",
|
||||
"涂鸦智能": "Tuya Smart",
|
||||
"锁语音包设置": "Paramètres du pack Lock Voice",
|
||||
"(中国台湾)": "(中国台湾)",
|
||||
"男声": "Voix masculine",
|
||||
"女声": "Voix de femmes",
|
||||
"您的图像和视频数据仅保留": "Vos données d’image et de vidéo ne sont conservées que",
|
||||
"后图像和视频数据将会失效,开通": "Après cela, les données de l’image et de la vidéo seront invalides et activées",
|
||||
"云存会员": "Adhésion au stockage dans le cloud",
|
||||
"服务,图像视频信息随心存!": "Le service, l’image et les informations vidéo sont au cœur de vos préoccupations !",
|
||||
"图像": "image",
|
||||
"视频": "Vidéo",
|
||||
"当前国家不支持手机验证码注册,请使用邮箱进行注册": "Actuellement, le pays ne prend pas en charge l’enregistrement du code de vérification du téléphone portable, veuillez utiliser votre adresse e-mail pour vous inscrire",
|
||||
"注:": "Remarque:",
|
||||
"必需在开始时间24小时内使用一次,否则将失效": "Doit être utilisé une fois dans les 24 heures suivant l'heure de début, sinon il expirera",
|
||||
"这是单次密码,只能使用一次": "Ceci est un mot de passe à usage unique et ne peut être utilisé qu'une seule fois",
|
||||
"您好": "Bonjour",
|
||||
"您的开门密码是": "Votre code d'accès à la porte est",
|
||||
"开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标": "Pour déverrouiller, activez d'abord le clavier du verrou, entrez ensuite le mot de passe et terminez par #. La touche # se trouve dans le coin inférieur droit du clavier et peut avoir une icône différente"
|
||||
}
|
||||
@ -1065,7 +1065,7 @@
|
||||
"波兰语": "Polski",
|
||||
"斯洛伐克语": "Slovenčina",
|
||||
"捷克语": "Čeština",
|
||||
"希腊语": "Ελληνικά",
|
||||
"希腊语": "ελληνικά",
|
||||
"希伯来语": "עברית",
|
||||
"塞尔维亚语": "Српски",
|
||||
"土耳其语": "Türkçe",
|
||||
@ -1078,8 +1078,11 @@
|
||||
"印度尼西亚语": "Bahasa Indonesia",
|
||||
"芬兰语": "Suomi",
|
||||
"丹麦语": "Dansk",
|
||||
"印地语": "हिंदीName",
|
||||
"印地语": "हिंदी",
|
||||
"乌尔都语": "اوردو",
|
||||
"亚美尼亚语": "Հայերեն",
|
||||
"格鲁吉亚语": "ქართული",
|
||||
"巴西葡萄牙语": "Português do Brasil",
|
||||
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
|
||||
"繁体中文(中国香港)": "繁體中文(中國香港)",
|
||||
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "לאחר איפוס, הורידים של המנעול יימחקו. אתה בטוח שברצונך לאפס?",
|
||||
@ -1152,40 +1155,24 @@
|
||||
"3.安装Google Home APP,点击左上角的加号按钮": "3. התקן את אפליקציית Google Home ולחץ על כפתור הפלוס בפינה השמאלית העליונה",
|
||||
"暂无最新记录": "אין כרגע רשומות עדכניות זמינות",
|
||||
"请将手机切换至2.4G WiFi进行手动连接": "אנא העבר את הטלפון שלך ל- WiFi 2.4G לחיבור ידני",
|
||||
"设备重置": "איפוס מכשיר",
|
||||
"请确认设备已重置": "אנא אשר שהמכשיר אופס",
|
||||
"添加设备前,请确保设备已重置为出厂状态。": "לפני הוספת המכשיר, ודא שהוא אופס להגדרות יצרן.",
|
||||
"设备已重置": "המכשיר אופס",
|
||||
"加不了锁常见问题": "בעיות נפוצות בהוספת מנעול",
|
||||
"蓝牙未开启或未授权": "Bluetooth לא הופעל או לא אושר",
|
||||
"请确保手机蓝牙已开启,并授权App使用蓝牙权限。": "ודא ש-Bluetooth מופעל ושהאפליקציה מורשית להשתמש בו.",
|
||||
"检查手机设置中的蓝牙权限,确保已授权给App。": "בדוק את הרשאות ה-Bluetooth בהגדרות הטלפון וודא שהאפליקציה מורשית.",
|
||||
"未重置锁": "המנעול לא אופס",
|
||||
"请先将锁重置为出厂状态,重置方法详见上一步指引。": "אפס את המנעול להגדרות יצרן, ראה את ההוראות בשלב הקודם.",
|
||||
"找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。": "מצא את כפתור האיפוס במנעול, לחץ לחיצה ארוכה עד שתשמע צפצוף או תראה את הנורה מהבהבת.",
|
||||
"锁电量过低": "סוללת המנעול חלשה",
|
||||
"锁电量过低可能导致无法正常连接和添加。": "סוללה חלשה עלולה לגרום לבעיות בחיבור ובהוספה.",
|
||||
"请更换电池后重试。": "החלף סוללה ונסה שוב.",
|
||||
"距离过远": "מרחק רב מדי",
|
||||
"请确保手机与锁的距离在有效范围内。": "ודא שהטלפון בטווח של המנעול.",
|
||||
"将手机靠近锁,距离保持在1米以内。": "קרב את הטלפון למנעול, שמור על מרחק של עד מטר אחד.",
|
||||
"锁已被其他用户添加": "המנעול כבר נוסף על ידי משתמש אחר",
|
||||
"如果锁已被其他用户添加,需要先解除绑定。": "אם המנעול כבר נוסף, יש לנתק אותו תחילה.",
|
||||
"请联系锁的管理员解除绑定,或使用管理员权限重置锁。": "פנה למנהל המנעול לניתוק או השתמש בהרשאות מנהל לאיפוס.",
|
||||
"使用小程序": "השתמש במיני-אפליקציה",
|
||||
"如果App无法正常添加锁,可以尝试使用小程序版本。": "אם האפליקציה לא פועלת, נסה את גרסת המיני-אפליקציה.",
|
||||
"打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。": "פתח את WeChat, חפש '星星锁Lite' ונסה להוסיף את המנעול דרך המיני-אפליקציה.",
|
||||
"尝试升级固件": "נסה לעדכן קושחה",
|
||||
"升级说明": "הוראות עדכון",
|
||||
"如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:": "אם אף שיטה לא עוזרת, נסה לעדכן את קושחת המנעול. לפני העדכון ודא:",
|
||||
"升级注意事项": "• סוללת המנעול טעונה\n• קובץ הקושחה נכון\n• אל תנתק במהלך העדכון",
|
||||
"找不到锁?点此查看。": "לא מוצא את המנעול? לחץ כאן.",
|
||||
"常见问题": "שאלות נפוצות",
|
||||
"固件升级": "עדכון קושחה",
|
||||
"固件升级描述": "לחץ על כפתור \"חזור להגדרות המכשיר\" בפינה הימנית התחתונה כדי לחזור לדף ההגדרות ולנסות לעדכן את קושחת המכשיר.",
|
||||
"邮箱地址必须包含@符号": "כתובת הדוא״ל חייבת להכיל '@'.",
|
||||
"手机号只能包含数字": "מספר הטלפון יכול להכיל רק מספרים",
|
||||
"重置方法请查阅设备说明书": "קראו את ספר המשימות של המכשיר",
|
||||
"我已重置,继续添加": "איפוס הושלם, ממשיכים",
|
||||
"添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。": "לפני הוספת המכשיר, ודא שהוא אופס להגדרות יצרן. עם כן, כל הנתונים של המשתמשים, כולל ידיות, סיסמאות וכרטיסים, ימחקו."
|
||||
"语音包设置": "הגדרות חבילת קול",
|
||||
"第三方平台设置": "הגדרות פלטפורמות של צד שלישי",
|
||||
"涂鸦智能": "Tuya Smart",
|
||||
"锁语音包设置": "הגדרות חבילת קול לנעול",
|
||||
"(中国台湾)": "(中国台湾)",
|
||||
"男声": "קול גבר",
|
||||
"女声": "קול נשי",
|
||||
"您的图像和视频数据仅保留": "נתוני התמונה והסרטונים נשמרים רק",
|
||||
"后图像和视频数据将会失效,开通": "לאחר מכן, נתוני התמונה והווידאו לא יהיו חוקיים ויופעלו",
|
||||
"云存会员": "חברות באחסון בענן",
|
||||
"服务,图像视频信息随心存!": "מידע על שירות, תמונה ווידאו נמצאים בלב שלך!",
|
||||
"图像": "תמונה",
|
||||
"视频": "וידאו",
|
||||
"当前国家不支持手机验证码注册,请使用邮箱进行注册": "נכון לעכשיו, המדינה אינה תומכת ברישום קוד אימות טלפון נייד, אנא השתמש בכתובת הדוא\"ל שלך כדי להירשם",
|
||||
"注:": "הערה:",
|
||||
"必需在开始时间24小时内使用一次,否则将失效": "יש להשתמש בו פעם אחת בתוך 24 שעות מזמן ההתחלה, אחרת הוא יפוג",
|
||||
"这是单次密码,只能使用一次": "זו סיסמה חד-פעמית שניתן להשתמש בה רק פעם אחת",
|
||||
"您好": "שלום",
|
||||
"您的开门密码是": "קוד הפתיחה שלך הוא",
|
||||
"开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标": "כדי לבטל את הנעילה, הפעל תחילה את מקלדת המנעול, לאחר מכן הזן את הסיסמה וסיים ב-#. המקש # נמצא בפינה הימנית התחתונה של המקלדת ועשוי להיות סמל אחר"
|
||||
}
|
||||
@ -1067,7 +1067,7 @@
|
||||
"波兰语": "Polski",
|
||||
"斯洛伐克语": "Slovenčina",
|
||||
"捷克语": "Čeština",
|
||||
"希腊语": "Ελληνικά",
|
||||
"希腊语": "ελληνικά",
|
||||
"希伯来语": "עברית",
|
||||
"塞尔维亚语": "Српски",
|
||||
"土耳其语": "Türkçe",
|
||||
@ -1080,8 +1080,11 @@
|
||||
"印度尼西亚语": "Bahasa Indonesia",
|
||||
"芬兰语": "Suomi",
|
||||
"丹麦语": "Dansk",
|
||||
"印地语": "हिंदीName",
|
||||
"印地语": "हिंदी",
|
||||
"乌尔都语": "اوردو",
|
||||
"亚美尼亚语": "Հայերեն",
|
||||
"格鲁吉亚语": "ქართული",
|
||||
"巴西葡萄牙语": "Português do Brasil",
|
||||
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
|
||||
"繁体中文(中国香港)": "繁體中文(中國香港)",
|
||||
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "रीसेट के बाद, लॉक के मेटाकार्पल नसों को हटा दिया जाएगा। क्या आप निश्चित रूप से रीसेट करना चाहते हैं?",
|
||||
@ -1143,7 +1146,7 @@
|
||||
"网关添加成功": "गेटवे सफलतापूर्वक जोड़ा गया",
|
||||
"呼叫目标": "कॉल लक्ष्य",
|
||||
"管理员APP": "व्यवस्थापक एप",
|
||||
"可视门铃码": "Name",
|
||||
"可视门铃码": "दृश्यमान दरवाजा घंटी कोड",
|
||||
"电子反锁": "इलेक्ट्रॉनिक विरोधी लॉक",
|
||||
"双重认证": "द्वि-कारक प्रमाणीकरण",
|
||||
"双锁联动": "द्वि पाश सहलग्नता",
|
||||
@ -1152,40 +1155,24 @@
|
||||
"3.安装Google Home APP,点击左上角的加号按钮": "3. गूगल होम ऐप को इंस्टॉल करें और ऊपरी बाएं कोने में प्लस बटन पर क्लिक करें।",
|
||||
"暂无最新记录": "वर्तमान में कोई नवीनतम रिकॉर्ड उपलब्ध नहीं हैं",
|
||||
"请将手机切换至2.4G WiFi进行手动连接": "मैन्युअल कनेक्शन के लिए कृपया अपना फोन 2.4 जी वाईफ़ाई पर स्विच करें।",
|
||||
"设备重置": "डिवाइस रीसेट करें",
|
||||
"请确认设备已重置": "कृपया पुष्टि करें कि डिवाइस रीसेट हो चुका है",
|
||||
"添加设备前,请确保设备已重置为出厂状态。": "डिवाइस जोड़ने से पहले, कृपया सुनिश्चित करें कि डिवाइस फैक्ट्री सेटिंग्स पर रीसेट हो चुका है।",
|
||||
"设备已重置": "डिवाइस रीसेट हो चुका है",
|
||||
"加不了锁常见问题": "लॉक जोड़ने में सामान्य समस्याएँ",
|
||||
"蓝牙未开启或未授权": "ब्लूटूथ चालू नहीं है या अनुमति नहीं है",
|
||||
"请确保手机蓝牙已开启,并授权App使用蓝牙权限。": "कृपया सुनिश्चित करें कि फोन का ब्लूटूथ चालू है और ऐप को अनुमति दी गई है।",
|
||||
"检查手机设置中的蓝牙权限,确保已授权给App。": "फोन सेटिंग्स में ब्लूटूथ अनुमति की जाँच करें और ऐप को अनुमति दें।",
|
||||
"未重置锁": "लॉक रीसेट नहीं हुआ",
|
||||
"请先将锁重置为出厂状态,重置方法详见上一步指引。": "कृपया पहले लॉक को फैक्ट्री सेटिंग्स पर रीसेट करें, रीसेट विधि पिछले चरण में देखें।",
|
||||
"找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。": "लॉक पर रीसेट बटन ढूंढें, तब तक दबाकर रखें जब तक 'बीप' न सुनें या इंडिकेटर लाइट न चमके।",
|
||||
"锁电量过低": "लॉक की बैटरी कम है",
|
||||
"锁电量过低可能导致无法正常连接和添加。": "लॉक की बैटरी कम होने से सामान्य कनेक्शन और जोड़ने में समस्या हो सकती है।",
|
||||
"请更换电池后重试。": "बैटरी बदलकर पुनः प्रयास करें।",
|
||||
"距离过远": "दूरी बहुत अधिक है",
|
||||
"请确保手机与锁的距离在有效范围内。": "कृपया सुनिश्चित करें कि फोन और लॉक के बीच की दूरी मान्य सीमा में है।",
|
||||
"将手机靠近锁,距离保持在1米以内。": "फोन को लॉक के पास रखें, दूरी 1 मीटर के भीतर रखें।",
|
||||
"锁已被其他用户添加": "लॉक पहले से किसी अन्य उपयोगकर्ता द्वारा जोड़ा गया है",
|
||||
"如果锁已被其他用户添加,需要先解除绑定。": "यदि लॉक पहले से किसी अन्य उपयोगकर्ता द्वारा जोड़ा गया है, तो पहले अनबाइंड करें।",
|
||||
"请联系锁的管理员解除绑定,或使用管理员权限重置锁。": "लॉक के व्यवस्थापक से संपर्क करें या व्यवस्थापक अधिकारों का उपयोग करके लॉक को रीसेट करें।",
|
||||
"使用小程序": "मिनी प्रोग्राम का उपयोग करें",
|
||||
"如果App无法正常添加锁,可以尝试使用小程序版本。": "यदि ऐप से लॉक नहीं जुड़ रहा है, तो मिनी प्रोग्राम का उपयोग करें।",
|
||||
"打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。": "WeChat खोलें, '星星锁Lite' मिनी प्रोग्राम खोजें और लॉक जोड़ने का प्रयास करें।",
|
||||
"尝试升级固件": "फर्मवेयर अपडेट आज़माएँ",
|
||||
"升级说明": "अपग्रेड निर्देश",
|
||||
"如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:": "यदि ऊपर दिए गए तरीके काम नहीं करते हैं, तो लॉक का फर्मवेयर अपडेट करने का प्रयास करें। अपडेट से पहले सुनिश्चित करें:",
|
||||
"升级注意事项": "लॉक की बैटरी पर्याप्त हो\n• सही फर्मवेयर फ़ाइल प्राप्त हो\n• अपडेट के दौरान कनेक्शन न टूटे",
|
||||
"找不到锁?点此查看。": "लॉक नहीं मिला? यहाँ क्लिक करें।",
|
||||
"常见问题": "सामान्य समस्याएँ",
|
||||
"固件升级": "फर्मवेयर अपडेट",
|
||||
"固件升级描述": "फर्मवेयर अपडेट करने के लिए, नीचे के दाएं कोने में दिए गए \"डिवाइस सेटिंग्स पर वापस जाएं\" बटन पर क्लिक करें।",
|
||||
"邮箱地址必须包含@符号": "ईमेल पता '@' चिह्न शामिल होना चाहिए।",
|
||||
"手机号只能包含数字": "फोन नंबर केवल संख्याओं को शामिल कर सकता है",
|
||||
"重置方法请查阅设备说明书": "डिवाइस का उपयोग निर्देश देखें",
|
||||
"我已重置,继续添加": "मैंने रीसेट किया है, जारी रखें",
|
||||
"添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。": "डिवाइस जोड़ने से पहले, कृपया सुनिश्चित करें कि डिवाइस फैक्ट्री सेटिंग्स पर रीसेट हो चुका है। रीसेट के बाद, सभी उपयोगकर्ता डेटा, जिसमें अंगूठी छाँट, पासवर्ड और कार्ड शामिल हैं, साफ़ किया जाएगा।"
|
||||
"语音包设置": "आवाज पैकेज सेटिंग्स",
|
||||
"第三方平台设置": "तृतीय पक्ष मंच सेटिंग्स",
|
||||
"涂鸦智能": "Tuya Smart",
|
||||
"锁语音包设置": "आवाज पैकेज सेटिंग्स ताला लगाएँ",
|
||||
"(中国台湾)": "(中国台湾)",
|
||||
"男声": "पुरुष आवाज",
|
||||
"女声": "महिला आवाज",
|
||||
"您的图像和视频数据仅保留": "आपकी छवि और वीडियो डेटा केवल बनाए रखा जाता है",
|
||||
"后图像和视频数据将会失效,开通": "उसके बाद, छवि और वीडियो डेटा अमान्य और सक्रिय हो जाएगा",
|
||||
"云存会员": "क्लाउड स्टोरेज सदस्यता",
|
||||
"服务,图像视频信息随心存!": "सेवा, छवि और वीडियो जानकारी आपके दिल में हैं!",
|
||||
"图像": "प्रतिबिंब",
|
||||
"视频": "वीडियो",
|
||||
"当前国家不支持手机验证码注册,请使用邮箱进行注册": "वर्तमान में, देश मोबाइल फोन सत्यापन कोड पंजीकरण का समर्थन नहीं करता है, कृपया पंजीकरण करने के लिए अपने ईमेल पते का उपयोग करें",
|
||||
"注:": "नोट:",
|
||||
"必需在开始时间24小时内使用一次,否则将失效": "आरंभ समय के 24 घंटे के भीतर एक बार उपयोग करना आवश्यक है, अन्यथा इसकी समय सीमा समाप्त हो जाएगी",
|
||||
"这是单次密码,只能使用一次": "यह एकल उपयोग का पासवर्ड है और केवल एक बार उपयोग किया जा सकता है",
|
||||
"您好": "नमस्ते",
|
||||
"您的开门密码是": "आपका दरवाज़ा खोलने का कोड है",
|
||||
"开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标": "अनलॉक करने के लिए, पहले लॉक कीबोर्ड को सक्रिय करें, फिर पासवर्ड दर्ज करें और # के साथ समाप्त करें। # कुंजी कीबोर्ड के निचले दाएं कोने में है और इसमें कोई अन्य चिह्न हो सकता है"
|
||||
}
|
||||
@ -1043,7 +1043,6 @@
|
||||
"一键开锁": "一鍵解鎖",
|
||||
"已开通": "打開",
|
||||
"英文": "English",
|
||||
"英文": "English",
|
||||
"简体中文": "简体中文",
|
||||
"繁体中文": "繁體中文",
|
||||
"法语": "Français",
|
||||
@ -1066,7 +1065,7 @@
|
||||
"波兰语": "Polski",
|
||||
"斯洛伐克语": "Slovenčina",
|
||||
"捷克语": "Čeština",
|
||||
"希腊语": "Ελληνικά",
|
||||
"希腊语": "ελληνικά",
|
||||
"希伯来语": "עברית",
|
||||
"塞尔维亚语": "Српски",
|
||||
"土耳其语": "Türkçe",
|
||||
@ -1079,8 +1078,11 @@
|
||||
"印度尼西亚语": "Bahasa Indonesia",
|
||||
"芬兰语": "Suomi",
|
||||
"丹麦语": "Dansk",
|
||||
"印地语": "हिंदीName",
|
||||
"印地语": "हिंदी",
|
||||
"乌尔都语": "اوردو",
|
||||
"亚美尼亚语": "Հայերեն",
|
||||
"格鲁吉亚语": "ქართული",
|
||||
"巴西葡萄牙语": "Português do Brasil",
|
||||
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
|
||||
"繁体中文(中国香港)": "繁體中文(中國香港)",
|
||||
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "重置後,鎖的掌靜脈將被刪除。 你確定要重置啊?",
|
||||
@ -1153,40 +1155,24 @@
|
||||
"3.安装Google Home APP,点击左上角的加号按钮": "3.安裝Google Home應用,點擊左上角嘅加號掣",
|
||||
"暂无最新记录": "目前冇可用嘅最新記錄",
|
||||
"请将手机切换至2.4G WiFi进行手动连接": "請把手機切換到2.4G WiFi進行手動連接",
|
||||
"设备重置": "設備重置",
|
||||
"请确认设备已重置": "請確認設備已重置",
|
||||
"添加设备前,请确保设备已重置为出厂状态。": "添加設備前,請確保設備已重置為出廠狀態。",
|
||||
"设备已重置": "設備已重置",
|
||||
"加不了锁常见问题": "加不了鎖常見問題",
|
||||
"蓝牙未开启或未授权": "藍牙未開啟或未授權",
|
||||
"请确保手机蓝牙已开启,并授权App使用蓝牙权限。": "請確保手機藍牙已開啟,並授權App使用藍牙權限。",
|
||||
"检查手机设置中的蓝牙权限,确保已授权给App。": "檢查手機設置中的藍牙權限,確保已授權給App。",
|
||||
"未重置锁": "未重置鎖",
|
||||
"请先将锁重置为出厂状态,重置方法详见上一步指引。": "請先將鎖重置為出廠狀態,重置方法詳見上一步指引。",
|
||||
"找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。": "找到鎖上的重置按鈕,長按直到聽到「嗶」聲或看到指示燈閃爍。",
|
||||
"锁电量过低": "鎖電量過低",
|
||||
"锁电量过低可能导致无法正常连接和添加。": "鎖電量過低可能導致無法正常連接和添加。",
|
||||
"请更换电池后重试。": "請更換電池後重試。",
|
||||
"距离过远": "距離過遠",
|
||||
"请确保手机与锁的距离在有效范围内。": "請確保手機與鎖的距離在有效範圍內。",
|
||||
"将手机靠近锁,距离保持在1米以内。": "將手機靠近鎖,距離保持在1米以內。",
|
||||
"锁已被其他用户添加": "鎖已被其他用戶添加",
|
||||
"如果锁已被其他用户添加,需要先解除绑定。": "如果鎖已被其他用戶添加,需要先解除綁定。",
|
||||
"请联系锁的管理员解除绑定,或使用管理员权限重置锁。": "請聯絡鎖的管理員解除綁定,或使用管理員權限重置鎖。",
|
||||
"使用小程序": "使用小程序",
|
||||
"如果App无法正常添加锁,可以尝试使用小程序版本。": "如果App無法正常添加鎖,可以嘗試使用小程序版本。",
|
||||
"打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。": "打開微信,搜尋「星星鎖Lite」小程序,嘗試通過小程序添加鎖。",
|
||||
"尝试升级固件": "嘗試升級固件",
|
||||
"升级说明": "升級說明",
|
||||
"如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:": "如果以上方法都無法解決問題,可以嘗試升級鎖的固件。升級前請確保:",
|
||||
"升级注意事项": "鎖電量充足\n• 已獲取正確的固件文件\n• 升級過程中不要斷開連接",
|
||||
"找不到锁?点此查看。": "找不到鎖?點此查看。",
|
||||
"常见问题": "常見問題",
|
||||
"固件升级": "固件升級",
|
||||
"固件升级描述": "請點擊右下角「點擊返回設備配對」按鈕返回設備配對頁面進行固件升級",
|
||||
"邮箱地址必须包含@符号": "電郵地址必須包含 '@' 符號。",
|
||||
"手机号只能包含数字": "電話號碼只能包含數字",
|
||||
"重置方法请查阅设备说明书": "請參閱設備說明書",
|
||||
"我已重置,继续添加": "已重置,繼續添加",
|
||||
"添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。": "添加設備前,請確保設備已重置為出廠狀態。重置後的設備將清除所有用戶數據,包括指紋、密碼、卡片等信息。"
|
||||
"语音包设置": "語音包設定",
|
||||
"第三方平台设置": "協力廠商領獎臺設定",
|
||||
"涂鸦智能": "Tuya Smart",
|
||||
"锁语音包设置": "鎖語音包設定",
|
||||
"(中国台湾)": "(中国台湾)",
|
||||
"男声": "男聲",
|
||||
"女声": "女聲",
|
||||
"您的图像和视频数据仅保留": "您的圖像和視頻數據僅保留",
|
||||
"后图像和视频数据将会失效,开通": "后圖像和視頻數據將會失效,開通",
|
||||
"云存会员": "雲存會員",
|
||||
"服务,图像视频信息随心存!": "服務,圖像視頻資訊隨心存!",
|
||||
"图像": "圖像",
|
||||
"视频": "視頻",
|
||||
"当前国家不支持手机验证码注册,请使用邮箱进行注册": "當前國家不支援手機驗證碼註冊,請使用郵箱進行註冊",
|
||||
"注:": "註:",
|
||||
"必需在开始时间24小时内使用一次,否则将失效": "必須在開始時間24小時內使用一次,否則將失效",
|
||||
"这是单次密码,只能使用一次": "這是單次密碼,只能使用一次",
|
||||
"您好": "您好",
|
||||
"您的开门密码是": "您的開門密碼是",
|
||||
"开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标": "開鎖時,先啟動鎖鍵盤,再輸入密碼,以#號結束,#號鍵在鍵盤右下角,有可能是其他圖標"
|
||||
}
|
||||
@ -185,7 +185,7 @@
|
||||
"删除账号": "Obriši korisnički račun.",
|
||||
"个人信息": "Informacije o računu",
|
||||
"头像": "Avatar",
|
||||
"昵称": "NickNameName",
|
||||
"昵称": "NickName",
|
||||
"请输入昵称": "Molim, unesite svoj nadimak",
|
||||
"修改昵称": "Preimenuj",
|
||||
"修改账号": "Uredi korisnički račun.",
|
||||
@ -316,7 +316,7 @@
|
||||
"开门器": "Otvarač vrata",
|
||||
"面容开锁": "Otključa lice",
|
||||
"开门方向设置": "Smjer otvaranja",
|
||||
"电机功率设置": "Postavljanje MotorPowerName",
|
||||
"电机功率设置": "Postavljanje MotorPower",
|
||||
"开锁时是否需联网": "Ako je internet potreban prilikom otključavanja",
|
||||
"选择要加入分组的锁": "Odaberite zaključavanje za dodavanje ovoj grupi",
|
||||
"锁数量": "Broj zaključanje",
|
||||
@ -703,7 +703,7 @@
|
||||
"传输中": "U provozu",
|
||||
"发送人": "Izdaja",
|
||||
"发送时间": "Izdano vrijeme:",
|
||||
"钥匙详情": "EKEY InfoName",
|
||||
"钥匙详情": "EKEY Info",
|
||||
"姓名": "Ime",
|
||||
"发送": "Pošalji",
|
||||
"请确认姓名全名和身份证号码是否正确": "Potvrdite da su puno ime i identifikacijski broj ispravni.",
|
||||
@ -834,9 +834,9 @@
|
||||
"微信": "WeChat",
|
||||
"朋友圈": "Trenutaci",
|
||||
"QQ": "QQ",
|
||||
"QQ空间": "QQZoneName",
|
||||
"QQ空间": "QQZone",
|
||||
"微博": "Weibo",
|
||||
"FaceBook": "FacebookName",
|
||||
"FaceBook": "Facebook",
|
||||
"链接": "Vez",
|
||||
"今天": "Danas",
|
||||
"密码错误": "Nevažeća lozinka",
|
||||
@ -1065,7 +1065,7 @@
|
||||
"波兰语": "Polski",
|
||||
"斯洛伐克语": "Slovenčina",
|
||||
"捷克语": "Čeština",
|
||||
"希腊语": "Ελληνικά",
|
||||
"希腊语": "ελληνικά",
|
||||
"希伯来语": "עברית",
|
||||
"塞尔维亚语": "Српски",
|
||||
"土耳其语": "Türkçe",
|
||||
@ -1078,8 +1078,11 @@
|
||||
"印度尼西亚语": "Bahasa Indonesia",
|
||||
"芬兰语": "Suomi",
|
||||
"丹麦语": "Dansk",
|
||||
"印地语": "हिंदीName",
|
||||
"印地语": "हिंदी",
|
||||
"乌尔都语": "اوردو",
|
||||
"亚美尼亚语": "Հայերեն",
|
||||
"格鲁吉亚语": "ქართული",
|
||||
"巴西葡萄牙语": "Português do Brasil",
|
||||
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
|
||||
"繁体中文(中国香港)": "繁體中文(中國香港)",
|
||||
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Nakon resetiranja, metakarpalne vene brave će biti izbrisane. Jeste li sigurni da želite resetiranje?",
|
||||
@ -1101,8 +1104,8 @@
|
||||
"Action name": "Ime akcije",
|
||||
"ScienerSmart": "ZnanstvenikSmart",
|
||||
"支持的语言": "Podržani jezici",
|
||||
"英语": "EngleskiName",
|
||||
"Google Home操作流程的值": "1. Koristite Smart lock APP za dodavanje brava i prolaza\n\n2. Omogućite daljinsku funkciju otključavanja brave u APP (ova funkcija je zadano isključena). Bez ove opcije, brava ne podržava Google HomeName\n\n3. Instalirajte Google Home APP i kliknite \" \" gumb u gornjem lijevom kutu\n\n4. Na stranici podešavanja odaberite \"Radi s Googleom\"\n\n5. Tražite \"ScienerSmart\" i upotrijebite pametni APP račun i lozinku za ovlašćenje",
|
||||
"英语": "Engleski",
|
||||
"Google Home操作流程的值": "1. Koristite Smart lock APP za dodavanje brava i prolaza\n\n2. Omogućite daljinsku funkciju otključavanja brave u APP (ova funkcija je zadano isključena). Bez ove opcije, brava ne podržava Google Home\n\n3. Instalirajte Google Home APP i kliknite \" \" gumb u gornjem lijevom kutu\n\n4. Na stranici podešavanja odaberite \"Radi s Googleom\"\n\n5. Tražite \"ScienerSmart\" i upotrijebite pametni APP račun i lozinku za ovlašćenje",
|
||||
"密码需至少包含数字/字母/字符中的2种组合": "Lozinka mora sadržavati najmanje 2 od sljedećih: brojeve, slova i posebne znakove",
|
||||
"已开锁": "Otključan",
|
||||
"已闭锁": "Zaključano",
|
||||
@ -1152,40 +1155,24 @@
|
||||
"3.安装Google Home APP,点击左上角的加号按钮": "3. Instalirajte aplikaciju Google Home i kliknite gumb plus u gornjem lijevom kutu",
|
||||
"暂无最新记录": "Trenutno nema dostupnih najnovijih podataka",
|
||||
"请将手机切换至2.4G WiFi进行手动连接": "Prebacite telefon na 2.4G WiFi za ručno povezivanje",
|
||||
"设备重置": "Resetiranje uređaja",
|
||||
"请确认设备已重置": "Molimo potvrdite da je uređaj resetiran",
|
||||
"添加设备前,请确保设备已重置为出厂状态。": "Prije dodavanja uređaja, provjerite je li resetiran na tvorničke postavke.",
|
||||
"设备已重置": "Uređaj je resetiran",
|
||||
"加不了锁常见问题": "Česti problemi pri dodavanju brave",
|
||||
"蓝牙未开启或未授权": "Bluetooth nije uključen ili nije autoriziran",
|
||||
"请确保手机蓝牙已开启,并授权App使用蓝牙权限。": "Provjerite je li Bluetooth uključen i aplikacija ima dopuštenje.",
|
||||
"检查手机设置中的蓝牙权限,确保已授权给App。": "Provjerite dopuštenja za Bluetooth u postavkama telefona i osigurajte da je aplikacija autorizirana.",
|
||||
"未重置锁": "Brava nije resetirana",
|
||||
"请先将锁重置为出厂状态,重置方法详见上一步指引。": "Prvo resetirajte bravu na tvorničke postavke, pogledajte prethodni korak.",
|
||||
"找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。": "Pronađite gumb za resetiranje na bravi, držite ga dok ne čujete zvuk ili ne vidite da svjetlo treperi.",
|
||||
"锁电量过低": "Baterija brave je preniska",
|
||||
"锁电量过低可能导致无法正常连接和添加。": "Niska baterija može uzrokovati probleme s povezivanjem i dodavanjem.",
|
||||
"请更换电池后重试。": "Zamijenite bateriju i pokušajte ponovno.",
|
||||
"距离过远": "Predaleko",
|
||||
"请确保手机与锁的距离在有效范围内。": "Provjerite je li telefon u dometu brave.",
|
||||
"将手机靠近锁,距离保持在1米以内。": "Približite telefon bravi, držite udaljenost unutar 1 metra.",
|
||||
"锁已被其他用户添加": "Bravu je već dodao drugi korisnik",
|
||||
"如果锁已被其他用户添加,需要先解除绑定。": "Ako je brava već dodana, prvo je odspojite.",
|
||||
"请联系锁的管理员解除绑定,或使用管理员权限重置锁。": "Kontaktirajte administratora brave za odspajanje ili koristite administratorska prava za resetiranje.",
|
||||
"使用小程序": "Koristite mini program",
|
||||
"如果App无法正常添加锁,可以尝试使用小程序版本。": "Ako aplikacija ne radi, pokušajte s mini programom.",
|
||||
"打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。": "Otvorite WeChat, potražite '星星锁Lite' i pokušajte dodati bravu putem mini programa.",
|
||||
"尝试升级固件": "Pokušajte ažurirati firmware",
|
||||
"升级说明": "Upute za ažuriranje",
|
||||
"如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:": "Ako ništa ne pomaže, pokušajte ažurirati firmware brave. Prije ažuriranja provjerite:",
|
||||
"升级注意事项": "• Baterija brave je dovoljno napunjena\n• Imate ispravnu datoteku firmwarea\n• Ne prekidajte vezu tijekom ažuriranja",
|
||||
"找不到锁?点此查看。": "Ne možete pronaći bravu? Kliknite ovdje.",
|
||||
"常见问题": "Česti problemi",
|
||||
"固件升级": "Firmware ažuriranje",
|
||||
"固件升级描述": "Kliknite gumb \"Vrati se na postavke uređaja\" u donjem desnom kutu da biste se vratili na stranicu postavki uređaja i pokušali ažurirati firmware.",
|
||||
"邮箱地址必须包含@符号": "E-mail adresa mora sadržavati '@'.",
|
||||
"手机号只能包含数字": "Broj telefona može sadržavati samo brojeve",
|
||||
"重置方法请查阅设备说明书": "Pogledajte upute za upotrebu uređaja",
|
||||
"我已重置,继续添加": "Resetiranje je uspješno, nastavljam",
|
||||
"添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。": "Prije dodavanja uređaja, provjerite je li resetiran na tvorničke postavke. Nakon resetiranja, svi podaci o korisnicima, uključujući otiske prstiju, lozinke i kartice, bit će izbrisani."
|
||||
"语音包设置": "Postavke glasovnog paketa",
|
||||
"第三方平台设置": "Postavljanje podiuma treće strane",
|
||||
"涂鸦智能": "Tuya Smart",
|
||||
"锁语音包设置": "Postavke zaključavanja glasovnog paketa",
|
||||
"(中国台湾)": "(中国台湾)",
|
||||
"男声": "Muški glas",
|
||||
"女声": "Ženski glas",
|
||||
"您的图像和视频数据仅保留": "Vaši podaci o slici i videozapisu zadržavaju se samo",
|
||||
"后图像和视频数据将会失效,开通": "Nakon toga, slikovni i video podaci bit će nevažeći i aktivirani",
|
||||
"云存会员": "Članstvo u pohrani u oblaku",
|
||||
"服务,图像视频信息随心存!": "Informacije o usluzi, slikama i videozapisima su vam u srcu!",
|
||||
"图像": "slika",
|
||||
"视频": "Video",
|
||||
"当前国家不支持手机验证码注册,请使用邮箱进行注册": "Trenutno zemlja ne podržava registraciju koda za provjeru mobilnog telefona, za registraciju koristite svoju adresu e-pošte",
|
||||
"注:": "Napomena:",
|
||||
"必需在开始时间24小时内使用一次,否则将失效": "Mora se upotrijebiti jednom unutar 24 sata od vremena početka, inače će isteći",
|
||||
"这是单次密码,只能使用一次": "Ovo je jednokratna lozinka i može se koristiti samo jednom",
|
||||
"您好": "Bok",
|
||||
"您的开门密码是": "Vaša šifra za otvaranje vrata je",
|
||||
"开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标": "Da biste otključali, prvo aktivirajte tipkovnicu brave, zatim unesite lozinku i završite s #. Tipka # nalazi se u donjem desnom kutu tipkovnice i može imati drugu ikonu"
|
||||
}
|
||||
@ -1065,7 +1065,7 @@
|
||||
"波兰语": "Polski",
|
||||
"斯洛伐克语": "Slovenčina",
|
||||
"捷克语": "Čeština",
|
||||
"希腊语": "Ελληνικά",
|
||||
"希腊语": "ελληνικά",
|
||||
"希伯来语": "עברית",
|
||||
"塞尔维亚语": "Српски",
|
||||
"土耳其语": "Türkçe",
|
||||
@ -1078,8 +1078,11 @@
|
||||
"印度尼西亚语": "Bahasa Indonesia",
|
||||
"芬兰语": "Suomi",
|
||||
"丹麦语": "Dansk",
|
||||
"印地语": "हिंदीName",
|
||||
"印地语": "हिंदी",
|
||||
"乌尔都语": "اوردو",
|
||||
"亚美尼亚语": "Հայերեն",
|
||||
"格鲁吉亚语": "ქართული",
|
||||
"巴西葡萄牙语": "Português do Brasil",
|
||||
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
|
||||
"繁体中文(中国香港)": "繁體中文(中國香港)",
|
||||
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "A reset után a zár metakarpális erei törlődnek. Biztos vagy benne, hogy vissza akarsz állítani?",
|
||||
@ -1152,40 +1155,24 @@
|
||||
"3.安装Google Home APP,点击左上角的加号按钮": "3. Telepítse a Google Home alkalmazást, és kattintson a plusz gombra a bal felső sarokban",
|
||||
"暂无最新记录": "Jelenleg nem állnak rendelkezésre legfrissebb rekordok",
|
||||
"请将手机切换至2.4G WiFi进行手动连接": "Kérjük, kapcsolja át telefonját 2.4G WiFi-re a kézi csatlakozáshoz",
|
||||
"设备重置": "Eszköz visszaállítása",
|
||||
"请确认设备已重置": "Kérjük, erősítse meg, hogy az eszköz vissza lett állítva",
|
||||
"添加设备前,请确保设备已重置为出厂状态。": "Győződjön meg róla, hogy az eszköz vissza lett állítva a gyári beállításokra, mielőtt hozzáadná.",
|
||||
"设备已重置": "Az eszköz vissza lett állítva",
|
||||
"加不了锁常见问题": "Gyakori problémák a zár hozzáadásakor",
|
||||
"蓝牙未开启或未授权": "A Bluetooth nincs bekapcsolva vagy nincs engedélyezve",
|
||||
"请确保手机蓝牙已开启,并授权App使用蓝牙权限。": "Győződjön meg róla, hogy a Bluetooth be van kapcsolva, és az alkalmazásnak van engedélye.",
|
||||
"检查手机设置中的蓝牙权限,确保已授权给App。": "Ellenőrizze a Bluetooth engedélyeket a telefon beállításaiban, és győződjön meg róla, hogy az alkalmazás engedélyezett.",
|
||||
"未重置锁": "A zár nincs visszaállítva",
|
||||
"请先将锁重置为出厂状态,重置方法详见上一步指引。": "Először állítsa vissza a zárat a gyári beállításokra, lásd az előző lépést.",
|
||||
"找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。": "Keresse meg a zár visszaállító gombját, tartsa lenyomva, amíg sípolást nem hall vagy a jelzőfény villog.",
|
||||
"锁电量过低": "A zár akkumulátora túl alacsony",
|
||||
"锁电量过低可能导致无法正常连接和添加。": "Az alacsony akkumulátor problémákat okozhat a csatlakozásban és a hozzáadásban.",
|
||||
"请更换电池后重试。": "Cserélje ki az elemet, majd próbálja újra.",
|
||||
"距离过远": "Túl messze van",
|
||||
"请确保手机与锁的距离在有效范围内。": "Győződjön meg róla, hogy a telefon a zár hatótávolságán belül van.",
|
||||
"将手机靠近锁,距离保持在1米以内。": "Közelítse a telefont a zárhoz, tartsa 1 méteren belül.",
|
||||
"锁已被其他用户添加": "A zárat már más felhasználó hozzáadta",
|
||||
"如果锁已被其他用户添加,需要先解除绑定。": "Ha a zár már hozzá lett adva, először távolítsa el a párosítást.",
|
||||
"请联系锁的管理员解除绑定,或使用管理员权限重置锁。": "Lépjen kapcsolatba a zár adminisztrátorával a párosítás megszüntetéséhez, vagy használja az adminisztrátori jogosultságokat a visszaállításhoz.",
|
||||
"使用小程序": "Mini program használata",
|
||||
"如果App无法正常添加锁,可以尝试使用小程序版本。": "Ha az alkalmazás nem működik, próbálja ki a mini program verziót.",
|
||||
"打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。": "Nyissa meg a WeChat-et, keresse meg a '星星锁Lite'-ot, és próbálja meg hozzáadni a zárat a mini programon keresztül.",
|
||||
"尝试升级固件": "Próbálja meg frissíteni a firmware-t",
|
||||
"升级说明": "Frissítési útmutató",
|
||||
"如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:": "Ha semmi sem működik, próbálja meg frissíteni a zár firmware-jét. Frissítés előtt győződjön meg róla:",
|
||||
"升级注意事项": "• A zár akkumulátora fel van töltve\n• Megvan a megfelelő firmware fájl\n• Ne szakítsa meg a kapcsolatot frissítés közben",
|
||||
"找不到锁?点此查看。": "Nem találja a zárat? Kattintson ide.",
|
||||
"常见问题": "Gyakori problémák",
|
||||
"固件升级": "Firmware frissítés",
|
||||
"固件升级描述": "Kattintson a jobb alsó sarokban lévő \"Vissza a készülék beállításokhoz\" gombra a firmware frissítéséhez.",
|
||||
"邮箱地址必须包含@符号": "Az e-mail címnek '@' karaktert kell tartalmaznia.",
|
||||
"手机号只能包含数字": "A telefonszám csak számokat tartalmazhat",
|
||||
"重置方法请查阅设备说明书": "A készülék használati útmutatóját olvasd el",
|
||||
"我已重置,继续添加": "A visszaállítás sikeres, folytatom",
|
||||
"添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。": "A készülék hozzáadása előtt győződjön meg róla, hogy a készülék vissza lett állítva a gyári beállításokra. A visszaállítás után a készülék minden felhasználói adatát (például ujjlenyomatait, jelszavát, kártyáit) töröljük."
|
||||
"语音包设置": "Hangcsomag beállításai",
|
||||
"第三方平台设置": "Harmadik fél platformjának beállítása",
|
||||
"涂鸦智能": "Tuya Smart",
|
||||
"锁语音包设置": "Hangcsomag zárolási beállításai",
|
||||
"(中国台湾)": "(中国台湾)",
|
||||
"男声": "Férfi hang",
|
||||
"女声": "női hang",
|
||||
"您的图像和视频数据仅保留": "A kép- és videóadatokat csak a rendszer őrzi meg",
|
||||
"后图像和视频数据将会失效,开通": "Ezt követően a kép- és videóadatok érvénytelenek lesznek és aktiválódnak",
|
||||
"云存会员": "Felhőalapú tárolási tagság",
|
||||
"服务,图像视频信息随心存!": "A szolgáltatás, a képi és videós információk a szívedben vannak!",
|
||||
"图像": "kép",
|
||||
"视频": "Video",
|
||||
"当前国家不支持手机验证码注册,请使用邮箱进行注册": "Jelenleg az ország nem támogatja a mobiltelefonos ellenőrző kód regisztrációját, kérjük, használja e-mail címét a regisztrációhoz",
|
||||
"注:": "Megjegyzés:",
|
||||
"必需在开始时间24小时内使用一次,否则将失效": "A kezdési időponttól számított 24 órán belül egyszer kell használni, különben lejár",
|
||||
"这是单次密码,只能使用一次": "Ez egy egyszeri jelszó, amelyet csak egyszer lehet használni",
|
||||
"您好": "Szia",
|
||||
"您的开门密码是": "Az ajtónyitó kódod",
|
||||
"开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标": "A feloldáshoz először aktiválja a zár billentyűzetét, majd írja be a jelszót, és fejezze be a # gombbal. A # gomb a billentyűzet jobb alsó sarkában található, és más ikonnal is rendelkezhet"
|
||||
}
|
||||
1184
lan/lan_hy.json
Normal file
@ -1065,7 +1065,7 @@
|
||||
"波兰语": "Polski",
|
||||
"斯洛伐克语": "Slovenčina",
|
||||
"捷克语": "Čeština",
|
||||
"希腊语": "Ελληνικά",
|
||||
"希腊语": "ελληνικά",
|
||||
"希伯来语": "עברית",
|
||||
"塞尔维亚语": "Српски",
|
||||
"土耳其语": "Türkçe",
|
||||
@ -1078,8 +1078,11 @@
|
||||
"印度尼西亚语": "Bahasa Indonesia",
|
||||
"芬兰语": "Suomi",
|
||||
"丹麦语": "Dansk",
|
||||
"印地语": "हिंदीName",
|
||||
"印地语": "हिंदी",
|
||||
"乌尔都语": "اوردو",
|
||||
"亚美尼亚语": "Հայերեն",
|
||||
"格鲁吉亚语": "ქართული",
|
||||
"巴西葡萄牙语": "Português do Brasil",
|
||||
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
|
||||
"繁体中文(中国香港)": "繁體中文(中國香港)",
|
||||
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Setelah mengulang, pembuluh darah metakarpal dari kunci akan dihapus. Yakin ingin mengatur ulang?",
|
||||
@ -1152,40 +1155,24 @@
|
||||
"3.安装Google Home APP,点击左上角的加号按钮": "3. Instal aplikasi Google Home dan klik tombol plus di sudut kiri atas",
|
||||
"暂无最新记录": "Saat ini tidak ada catatan terbaru yang tersedia",
|
||||
"请将手机切换至2.4G WiFi进行手动连接": "Silahkan beralih ke 2.4G WiFi untuk koneksi manual",
|
||||
"设备重置": "Reset perangkat",
|
||||
"请确认设备已重置": "Silakan konfirmasi perangkat telah direset",
|
||||
"添加设备前,请确保设备已重置为出厂状态。": "Pastikan perangkat telah direset ke pengaturan pabrik sebelum menambahkannya.",
|
||||
"设备已重置": "Perangkat telah direset",
|
||||
"加不了锁常见问题": "Masalah umum saat menambah kunci",
|
||||
"蓝牙未开启或未授权": "Bluetooth belum diaktifkan atau belum diizinkan",
|
||||
"请确保手机蓝牙已开启,并授权App使用蓝牙权限。": "Pastikan Bluetooth aktif dan aplikasi memiliki izin.",
|
||||
"检查手机设置中的蓝牙权限,确保已授权给App。": "Periksa izin Bluetooth di pengaturan ponsel dan pastikan aplikasi diizinkan.",
|
||||
"未重置锁": "Kunci belum direset",
|
||||
"请先将锁重置为出厂状态,重置方法详见上一步指引。": "Reset kunci ke pengaturan pabrik terlebih dahulu, lihat langkah sebelumnya.",
|
||||
"找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。": "Temukan tombol reset pada kunci, tekan lama hingga terdengar bunyi atau lampu indikator berkedip.",
|
||||
"锁电量过低": "Baterai kunci lemah",
|
||||
"锁电量过低可能导致无法正常连接和添加。": "Baterai lemah dapat menyebabkan masalah koneksi dan penambahan.",
|
||||
"请更换电池后重试。": "Ganti baterai dan coba lagi.",
|
||||
"距离过远": "Terlalu jauh",
|
||||
"请确保手机与锁的距离在有效范围内。": "Pastikan ponsel berada dalam jangkauan kunci.",
|
||||
"将手机靠近锁,距离保持在1米以内。": "Dekatkan ponsel ke kunci, jarak dalam 1 meter.",
|
||||
"锁已被其他用户添加": "Kunci sudah ditambahkan oleh pengguna lain",
|
||||
"如果锁已被其他用户添加,需要先解除绑定。": "Jika kunci sudah ditambahkan, lepaskan dulu.",
|
||||
"请联系锁的管理员解除绑定,或使用管理员权限重置锁。": "Hubungi admin kunci untuk melepaskan atau gunakan hak admin untuk reset.",
|
||||
"使用小程序": "Gunakan mini program",
|
||||
"如果App无法正常添加锁,可以尝试使用小程序版本。": "Jika aplikasi tidak berfungsi, coba versi mini program.",
|
||||
"打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。": "Buka WeChat, cari '星星锁Lite' dan coba tambahkan kunci melalui mini program.",
|
||||
"尝试升级固件": "Coba upgrade firmware",
|
||||
"升级说明": "Petunjuk upgrade",
|
||||
"如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:": "Jika semua cara gagal, coba upgrade firmware kunci. Sebelum upgrade, pastikan:",
|
||||
"升级注意事项": "• Baterai kunci cukup\n• File firmware benar\n• Jangan putuskan koneksi selama upgrade",
|
||||
"找不到锁?点此查看。": "Tidak menemukan kunci? Klik di sini.",
|
||||
"常见问题": "Masalah umum",
|
||||
"固件升级": "Upgrade firmware",
|
||||
"固件升级描述": "Klik tombol \"Kembali ke pengaturan perangkat\" di sudut bawah kanan untuk kembali ke halaman pengaturan perangkat untuk upgrade firmware.",
|
||||
"邮箱地址必须包含@符号": "Alamat email harus mengandung '@'.",
|
||||
"手机号只能包含数字": "Nomor telepon hanya boleh mengandung angka",
|
||||
"重置方法请查阅设备说明书": "Lihat petunjuk penggunaan perangkat",
|
||||
"我已重置,继续添加": "Saya telah mengatur ulang, lanjutkan",
|
||||
"添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。": "Sebelum menambahkan perangkat, pastikan perangkat telah diatur ulang ke pengaturan pabrik. Setelah pengaturan ulang, semua data pengguna, termasuk sidik jari, kata sandi, dan kartu, akan dihapus."
|
||||
"语音包设置": "Pengaturan paket suara",
|
||||
"第三方平台设置": "Platform pihak ketiga diatur",
|
||||
"涂鸦智能": "Tuya Smart",
|
||||
"锁语音包设置": "Mengunci paket suara",
|
||||
"(中国台湾)": "(中国台湾)",
|
||||
"男声": "6 tahun sebelumnya",
|
||||
"女声": "Suara wanita",
|
||||
"您的图像和视频数据仅保留": "Data gambar dan video Anda hanya disimpan",
|
||||
"后图像和视频数据将会失效,开通": "Setelah itu, data gambar dan video akan tidak valid dan diaktifkan",
|
||||
"云存会员": "Keanggotaan Cloud Storage",
|
||||
"服务,图像视频信息随心存!": "Informasi layanan, gambar, dan video adalah inti Anda!",
|
||||
"图像": "citra",
|
||||
"视频": "Video",
|
||||
"当前国家不支持手机验证码注册,请使用邮箱进行注册": "Saat ini, negara tersebut tidak mendukung pendaftaran kode verifikasi ponsel, silakan gunakan alamat email Anda untuk mendaftar",
|
||||
"注:": "Catatan:",
|
||||
"必需在开始时间24小时内使用一次,否则将失效": "Harus digunakan sekali dalam waktu 24 jam setelah waktu mulai, jika tidak akan kedaluwarsa",
|
||||
"这是单次密码,只能使用一次": "Ini adalah kata sandi sekali pakai dan hanya bisa digunakan sekali",
|
||||
"您好": "Halo",
|
||||
"您的开门密码是": "Kode akses pintu Anda adalah",
|
||||
"开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标": "Untuk membuka kunci, aktifkan keyboard kunci terlebih dahulu, lalu masukkan kata sandi dan akhiri dengan #. Tombol # berada di sudut kanan bawah keyboard dan mungkin memiliki ikon berbeda"
|
||||
}
|
||||
@ -1065,7 +1065,7 @@
|
||||
"波兰语": "Polski",
|
||||
"斯洛伐克语": "Slovenčina",
|
||||
"捷克语": "Čeština",
|
||||
"希腊语": "Ελληνικά",
|
||||
"希腊语": "ελληνικά",
|
||||
"希伯来语": "עברית",
|
||||
"塞尔维亚语": "Српски",
|
||||
"土耳其语": "Türkçe",
|
||||
@ -1078,8 +1078,11 @@
|
||||
"印度尼西亚语": "Bahasa Indonesia",
|
||||
"芬兰语": "Suomi",
|
||||
"丹麦语": "Dansk",
|
||||
"印地语": "हिंदीName",
|
||||
"印地语": "हिंदी",
|
||||
"乌尔都语": "اوردو",
|
||||
"亚美尼亚语": "Հայերեն",
|
||||
"格鲁吉亚语": "ქართული",
|
||||
"巴西葡萄牙语": "Português do Brasil",
|
||||
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
|
||||
"繁体中文(中国香港)": "繁體中文(中國香港)",
|
||||
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Dopo il reset, le vene metacarpali della serratura verranno cancellate. Sei sicuro di voler reimpostare?",
|
||||
@ -1152,40 +1155,24 @@
|
||||
"3.安装Google Home APP,点击左上角的加号按钮": "3. Installa l’applicazione Home di Google e fai clic sul pulsante più nell’angolo in alto a sinistra",
|
||||
"暂无最新记录": "Attualmente non sono disponibili dati più recenti",
|
||||
"请将手机切换至2.4G WiFi进行手动连接": "Passa il telefono a 2,4g WiFi per la connessione manuale",
|
||||
"设备重置": "Ripristino dispositivo",
|
||||
"请确认设备已重置": "Si prega di confermare che il dispositivo è stato ripristinato",
|
||||
"添加设备前,请确保设备已重置为出厂状态。": "Prima di aggiungere il dispositivo, assicurati che sia stato ripristinato alle impostazioni di fabbrica.",
|
||||
"设备已重置": "Dispositivo ripristinato",
|
||||
"加不了锁常见问题": "Problemi comuni nell'aggiunta della serratura",
|
||||
"蓝牙未开启或未授权": "Bluetooth non attivato o non autorizzato",
|
||||
"请确保手机蓝牙已开启,并授权App使用蓝牙权限。": "Assicurati che il Bluetooth sia attivo e che l'app abbia le autorizzazioni necessarie.",
|
||||
"检查手机设置中的蓝牙权限,确保已授权给App。": "Controlla le autorizzazioni Bluetooth nelle impostazioni del telefono e assicurati che l'app sia autorizzata.",
|
||||
"未重置锁": "Serratura non ripristinata",
|
||||
"请先将锁重置为出厂状态,重置方法详见上一步指引。": "Ripristina prima la serratura alle impostazioni di fabbrica, vedi il passaggio precedente.",
|
||||
"找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。": "Trova il pulsante di reset sulla serratura, tienilo premuto finché non senti un bip o vedi la spia lampeggiare.",
|
||||
"锁电量过低": "Batteria della serratura scarica",
|
||||
"锁电量过低可能导致无法正常连接和添加。": "La batteria scarica può causare problemi di connessione e aggiunta.",
|
||||
"请更换电池后重试。": "Sostituisci la batteria e riprova.",
|
||||
"距离过远": "Troppo lontano",
|
||||
"请确保手机与锁的距离在有效范围内。": "Assicurati che il telefono sia nel raggio d'azione della serratura.",
|
||||
"将手机靠近锁,距离保持在1米以内。": "Avvicina il telefono alla serratura, distanza entro 1 metro.",
|
||||
"锁已被其他用户添加": "Serratura già aggiunta da un altro utente",
|
||||
"如果锁已被其他用户添加,需要先解除绑定。": "Se la serratura è già stata aggiunta, scollegala prima.",
|
||||
"请联系锁的管理员解除绑定,或使用管理员权限重置锁。": "Contatta l'amministratore della serratura per scollegarla o usa i permessi di amministratore per il ripristino.",
|
||||
"使用小程序": "Usa mini-programma",
|
||||
"如果App无法正常添加锁,可以尝试使用小程序版本。": "Se l'app non funziona, prova la versione mini-programma.",
|
||||
"打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。": "Apri WeChat, cerca '星星锁Lite' e prova ad aggiungere la serratura tramite mini-programma.",
|
||||
"尝试升级固件": "Prova ad aggiornare il firmware",
|
||||
"升级说明": "Istruzioni per l'aggiornamento",
|
||||
"如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:": "Se nessun metodo funziona, prova ad aggiornare il firmware della serratura. Prima di aggiornare, assicurati che:",
|
||||
"升级注意事项": "• La batteria della serratura è carica\n• Hai il file firmware corretto\n• Non scollegare durante l'aggiornamento",
|
||||
"找不到锁?点此查看。": "Non trovi la serratura? Clicca qui.",
|
||||
"常见问题": "Problemi comuni",
|
||||
"固件升级": "Aggiornamento firmware",
|
||||
"固件升级描述": "Clicca il pulsante \"Torna alle impostazioni del dispositivo\" in basso a destra per tornare alle impostazioni del dispositivo e provare a aggiornare il firmware.",
|
||||
"邮箱地址必须包含@符号": "L'indirizzo email deve contenere '@'.",
|
||||
"手机号只能包含数字": "Il numero di telefono può contenere solo numeri",
|
||||
"重置方法请查阅设备说明书": "Consulta il manuale dell'apparecchio",
|
||||
"我已重置,继续添加": "Ho reimpostato, continuo",
|
||||
"添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。": "Prima di aggiungere l'apparecchio, assicurati che sia stato reimpostato alle impostazioni di fabbrica. Dopo la reimpostazione, tutti i dati degli utenti, compresi i finger print, le password e le carte, verranno eliminati."
|
||||
"语音包设置": "Impostazioni pacchetto vocalea",
|
||||
"第三方平台设置": "Impostazioni di piattaforme di terze parti",
|
||||
"涂鸦智能": "Tuya Smart",
|
||||
"锁语音包设置": "Impostazioni pacchetto vocale blocco",
|
||||
"(中国台湾)": "(中国台湾)",
|
||||
"男声": "voce maschile",
|
||||
"女声": "voce femminile",
|
||||
"您的图像和视频数据仅保留": "I dati delle immagini e dei video vengono conservati solo",
|
||||
"后图像和视频数据将会失效,开通": "Successivamente, i dati dell'immagine e del video non saranno più validi e attivati",
|
||||
"云存会员": "Iscrizione al cloud storage",
|
||||
"服务,图像视频信息随心存!": "Le informazioni sul servizio, le immagini e i video sono al tuo centro!",
|
||||
"图像": "immagine",
|
||||
"视频": "Video",
|
||||
"当前国家不支持手机验证码注册,请使用邮箱进行注册": "Attualmente, il paese non supporta la registrazione del codice di verifica del telefono cellulare, si prega di utilizzare il proprio indirizzo e-mail per registrarsi",
|
||||
"注:": "Nota:",
|
||||
"必需在开始时间24小时内使用一次,否则将失效": "Deve essere utilizzato una volta entro 24 ore dall'orario di inizio, altrimenti scadrà",
|
||||
"这是单次密码,只能使用一次": "Questa è una password monouso e può essere utilizzata solo una volta",
|
||||
"您好": "Ciao",
|
||||
"您的开门密码是": "Il tuo codice di accesso alla porta è",
|
||||
"开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标": "Per sbloccare, attiva prima la tastiera del lucchetto, quindi inserisci la password e termina con #. Il tasto # si trova nell'angolo in basso a destra della tastiera e potrebbe avere un'icona diversa"
|
||||
}
|
||||
@ -1065,7 +1065,7 @@
|
||||
"波兰语": "Polski",
|
||||
"斯洛伐克语": "Slovenčina",
|
||||
"捷克语": "Čeština",
|
||||
"希腊语": "Ελληνικά",
|
||||
"希腊语": "ελληνικά",
|
||||
"希伯来语": "עברית",
|
||||
"塞尔维亚语": "Српски",
|
||||
"土耳其语": "Türkçe",
|
||||
@ -1078,8 +1078,11 @@
|
||||
"印度尼西亚语": "Bahasa Indonesia",
|
||||
"芬兰语": "Suomi",
|
||||
"丹麦语": "Dansk",
|
||||
"印地语": "हिंदीName",
|
||||
"印地语": "हिंदी",
|
||||
"乌尔都语": "اوردو",
|
||||
"亚美尼亚语": "Հայերեն",
|
||||
"格鲁吉亚语": "ქართული",
|
||||
"巴西葡萄牙语": "Português do Brasil",
|
||||
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
|
||||
"繁体中文(中国香港)": "繁體中文(中國香港)",
|
||||
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "リセット後、ロックの中手骨静脈が削除されます。リセットしてもよろしいですか。",
|
||||
@ -1152,40 +1155,24 @@
|
||||
"3.安装Google Home APP,点击左上角的加号按钮": "3. google homeアプリをインストールし、左上隅のプラスボタンをクリックします",
|
||||
"暂无最新记录": "最新の記録は残っていない",
|
||||
"请将手机切换至2.4G WiFi进行手动连接": "手動接続のため、携帯電話を2.4 g wifiに切り替えてください",
|
||||
"设备重置": "デバイスリセット",
|
||||
"请确认设备已重置": "デバイスがリセットされたことを確認してください",
|
||||
"添加设备前,请确保设备已重置为出厂状态。": "デバイスを追加する前に、工場出荷時の状態にリセットされていることを確認してください。",
|
||||
"设备已重置": "デバイスがリセットされました",
|
||||
"加不了锁常见问题": "デバイス追加時のよくある問題",
|
||||
"蓝牙未开启或未授权": "Bluetoothがオフまたは未許可",
|
||||
"请确保手机蓝牙已开启,并授权App使用蓝牙权限。": "Bluetoothがオンであり、アプリにBluetooth権限が付与されていることを確認してください。",
|
||||
"检查手机设置中的蓝牙权限,确保已授权给App。": "携帯の設定でBluetooth権限を確認し、アプリに許可されていることを確認してください。",
|
||||
"未重置锁": "ロックがリセットされていません",
|
||||
"请先将锁重置为出厂状态,重置方法详见上一步指引。": "まずロックを工場出荷時の状態にリセットしてください。リセット方法は前の手順を参照してください。",
|
||||
"找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。": "ロックのリセットボタンを見つけ、ビープ音が鳴るかインジケーターが点滅するまで長押ししてください。",
|
||||
"锁电量过低": "ロックのバッテリー残量が少ない",
|
||||
"锁电量过低可能导致无法正常连接和添加。": "バッテリー残量が少ないと、正常に接続や追加ができない場合があります。",
|
||||
"请更换电池后重试。": "電池を交換してから再試行してください。",
|
||||
"距离过远": "デバイスとの距離が遠すぎます",
|
||||
"请确保手机与锁的距离在有效范围内。": "携帯電話がロックの有効範囲内にあることを確認してください。",
|
||||
"将手机靠近锁,距离保持在1米以内。": "携帯電話をロックに近づけ、1メートル以内に保ってください。",
|
||||
"锁已被其他用户添加": "ロックは他のユーザーに追加されています",
|
||||
"如果锁已被其他用户添加,需要先解除绑定。": "ロックが他のユーザーに追加されている場合は、まずペアリングを解除する必要があります。",
|
||||
"请联系锁的管理员解除绑定,或使用管理员权限重置锁。": "ロックの管理者に連絡してペアリングを解除するか、管理者権限でリセットしてください。",
|
||||
"使用小程序": "ミニプログラムを使用",
|
||||
"如果App无法正常添加锁,可以尝试使用小程序版本。": "アプリでロックを追加できない場合は、ミニプログラム版をお試しください。",
|
||||
"打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。": "WeChatを開き、「星星锁Lite」ミニプログラムを検索して、ミニプログラムからロックを追加してみてください。",
|
||||
"尝试升级固件": "ファームウェアのアップグレードを試す",
|
||||
"升级说明": "アップグレード説明",
|
||||
"如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:": "上記の方法で解決しない場合は、ロックのファームウェアをアップグレードしてください。アップグレード前に以下を確認してください:",
|
||||
"升级注意事项": "• ロックのバッテリーが十分であること\n• 正しいファームウェアファイルを取得していること\n• アップグレード中は接続を切らないこと",
|
||||
"找不到锁?点此查看。": "ロックが見つかりませんか?こちらをクリック。",
|
||||
"常见问题": "よくある質問",
|
||||
"固件升级": "ファームウェアのアップグレード",
|
||||
"固件升级描述": "右下隅の「デバイス設定に戻る」ボタンをクリックして、ファームウェアのアップグレードを試してください。",
|
||||
"邮箱地址必须包含@符号": "メールアドレスには '@' が含まれている必要があります。",
|
||||
"手机号只能包含数字": "電話番号は数字のみを含むことができます",
|
||||
"重置方法请查阅设备说明书": "デバイスの使用説明書を参照してください",
|
||||
"我已重置,继续添加": "リセットしました。続けて追加します",
|
||||
"添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。": "デバイスを追加する前に、工場出荷時の状態にリセットされていることを確認してください。リセット後、デバイスのすべてのユーザーデータ(指紋、パスワード、カードなど)が削除されます。"
|
||||
"语音包设置": "ボイスパックの設定",
|
||||
"第三方平台设置": "サードパーティ製プラットフォームの設定",
|
||||
"涂鸦智能": "Tuya Smart",
|
||||
"锁语音包设置": "ロック音声パケット設定",
|
||||
"(中国台湾)": "(中国台湾)",
|
||||
"男声": "男声",
|
||||
"女声": "女声",
|
||||
"您的图像和视频数据仅保留": "画像と動画のデータのみが保持されます",
|
||||
"后图像和视频数据将会失效,开通": "その後、画像とビデオのデータは無効になり、アクティブになります",
|
||||
"云存会员": "クラウドストレージメンバーシップ",
|
||||
"服务,图像视频信息随心存!": "サービス、画像、ビデオ情報があなたの中心にあります!",
|
||||
"图像": "画像",
|
||||
"视频": "ビデオ",
|
||||
"当前国家不支持手机验证码注册,请使用邮箱进行注册": "現在、この国は携帯電話の認証コード登録をサポートしていませんので、メールアドレスを使用して登録してください",
|
||||
"注:": "注:",
|
||||
"必需在开始时间24小时内使用一次,否则将失效": "開始時刻から24時間以内に1回使用する必要があり、そうでなければ無効になります",
|
||||
"这是单次密码,只能使用一次": "これはワンタイムパスワードで、一度だけ使用できます",
|
||||
"您好": "こんにちは",
|
||||
"您的开门密码是": "あなたのドアアクセスコードは",
|
||||
"开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标": "ロックを解除するには、まずロックキーボードをアクティブにし、次にパスワードを入力し、#で終了します。#キーはキーボードの右下隅にあり、別のアイコンの場合があります"
|
||||
}
|
||||
1184
lan/lan_ka.json
Normal file
@ -1083,6 +1083,9 @@
|
||||
"丹麦语": "丹麦语",
|
||||
"印地语": "印地语",
|
||||
"乌尔都语": "乌尔都语",
|
||||
"亚美尼亚语": "亚美尼亚语",
|
||||
"格鲁吉亚语": "格鲁吉亚语",
|
||||
"巴西葡萄牙语": "Português do Brasil",
|
||||
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
|
||||
"繁体中文(中国香港)": "繁體中文(中國香港)",
|
||||
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?",
|
||||
@ -1099,7 +1102,7 @@
|
||||
"支持的国家": "支持的国家",
|
||||
"支持的国家值": "美国、加拿大、英国、澳大利亚、印度、德国、法国、意大利、西班牙、日本",
|
||||
"操作流程": "操作流程",
|
||||
"操作流程值":"1 用智能锁APP添加锁和网关\n\n2 在APP里开启锁的远程开锁功能(这个功能默认是关闭的)。如果没有这个选项,则锁不支持Alexa \n\n3 在Alexa中添加Skill,并用智能锁APP的账号和密码进行授权。授权成功后就可以发现账号下的设备\n\n4 在Alexa app里找到锁,开启语音开锁的功能,并设置语言密码\n\n5 可以通过Alexa操作锁了",
|
||||
"操作流程值": "1 用智能锁APP添加锁和网关\n\n2 在APP里开启锁的远程开锁功能(这个功能默认是关闭的)。如果没有这个选项,则锁不支持Alexa \n\n3 在Alexa中添加Skill,并用智能锁APP的账号和密码进行授权。授权成功后就可以发现账号下的设备\n\n4 在Alexa app里找到锁,开启语音开锁的功能,并设置语言密码\n\n5 可以通过Alexa操作锁了",
|
||||
"Google Home": "Google Home",
|
||||
"Action name": "Action name",
|
||||
"ScienerSmart": "ScienerSmart",
|
||||
@ -1163,40 +1166,24 @@
|
||||
"需要相机权限": "需要相机权限",
|
||||
"此功能的开启和关闭只能在锁附近通过手机蓝牙进行": "此功能的开启和关闭只能在锁附近通过手机蓝牙进行",
|
||||
"网关添加成功": "网关添加成功",
|
||||
"设备重置": "设备重置",
|
||||
"请确认设备已重置": "请确认设备已重置",
|
||||
"添加设备前,请确保设备已重置为出厂状态。": "添加设备前,请确保设备已重置为出厂状态。",
|
||||
"设备已重置": "设备已重置",
|
||||
"加不了锁常见问题": "加不了锁常见问题",
|
||||
"蓝牙未开启或未授权": "蓝牙未开启或未授权",
|
||||
"请确保手机蓝牙已开启,并授权App使用蓝牙权限。": "请确保手机蓝牙已开启,并授权App使用蓝牙权限。",
|
||||
"检查手机设置中的蓝牙权限,确保已授权给App。": "检查手机设置中的蓝牙权限,确保已授权给App。",
|
||||
"未重置锁": "未重置锁",
|
||||
"请先将锁重置为出厂状态,重置方法详见上一步指引。": "请先将锁重置为出厂状态,重置方法详见上一步指引。",
|
||||
"找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。": "找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。",
|
||||
"锁电量过低": "锁电量过低",
|
||||
"锁电量过低可能导致无法正常连接和添加。": "锁电量过低可能导致无法正常连接和添加。",
|
||||
"请更换电池后重试。": "请更换电池后重试。",
|
||||
"距离过远": "距离过远",
|
||||
"请确保手机与锁的距离在有效范围内。": "请确保手机与锁的距离在有效范围内。",
|
||||
"将手机靠近锁,距离保持在1米以内。": "将手机靠近锁,距离保持在1米以内。",
|
||||
"锁已被其他用户添加": "锁已被其他用户添加",
|
||||
"如果锁已被其他用户添加,需要先解除绑定。": "如果锁已被其他用户添加,需要先解除绑定。",
|
||||
"请联系锁的管理员解除绑定,或使用管理员权限重置锁。": "请联系锁的管理员解除绑定,或使用管理员权限重置锁。",
|
||||
"使用小程序": "使用小程序",
|
||||
"如果App无法正常添加锁,可以尝试使用小程序版本。": "如果App无法正常添加锁,可以尝试使用小程序版本。",
|
||||
"打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。": "打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。",
|
||||
"尝试升级固件": "尝试升级固件",
|
||||
"升级说明": "升级说明",
|
||||
"如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:": "如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:",
|
||||
"升级注意事项": "锁电量充足\n• 已获取正确的固件文件\n• 升级过程中不要断开连接",
|
||||
"找不到锁?点此查看。": "找不到锁?点此查看。",
|
||||
"常见问题": "常见问题",
|
||||
"固件升级": "固件升级",
|
||||
"固件升级描述": "请点击右下角\"点击返回设备配对\"按钮返回设备配对页面进行固件升级",
|
||||
"邮箱地址必须包含@符号": "邮箱地址必须包含@符号",
|
||||
"手机号只能包含数字": "手机号只能包含数字",
|
||||
"重置方法请查阅设备说明书": "重置方法请查阅设备说明书",
|
||||
"我已重置,继续添加": "我已重置,继续添加",
|
||||
"添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。": "添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。"
|
||||
"第三方平台设置": "第三方平台设置",
|
||||
"涂鸦智能": "Tuya Smart",
|
||||
"锁语音包设置": "锁语音包设置",
|
||||
"语音包设置": "语音包设置",
|
||||
"(中国台湾)": "(中国台湾)",
|
||||
"男声": "男声",
|
||||
"女声": "女声",
|
||||
"您的图像和视频数据仅保留": "您的图像和视频数据仅保留",
|
||||
"后图像和视频数据将会失效,开通": "后图像和视频数据将会失效,开通",
|
||||
"云存会员": "云存会员",
|
||||
"服务,图像视频信息随心存!": "服务,图像视频信息随心存!",
|
||||
"图像": "图像",
|
||||
"视频": "视频",
|
||||
"当前国家不支持手机验证码注册,请使用邮箱进行注册": "当前国家不支持手机验证码注册,请使用邮箱进行注册",
|
||||
"注:":"注:",
|
||||
"必需在开始时间24小时内使用一次,否则将失效": "必需在开始时间24小时内使用一次,否则将失效",
|
||||
"这是单次密码,只能使用一次": "这是单次密码,只能使用一次",
|
||||
"您好": "您好",
|
||||
"您的开门密码是": "您的开门密码是",
|
||||
"开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标": "开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标"
|
||||
}
|
||||
|
||||
@ -31,8 +31,8 @@
|
||||
"简写周三": "WW",
|
||||
"简写周四": "T",
|
||||
"简写周五": "F",
|
||||
"简写周六": "SName",
|
||||
"简写周日": "SName",
|
||||
"简写周六": "S",
|
||||
"简写周日": "S",
|
||||
"周一": "MonComment",
|
||||
"周二": "Туе",
|
||||
"周三": "Жеті",
|
||||
@ -116,7 +116,7 @@
|
||||
"微信二维码": "QR кодін ашу",
|
||||
"拥有电子钥匙的人,通过微信扫一扫这个二维码,即可开门。每把锁的二维码都不相同,你可以将其打印出来贴在对应的锁旁边": "Электронлық кілттер бар адамдар осы QR коды \"WeChat\" дегенді сіздеп, шұқсаты ашылады. Әрбір блоктың QR коды басқа. Оны баспаға сәйкесті блоктың жағысын орналаса аласыз.",
|
||||
"锁编号": "Боқталсын",
|
||||
"电量": "БатареяName",
|
||||
"电量": "Батарея",
|
||||
"锁分组": "Топты бұғаттау",
|
||||
"选择分组": "Топты таңдау",
|
||||
"创建新分组": "Топты құру",
|
||||
@ -279,7 +279,7 @@
|
||||
"发卡工具": "КодтамасыComment",
|
||||
"购买高级功能须知": "Хабарламасы",
|
||||
"购买高级功能提示": "Қосымша мүмкіндіктер құрылғыда, егер керек болса, бұғаттардың санын ашу үшін көмектесіңіз. Қосымша мүмкіндіктері ғана өзіңізді бұғаттарыңыз. Егер әкімгілікті әкімші болса, қызметті ашу үшін блоктау жоғарғы әкімшісін қатынасыз",
|
||||
"免费体验": "Бос сынауName",
|
||||
"免费体验": "Бос сынау",
|
||||
"立即开通": "Қазір ашу",
|
||||
"购买短信": "SMS сақтау",
|
||||
"购买邮件": "Эл. поштаны сақтау",
|
||||
@ -301,8 +301,8 @@
|
||||
"对于选中的这些锁,当用户用APP开锁时,他的手机需要是连网的,否则无法开锁": "Таңдалған блоктарды APP-мен ашу үшін пайдаланушының телефонын онлайн болу керек.",
|
||||
"配置WiFi": "WiFi баптау",
|
||||
"请输入WiFi名字": "Wifi атын келтіріңіз",
|
||||
"WiFi配网": "WiFi тарату желіName",
|
||||
"胁迫卡": "Стрес картасыName",
|
||||
"WiFi配网": "WiFi тарату желі",
|
||||
"胁迫卡": "Стрес картасы",
|
||||
"员工是否有密码": "Бастапқы кодтары",
|
||||
"员工是否有卡": "Карта бар ғой",
|
||||
"员工是否有指纹": "Бақылау тізімін орнату",
|
||||
@ -327,7 +327,7 @@
|
||||
"防误开已关闭,关门后仍可使用面容开锁": "Ашылмағанды жабылсын",
|
||||
"添加和使用面容开锁时": "Жүктеу кезінде тағы қосу мен қолданылсын",
|
||||
"添加和使用面容开锁时提示": "\n1, бір адам қашықтығы операцияның алдында ұстап көріңіз.\n2, қазірішін бұғаттардың алдында 0,5 ~ 0,8 мсят, әзірін бұғаттарды келтіріңіз.\n3. Өшіріңізді бейімде болсап, өзіңізді таңдаңыз.\n4. Көйін анықтауы дұрыс емес болса, цифриқ пернетінің перне енгізінді қолмен қайта қосу үшін перне іске қоса аласыз.",
|
||||
"秒": "SName",
|
||||
"秒": "S",
|
||||
"请根据门锁实际情况,请谨慎选择电机功率:": "Мотодор қуаттандық қадамдастыру үшін таңдаңыз:",
|
||||
"小功率:": "Миноват:",
|
||||
"耗电少": "Қуаттандықтан кейі",
|
||||
@ -351,7 +351,7 @@
|
||||
"员工信息": "Жергілікті мәліметі",
|
||||
"员工": "Таңдау",
|
||||
"打卡方式无效": "Қол жеткізбеді",
|
||||
"中国": "КітаName",
|
||||
"中国": "Кіта",
|
||||
"选择钥匙": "Eky таңдау",
|
||||
"编辑": "Өңдеу",
|
||||
"无": "Жоқ",
|
||||
@ -531,7 +531,7 @@
|
||||
"公司名称不能小于6个字符": "Компанияның атауы 6 таңба болмайды",
|
||||
"WIFI列表": "WIFI тізімі",
|
||||
"刷新": "Жаңарту",
|
||||
"手动配网": "Қолмен үлестірім желіName",
|
||||
"手动配网": "Қолмен үлестірім желі",
|
||||
"远距离": "Үл қашықтығы",
|
||||
"中距离": "Орташа қашықтығы",
|
||||
"近距离": "Қысқа қашықтығы",
|
||||
@ -548,7 +548,7 @@
|
||||
"管理员密码": "Әдетті өшіру",
|
||||
"如需修改,请输入新的管理员密码(6位),点击确定即可修改": "Егер өзгерту керек болса, жаңа әкімшіші",
|
||||
"修改": "Өзгерту",
|
||||
"网络摄像头": "КамераName",
|
||||
"网络摄像头": "Камера",
|
||||
"重命名": "Атын ауыстыру",
|
||||
"分组下的锁将被移到未分组里": "Топтың төменгі блокталар тобысмен жылжытады",
|
||||
"编辑成功": "Сәтті өңдеу",
|
||||
@ -574,7 +574,7 @@
|
||||
"请手动在系统设置中开启": "Жүйелік параметрлерде қолмен іске қосыңыз",
|
||||
"权限以继续使用应用": "Қолданбаны жалғастыру рұқсат ету.",
|
||||
"去设置": "Оны орнату",
|
||||
"当前网络": "Назардағы желіName",
|
||||
"当前网络": "Назардағы желі",
|
||||
"位置信息": "Орналасуы ақпарат",
|
||||
"请输入wifi名称": "Wifi атауын келтіріңіз",
|
||||
"虹膜": "Iris",
|
||||
@ -601,7 +601,7 @@
|
||||
"提醒方式": "Ескерту жолы",
|
||||
"开门方式": "Қашықты ашылсын",
|
||||
"请选择": "Таңдау",
|
||||
"家人": "Үлгі мүшесіName",
|
||||
"家人": "Үлгі мүшесі",
|
||||
"保存": "Сақтау",
|
||||
"APP推送": "APP басы",
|
||||
"管理员": "Adminu",
|
||||
@ -639,13 +639,13 @@
|
||||
"全部视频": "Барлық видеолар",
|
||||
"已为本设备免费提供3大滚动视频储存服务": "Құрылғының шкі видео сақтау қызметі орындалды",
|
||||
"视频播放": "Видео ойнау",
|
||||
"全选": "БарлықтыName",
|
||||
"全选": "Барлықты",
|
||||
"请选择要删除的视频": "Өшіру келетін видеоін таңдаңыз",
|
||||
"请选择要下载的视频": "Жүктеу үшін осы видеоты таңдаңыз",
|
||||
"欢迎使用": "Қолданға қоша",
|
||||
"用户协议和隐私政策概要": "Пайдаланушы келесі мен бақылау ережесінің ақпарат",
|
||||
"协议概要": "Протоколды тобысы",
|
||||
"感谢您使用本应用。我们非常重视您的个人信息和隐私保护,在使用本产品之前,请认真阅读": "Бұл қолданба қолданбасы үшін рахмет. Біздің жеке мәліметіңізді әдеттіңізге және жеке ақпараттық қорғастырыңызды. Осы продуктты қолдану алдында, оны ескертін оқыңызName",
|
||||
"感谢您使用本应用。我们非常重视您的个人信息和隐私保护,在使用本产品之前,请认真阅读": "Бұл қолданба қолданбасы үшін рахмет. Біздің жеке мәліметіңізді әдеттіңізге және жеке ақпараттық қорғастырыңызды. Осы продуктты қолдану алдында, оны ескертін оқыңыз",
|
||||
"《用户协议》": "Пайдаланушы ақпараты",
|
||||
"和": "Сот",
|
||||
"《隐私政策》": "חPrivacy ережес",
|
||||
@ -805,7 +805,7 @@
|
||||
"蓝牙未打开,请到设置里面打开蓝牙": "Bluetooth енгізілмеген, Bluetooth баптауларын көрсетіңіз",
|
||||
"删除用户时,会将用户拥有的钥匙一起删除。": "Пайдаланушының келтірілген, егер Пайдаланушыға сәйкес келеді.",
|
||||
"配置网络": "Желі & баптау",
|
||||
"你好": "ЖарыName",
|
||||
"你好": "Жары",
|
||||
"成功": "Сәттін",
|
||||
"类型选择": "Таңдау",
|
||||
"请选择要使用哪种类型": "Қолданатын түрін таңдаңыз",
|
||||
@ -834,8 +834,8 @@
|
||||
"微信": "WeChat",
|
||||
"朋友圈": "Текшер",
|
||||
"QQ": "QQ",
|
||||
"QQ空间": "QQZoneName",
|
||||
"微博": "WeiboName",
|
||||
"QQ空间": "QQZone",
|
||||
"微博": "Weibo",
|
||||
"FaceBook": "FaceBook",
|
||||
"链接": "Сілтеме",
|
||||
"今天": "Бүгіз",
|
||||
@ -1065,7 +1065,7 @@
|
||||
"波兰语": "Polski",
|
||||
"斯洛伐克语": "Slovenčina",
|
||||
"捷克语": "Čeština",
|
||||
"希腊语": "Ελληνικά",
|
||||
"希腊语": "ελληνικά",
|
||||
"希伯来语": "עברית",
|
||||
"塞尔维亚语": "Српски",
|
||||
"土耳其语": "Türkçe",
|
||||
@ -1078,8 +1078,11 @@
|
||||
"印度尼西亚语": "Bahasa Indonesia",
|
||||
"芬兰语": "Suomi",
|
||||
"丹麦语": "Dansk",
|
||||
"印地语": "हिंदीName",
|
||||
"印地语": "हिंदी",
|
||||
"乌尔都语": "اوردو",
|
||||
"亚美尼亚语": "Հայերեն",
|
||||
"格鲁吉亚语": "ქართული",
|
||||
"巴西葡萄牙语": "Português do Brasil",
|
||||
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
|
||||
"繁体中文(中国香港)": "繁體中文(中國香港)",
|
||||
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Қайта ысырып тастағаннан соң бұғаттағы метакарпалар өшіріледі. Шынымен ысырып тастауды қалайсыз ба?",
|
||||
@ -1152,40 +1155,24 @@
|
||||
"3.安装Google Home APP,点击左上角的加号按钮": "3. Google Home бағдарламасын орнатып, жоғарғы сол жақ бұрыштағы қосу түймешігін басыңыз",
|
||||
"暂无最新记录": "Қазіргі уақытта қол жетімді соңғы жазбалар жоқ",
|
||||
"请将手机切换至2.4G WiFi进行手动连接": "Телефонды қолмен қосу үшін 2.4G WiFi бағдарламасына ауыстыруыңызды сұраймыз",
|
||||
"设备重置": "Құрылғыны қалпына келтіру",
|
||||
"请确认设备已重置": "Құрылғының қалпына келтірілгенін растаңыз",
|
||||
"添加设备前,请确保设备已重置为出厂状态。": "Құрылғыны қоспас бұрын, оны зауыттық параметрлерге қалпына келтіргеніңізге көз жеткізіңіз.",
|
||||
"设备已重置": "Құрылғы қалпына келтірілді",
|
||||
"加不了锁常见问题": "Құлып қоса алмау бойынша жиі кездесетін мәселелер",
|
||||
"蓝牙未开启或未授权": "Bluetooth қосылмаған немесе рұқсат етілмеген",
|
||||
"请确保手机蓝牙已开启,并授权App使用蓝牙权限。": "Телефоныңызда Bluetooth қосылғанына және қолданбаға рұқсат берілгеніне көз жеткізіңіз.",
|
||||
"检查手机设置中的蓝牙权限,确保已授权给App。": "Телефон параметрлеріндегі Bluetooth рұқсаттарын тексеріп, қолданбаға рұқсат берілгеніне көз жеткізіңіз.",
|
||||
"未重置锁": "Құлып қалпына келтірілмеген",
|
||||
"请先将锁重置为出厂状态,重置方法详见上一步指引。": "Алдымен құлыпты зауыттық параметрлерге қалпына келтіріңіз, қалпына келтіру әдісі алдыңғы қадамда көрсетілген.",
|
||||
"找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。": "Құлыптағы қалпына келтіру түймесін тауып, дыбыс шыққанша немесе индикатор жыпылықтағанша басып тұрыңыз.",
|
||||
"锁电量过低": "Құлыптың қуаты төмен",
|
||||
"锁电量过低可能导致无法正常连接和添加。": "Құлыптың қуаты төмен болса, қалыпты қосылу және қосу мүмкін емес.",
|
||||
"请更换电池后重试。": "Батареяны ауыстырып, қайта көріңіз.",
|
||||
"距离过远": "Қашықтық тым алыс",
|
||||
"请确保手机与锁的距离在有效范围内。": "Телефон мен құлыптың арақашықтығы жарамды шекте екеніне көз жеткізіңіз.",
|
||||
"将手机靠近锁,距离保持在1米以内。": "Телефонды құлыпқа жақындатыңыз, арақашықтық 1 метрден аспасын.",
|
||||
"锁已被其他用户添加": "Құлып басқа пайдаланушыға қосылған",
|
||||
"如果锁已被其他用户添加,需要先解除绑定。": "Егер құлып басқа пайдаланушыға қосылған болса, алдымен байланысты үзіңіз.",
|
||||
"请联系锁的管理员解除绑定,或使用管理员权限重置锁。": "Құлыптың әкімшісіне хабарласып, байланысты үзіңіз немесе әкімші құқықтарын пайдаланып құлыпты қалпына келтіріңіз.",
|
||||
"使用小程序": "Мини-бағдарламаны пайдалану",
|
||||
"如果App无法正常添加锁,可以尝试使用小程序版本。": "Егер қолданба арқылы құлыпты қоса алмасаңыз, мини-бағдарламаны қолданып көріңіз.",
|
||||
"打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。": "WeChat-ты ашып, '星星锁Lite' мини-бағдарламасын іздеп, құлыпты қосып көріңіз.",
|
||||
"尝试升级固件": "Фирмалық бағдарламаны жаңарту",
|
||||
"升级说明": "Жаңарту нұсқаулығы",
|
||||
"如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:": "Егер жоғарыдағы әдістер көмектеспесе, құлыптың фирмалық бағдарламасын жаңартып көріңіз. Жаңартудан бұрын келесілерге көз жеткізіңіз:",
|
||||
"升级注意事项": "Құлыптың қуаты жеткілікті\n• Дұрыс фирмалық файл алынған\n• Жаңарту кезінде байланыс үзілмесін",
|
||||
"找不到锁?点此查看。": "Құлып табылмады ма? Мұнда басыңыз.",
|
||||
"常见问题": "Жиі қолданылатын мәселелер",
|
||||
"固件升级": "Фирмалық бағдарламаны жаңарту",
|
||||
"固件升级描述": "Жоғары сол жақ бұрыштағы \"Құрылғыны қосу\" батырмасын басып, құлыптың фирмалық бағдарламасын жаңартып көріңіз.",
|
||||
"邮箱地址必须包含@符号": "Электрондық пошта адресі '@' белгісін қамтитын болуы тиіс.",
|
||||
"手机号只能包含数字": "Телефон нөмірі тек сандардан тұруы тиіс",
|
||||
"重置方法请查阅设备说明书": "Құрылғының қолданылу құралдарын қараңыз",
|
||||
"我已重置,继续添加": "Қалпына келтірілді, жалғастыру",
|
||||
"添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。": "Құрылғыны қоспас бұрын, оны зауыттық параметрлерге қалпына келтіргеніңізге көз жеткізіңіз. Қалпына келтірілген құрылғыда барлық пайдаланушы деректері, мысалы, қол үстелі, пароль, карталар т.б. тазартылады."
|
||||
"语音包设置": "Дауыстық бума параметрлері",
|
||||
"第三方平台设置": "Үшінші тарап платформасының параметрлері",
|
||||
"涂鸦智能": "Tuya Smart",
|
||||
"锁语音包设置": "Дауыстық бума параметрлерін құлыптау",
|
||||
"(中国台湾)": "(中国台湾)",
|
||||
"男声": "ер дауысы",
|
||||
"女声": "Әйел дауысы",
|
||||
"您的图像和视频数据仅保留": "Сіздің кескініңіз бен бейне деректеріңіз тек сақталады",
|
||||
"后图像和视频数据将会失效,开通": "Осыдан кейін кескін мен бейне деректер жарамсыз болып, белсендіріледі",
|
||||
"云存会员": "Бұлтты сақтауға мүшелік",
|
||||
"服务,图像视频信息随心存!": "Қызмет, бейне және бейне ақпарат сіздің жүрегіңізде жатыр!",
|
||||
"图像": "кескіні",
|
||||
"视频": "Бейне",
|
||||
"当前国家不支持手机验证码注册,请使用邮箱进行注册": "Қазіргі уақытта елде ұялы телефонды растау кодын тіркеуді қолдамайды, тіркелу үшін электрондық пошта мекенжайыңызды пайдаланыңыз",
|
||||
"注:": "Ескерту:",
|
||||
"必需在开始时间24小时内使用一次,否则将失效": "Бастау уақытынан бастап 24 сағат ішінде бір рет қолдану керек, әйтпесе мерзімі аяқталады",
|
||||
"这是单次密码,只能使用一次": "Бұл бір реттік құпиясөз, оны тек бір рет қолдануға болады",
|
||||
"您好": "Сәлеметсіз бе",
|
||||
"您的开门密码是": "Есікті ашу кодыңыз",
|
||||
"开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标": "Құлыпты ашу үшін алдымен құлып пернетақтасын іске қосыңыз, содан кейін құпиясөзді енгізіп, # арқылы аяқтаңыз. # пернесі пернетақтаның төменгі оң жақ бұрышында орналасқан және басқа белгі болуы мүмкін"
|
||||
}
|
||||
@ -1065,7 +1065,7 @@
|
||||
"波兰语": "Polski",
|
||||
"斯洛伐克语": "Slovenčina",
|
||||
"捷克语": "Čeština",
|
||||
"希腊语": "Ελληνικά",
|
||||
"希腊语": "ελληνικά",
|
||||
"希伯来语": "עברית",
|
||||
"塞尔维亚语": "Српски",
|
||||
"土耳其语": "Türkçe",
|
||||
@ -1078,8 +1078,11 @@
|
||||
"印度尼西亚语": "Bahasa Indonesia",
|
||||
"芬兰语": "Suomi",
|
||||
"丹麦语": "Dansk",
|
||||
"印地语": "हिंदीName",
|
||||
"印地语": "हिंदी",
|
||||
"乌尔都语": "اوردو",
|
||||
"亚美尼亚语": "Հայերեն",
|
||||
"格鲁吉亚语": "ქართული",
|
||||
"巴西葡萄牙语": "Português do Brasil",
|
||||
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
|
||||
"繁体中文(中国香港)": "繁體中文(中國香港)",
|
||||
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "재설정 후 잠금 장치의 중수골 정맥이 삭제됩니다. 당신은 당신이 재설정 하시겠습니까?",
|
||||
@ -1152,40 +1155,24 @@
|
||||
"3.安装Google Home APP,点击左上角的加号按钮": "3. 구글 홈 앱을 설치하고 왼쪽 상단 모서리에 있는 더하기 버튼을 클릭합니다",
|
||||
"暂无最新记录": "현재 사용 가능한 최신 레코드가 없습니다",
|
||||
"请将手机切换至2.4G WiFi进行手动连接": "수동 연결을 위해 핸드폰을 2.4G WiFi로 바꿔주세요",
|
||||
"设备重置": "장치 초기화",
|
||||
"请确认设备已重置": "장치가 초기화되었는지 확인하세요",
|
||||
"添加设备前,请确保设备已重置为出厂状态。": "장치를 추가하기 전에 공장 초기화가 되었는지 확인하세요.",
|
||||
"设备已重置": "장치가 초기화되었습니다",
|
||||
"加不了锁常见问题": "장치 추가 문제 FAQ",
|
||||
"蓝牙未开启或未授权": "블루투스 꺼짐 또는 권한 없음",
|
||||
"请确保手机蓝牙已开启,并授权App使用蓝牙权限。": "휴대폰 블루투스가 켜져 있고 앱에 권한이 있는지 확인하세요.",
|
||||
"检查手机设置中的蓝牙权限,确保已授权给App。": "휴대폰 설정에서 블루투스 권한을 확인하고 앱에 허용하세요.",
|
||||
"未重置锁": "장치가 초기화되지 않음",
|
||||
"请先将锁重置为出厂状态,重置方法详见上一步指引。": "먼저 장치를 공장 초기화하세요. 방법은 이전 단계를 참고하세요.",
|
||||
"找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。": "장치의 초기화 버튼을 찾아 삑 소리나 표시등이 깜빡일 때까지 길게 누르세요.",
|
||||
"锁电量过低": "장치 배터리 부족",
|
||||
"锁电量过低可能导致无法正常连接和添加。": "배터리가 부족하면 연결 또는 추가가 안 될 수 있습니다.",
|
||||
"请更换电池后重试。": "배터리를 교체한 후 다시 시도하세요.",
|
||||
"距离过远": "거리가 너무 멀다",
|
||||
"请确保手机与锁的距离在有效范围内。": "휴대폰이 장치와 가까운지 확인하세요.",
|
||||
"将手机靠近锁,距离保持在1米以内。": "휴대폰을 장치에 1m 이내로 가까이 하세요.",
|
||||
"锁已被其他用户添加": "장치가 다른 사용자에 의해 추가됨",
|
||||
"如果锁已被其他用户添加,需要先解除绑定。": "장치가 다른 사용자에 의해 추가된 경우 먼저 연결을 해제하세요.",
|
||||
"请联系锁的管理员解除绑定,或使用管理员权限重置锁。": "관리자에게 문의하여 연결을 해제하거나 관리자 권한으로 초기화하세요.",
|
||||
"使用小程序": "미니프로그램 사용",
|
||||
"如果App无法正常添加锁,可以尝试使用小程序版本。": "앱에서 추가가 안 되면 미니프로그램을 사용해보세요.",
|
||||
"打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。": "위챗을 열고 '星星锁Lite' 미니프로그램을 검색하여 추가해보세요.",
|
||||
"尝试升级固件": "펌웨어 업그레이드 시도",
|
||||
"升级说明": "업그레이드 안내",
|
||||
"如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:": "위 방법으로 해결되지 않으면 펌웨어 업그레이드를 시도하세요. 업그레이드 전 확인사항:",
|
||||
"升级注意事项": "• 배터리가 충분한지\n• 올바른 펌웨어 파일 확보\n• 업그레이드 중 연결 해제 금지",
|
||||
"找不到锁?点此查看。": "장치를 찾을 수 없나요? 여기를 클릭하세요.",
|
||||
"常见问题": "자주 묻는 질문",
|
||||
"固件升级": "펌웨어 업그레이드",
|
||||
"固件升级描述": "하단 우측 모서리에 있는 \"장치 설정으로 돌아가기\" 버튼을 클릭하여 펌웨어 업그레이드를 시도하세요.",
|
||||
"邮箱地址必须包含@符号": "이메일 주소에는 '@'가 포함되어야 합니다.",
|
||||
"手机号只能包含数字": "전화번호는 숫자만 포함할 수 있습니다",
|
||||
"重置方法请查阅设备说明书": "장치 사용 설명서를 참조하세요",
|
||||
"我已重置,继续添加": "초기화 완료, 계속 추가",
|
||||
"添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。": "장치를 추가하기 전에 공장 초기화가 되었는지 확인하세요. 초기화 후 모든 사용자 데이터, 예를 들어 지문, 비밀번호, 카드 등이 삭제됩니다."
|
||||
"语音包设置": "음성 팩 설정",
|
||||
"第三方平台设置": "타사 플랫폼 설정",
|
||||
"涂鸦智能": "Tuya Smart",
|
||||
"锁语音包设置": "음성팩 설정 잠금",
|
||||
"(中国台湾)": "(中国台湾)",
|
||||
"男声": "남성",
|
||||
"女声": "여성 목소리",
|
||||
"您的图像和视频数据仅保留": "이미지 및 동영상 데이터만 보존됩니다.",
|
||||
"后图像和视频数据将会失效,开通": "그 후 이미지 및 비디오 데이터는 유효하지 않고 활성화됩니다",
|
||||
"云存会员": "클라우드 스토리지 멤버십",
|
||||
"服务,图像视频信息随心存!": "서비스, 이미지 및 비디오 정보가 당신의 중심에 있습니다!",
|
||||
"图像": "이미지",
|
||||
"视频": "비디오",
|
||||
"当前国家不支持手机验证码注册,请使用邮箱进行注册": "현재 해당 국가는 휴대폰 인증코드 등록을 지원하지 않으니 이메일 주소를 사용하여 등록하세요.",
|
||||
"注:": "참고:",
|
||||
"必需在开始时间24小时内使用一次,否则将失效": "시작 시간으로부터 24시간 이내에 한 번 사용해야 하며, 그렇지 않으면 만료됩니다.",
|
||||
"这是单次密码,只能使用一次": "이것은 일회용 비밀번호로 한 번만 사용할 수 있습니다.",
|
||||
"您好": "안녕하세요",
|
||||
"您的开门密码是": "귀하의 문 열기 코드는",
|
||||
"开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标": "잠금을 해제하려면 먼저 잠금 키보드를 활성화한 다음 비밀번호를 입력하고 #로 끝냅니다. # 키는 키보드의 오른쪽 하단 모서리에 있으며 다른 아이콘일 수 있습니다."
|
||||
}
|
||||
@ -1065,7 +1065,7 @@
|
||||
"波兰语": "Polski",
|
||||
"斯洛伐克语": "Slovenčina",
|
||||
"捷克语": "Čeština",
|
||||
"希腊语": "Ελληνικά",
|
||||
"希腊语": "ελληνικά",
|
||||
"希伯来语": "עברית",
|
||||
"塞尔维亚语": "Српски",
|
||||
"土耳其语": "Türkçe",
|
||||
@ -1078,8 +1078,11 @@
|
||||
"印度尼西亚语": "Bahasa Indonesia",
|
||||
"芬兰语": "Suomi",
|
||||
"丹麦语": "Dansk",
|
||||
"印地语": "हिंदीName",
|
||||
"印地语": "हिंदी",
|
||||
"乌尔都语": "اوردو",
|
||||
"亚美尼亚语": "Հայերեն",
|
||||
"格鲁吉亚语": "ქართული",
|
||||
"巴西葡萄牙语": "Português do Brasil",
|
||||
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
|
||||
"繁体中文(中国香港)": "繁體中文(中國香港)",
|
||||
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Po reset užrakto metakarpinės venos bus ištrintos. Ar tikrai norite atstatyti?",
|
||||
@ -1152,40 +1155,24 @@
|
||||
"3.安装Google Home APP,点击左上角的加号按钮": "3. Įdiekite \"Google Home\" programą ir spustelėkite pliuso mygtuką viršutiniame kairiajame kampe",
|
||||
"暂无最新记录": "Šiuo metu nėra naujausių įrašų",
|
||||
"请将手机切换至2.4G WiFi进行手动连接": "Perjunkite telefoną į 2.4G WiFi, kad galėtumėte prisijungti rankiniu būdu",
|
||||
"设备重置": "Įrenginio atstatymas",
|
||||
"请确认设备已重置": "Patvirtinkite, kad įrenginys buvo atstatytas",
|
||||
"添加设备前,请确保设备已重置为出厂状态。": "Prieš pridėdami įrenginį, įsitikinkite, kad jis atstatytas į gamyklinius nustatymus.",
|
||||
"设备已重置": "Įrenginys atstatytas",
|
||||
"加不了锁常见问题": "Dažnos problemos pridedant užraktą",
|
||||
"蓝牙未开启或未授权": "Bluetooth neįjungtas arba neautorizuotas",
|
||||
"请确保手机蓝牙已开启,并授权App使用蓝牙权限。": "Įsitikinkite, kad Bluetooth įjungtas ir programai suteiktos teisės.",
|
||||
"检查手机设置中的蓝牙权限,确保已授权给App。": "Patikrinkite Bluetooth leidimus telefono nustatymuose ir įsitikinkite, kad programa turi leidimą.",
|
||||
"未重置锁": "Užraktas neatstatytas",
|
||||
"请先将锁重置为出厂状态,重置方法详见上一步指引。": "Pirmiausia atstatykite užraktą į gamyklinius nustatymus, žr. ankstesnį žingsnį.",
|
||||
"找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。": "Suraskite užrakto atstatymo mygtuką, laikykite nuspaudę, kol išgirsite signalą arba pamatysite mirksinčią lemputę.",
|
||||
"锁电量过低": "Užrakto baterija per silpna",
|
||||
"锁电量过低可能导致无法正常连接和添加。": "Silpna baterija gali sukelti prisijungimo ir pridėjimo problemų.",
|
||||
"请更换电池后重试。": "Pakeiskite bateriją ir bandykite dar kartą.",
|
||||
"距离过远": "Per toli",
|
||||
"请确保手机与锁的距离在有效范围内。": "Įsitikinkite, kad telefonas yra užrakto veikimo zonoje.",
|
||||
"将手机靠近锁,距离保持在1米以内。": "Priartinkite telefoną prie užrakto, atstumas iki 1 metro.",
|
||||
"锁已被其他用户添加": "Užraktas jau pridėtas kito vartotojo",
|
||||
"如果锁已被其他用户添加,需要先解除绑定。": "Jei užraktas jau pridėtas, pirmiausia atjunkite.",
|
||||
"请联系锁的管理员解除绑定,或使用管理员权限重置锁。": "Susisiekite su užrakto administratoriumi dėl atjungimo arba naudokite administratoriaus teises atstatymui.",
|
||||
"使用小程序": "Naudoti mini programėlę",
|
||||
"如果App无法正常添加锁,可以尝试使用小程序版本。": "Jei programa neveikia, pabandykite mini programėlę.",
|
||||
"打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。": "Atidarykite WeChat, ieškokite '星星锁Lite' ir bandykite pridėti užraktą per mini programėlę.",
|
||||
"尝试升级固件": "Pabandykite atnaujinti programinę įrangą",
|
||||
"升级说明": "Atnaujinimo instrukcijos",
|
||||
"如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:": "Jei niekas nepadeda, pabandykite atnaujinti užrakto programinę įrangą. Prieš atnaujinimą įsitikinkite:",
|
||||
"升级注意事项": "• Užrakto baterija pakankamai įkrauta\n• Turite tinkamą programinės įrangos failą\n• Neatjunkite per atnaujinimą",
|
||||
"找不到锁?点此查看。": "Nerandate užrakto? Spustelėkite čia.",
|
||||
"常见问题": "Dažnos problemos",
|
||||
"固件升级": "Firmware atnaujinimas",
|
||||
"固件升级描述": "Spustelėkite mygtuką \"Grįžti į prijungimo nustatymus\" dešinėje apačioje, kad grįžtumėte į prijungimo nustatymų puslapį, kad atnaujintumėte programinę įrangą.",
|
||||
"邮箱地址必须包含@符号": "El. pašto adresas turi būti '@'.",
|
||||
"手机号只能包含数字": "Telefonas gali būti tik skaičiai",
|
||||
"重置方法请查阅设备说明书": "Peržiūrėkite įrenginio naudojimo instrukciją",
|
||||
"我已重置,继续添加": "Atsistatyta, tęskite",
|
||||
"添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。": "Prieš pridėdami įrenginį, įsitikinkite, kad jis atstatytas į gamyklinius nustatymus. Po atstatymo visi vartotojų duomenys, įskaitant pirštų atspaudus, slaptažodžius ir korteles, bus ištrinti."
|
||||
"语音包设置": "Balso paketo nustatymai",
|
||||
"第三方平台设置": "Trečiosios šalies platformos nustatymai",
|
||||
"涂鸦智能": "Tuya Smart",
|
||||
"锁语音包设置": "Balso paketo nustatymų užrakinimas",
|
||||
"(中国台湾)": "(中国台湾)",
|
||||
"男声": "vyriškas balsas",
|
||||
"女声": "Moteriškas balsas",
|
||||
"您的图像和视频数据仅保留": "Vaizdo ir vaizdo įrašų duomenys saugomi tik",
|
||||
"后图像和视频数据将会失效,开通": "Po to vaizdo ir vaizdo duomenys bus negaliojantys ir suaktyvinti",
|
||||
"云存会员": "Debesies saugyklos narystė",
|
||||
"服务,图像视频信息随心存!": "Aptarnavimas, vaizdas ir video informacija yra jūsų širdis!",
|
||||
"图像": "vaizdas",
|
||||
"视频": "Video",
|
||||
"当前国家不支持手机验证码注册,请使用邮箱进行注册": "Šiuo metu šalis nepalaiko mobiliojo telefono patvirtinimo kodo registracijos, registruodamiesi naudokite savo el. pašto adresą",
|
||||
"注:": "Pastaba:",
|
||||
"必需在开始时间24小时内使用一次,否则将失效": "Turi būti naudojamas vieną kartą per 24 valandas nuo pradžios laiko, kitaip jis baigs galioti",
|
||||
"这是单次密码,只能使用一次": "Tai vienkartinis slaptažodis, kurį galima naudoti tik vieną kartą",
|
||||
"您好": "Sveiki",
|
||||
"您的开门密码是": "Jūsų durų atidarymo kodas yra",
|
||||
"开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标": "Norėdami atrakinti, pirmiausia suaktyvinkite užrakto klaviatūrą, tada įveskite slaptažodį ir baikite #. Klavišas # yra klaviatūros apatiniame dešiniajame kampe ir gali būti kita piktograma"
|
||||
}
|
||||
@ -1065,7 +1065,7 @@
|
||||
"波兰语": "Polski",
|
||||
"斯洛伐克语": "Slovenčina",
|
||||
"捷克语": "Čeština",
|
||||
"希腊语": "Ελληνικά",
|
||||
"希腊语": "ελληνικά",
|
||||
"希伯来语": "עברית",
|
||||
"塞尔维亚语": "Српски",
|
||||
"土耳其语": "Türkçe",
|
||||
@ -1078,8 +1078,11 @@
|
||||
"印度尼西亚语": "Bahasa Indonesia",
|
||||
"芬兰语": "Suomi",
|
||||
"丹麦语": "Dansk",
|
||||
"印地语": "हिंदीName",
|
||||
"印地语": "हिंदी",
|
||||
"乌尔都语": "اوردو",
|
||||
"亚美尼亚语": "Հայերեն",
|
||||
"格鲁吉亚语": "ქართული",
|
||||
"巴西葡萄牙语": "Português do Brasil",
|
||||
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
|
||||
"繁体中文(中国香港)": "繁體中文(中國香港)",
|
||||
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Selepas menetapkan semula, urat metacarpal kunci akan dipadamkan. Adakah anda pasti anda mahu menetapkan semula?",
|
||||
@ -1152,40 +1155,24 @@
|
||||
"3.安装Google Home APP,点击左上角的加号按钮": "3. Pasang apl Google Home dan klik butang tambah di penjuru kiri sebelah atas",
|
||||
"暂无最新记录": "Pada masa ini tiada rekod terkini tersedia",
|
||||
"请将手机切换至2.4G WiFi进行手动连接": "Sila tukar telefon anda kepada WiFi 2.4G untuk sambungan manual",
|
||||
"设备重置": "Tetapkan semula peranti",
|
||||
"请确认设备已重置": "Sila sahkan peranti telah ditetapkan semula",
|
||||
"添加设备前,请确保设备已重置为出厂状态。": "Pastikan peranti telah ditetapkan semula ke tetapan kilang sebelum menambah.",
|
||||
"设备已重置": "Peranti telah ditetapkan semula",
|
||||
"加不了锁常见问题": "Masalah biasa menambah kunci",
|
||||
"蓝牙未开启或未授权": "Bluetooth tidak diaktifkan atau tidak dibenarkan",
|
||||
"请确保手机蓝牙已开启,并授权App使用蓝牙权限。": "Pastikan Bluetooth diaktifkan dan aplikasi mempunyai kebenaran.",
|
||||
"检查手机设置中的蓝牙权限,确保已授权给App。": "Semak kebenaran Bluetooth dalam tetapan telefon dan pastikan aplikasi dibenarkan.",
|
||||
"未重置锁": "Kunci belum ditetapkan semula",
|
||||
"请先将锁重置为出厂状态,重置方法详见上一步指引。": "Tetapkan semula kunci ke tetapan kilang dahulu, rujuk langkah sebelumnya.",
|
||||
"找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。": "Cari butang tetapan semula pada kunci, tekan lama sehingga anda mendengar bunyi atau lampu berkelip.",
|
||||
"锁电量过低": "Bateri kunci terlalu rendah",
|
||||
"锁电量过低可能导致无法正常连接和添加。": "Bateri rendah boleh menyebabkan masalah sambungan dan penambahan.",
|
||||
"请更换电池后重试。": "Tukar bateri dan cuba semula.",
|
||||
"距离过远": "Terlalu jauh",
|
||||
"请确保手机与锁的距离在有效范围内。": "Pastikan telefon berada dalam jarak kunci.",
|
||||
"将手机靠近锁,距离保持在1米以内。": "Dekatkan telefon ke kunci, jarak dalam 1 meter.",
|
||||
"锁已被其他用户添加": "Kunci telah ditambah oleh pengguna lain",
|
||||
"如果锁已被其他用户添加,需要先解除绑定。": "Jika kunci telah ditambah, nyahpautkan dahulu.",
|
||||
"请联系锁的管理员解除绑定,或使用管理员权限重置锁。": "Hubungi pentadbir kunci untuk nyahpaut atau gunakan hak pentadbir untuk tetapkan semula.",
|
||||
"使用小程序": "Guna mini-aplikasi",
|
||||
"如果App无法正常添加锁,可以尝试使用小程序版本。": "Jika aplikasi tidak berfungsi, cuba mini-aplikasi.",
|
||||
"打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。": "Buka WeChat, cari '星星锁Lite' dan cuba tambah kunci melalui mini-aplikasi.",
|
||||
"尝试升级固件": "Cuba kemas kini firmware",
|
||||
"升级说明": "Arahan kemas kini",
|
||||
"如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:": "Jika tiada yang berjaya, cuba kemas kini firmware kunci. Sebelum kemas kini, pastikan:",
|
||||
"升级注意事项": "• Bateri kunci mencukupi\n• Fail firmware yang betul\n• Jangan putuskan sambungan semasa kemas kini",
|
||||
"找不到锁?点此查看。": "Tidak jumpa kunci? Klik di sini.",
|
||||
"常见问题": "Masalah biasa",
|
||||
"固件升级": "Kemas kini firmware",
|
||||
"固件升级描述": "Klik butang \"Kembali ke tetapan peranti\" di sudut bawah kanan untuk kembali ke halaman tetapan peranti untuk kemas kini firmware.",
|
||||
"邮箱地址必须包含@符号": "Alamat e-mel mesti mengandungi '@'.",
|
||||
"手机号只能包含数字": "Nombor telefon hanya boleh mengandungi nombor",
|
||||
"重置方法请查阅设备说明书": "Baca panduan penggunaan peranti",
|
||||
"我已重置,继续添加": "Saya telah menetapkan semula, teruskan",
|
||||
"添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。": "Sebelum menambah peranti, pastikan peranti telah ditetapkan semula ke tetapan kilang. Semua data pengguna, termasuk cap jari, kata laluan dan kad, akan dipadamkan selepas menetapkan semula."
|
||||
"语音包设置": "Balso paketo nustatymai",
|
||||
"第三方平台设置": "Trečiosios šalies platformos nustatymai",
|
||||
"涂鸦智能": "Tuya Smart",
|
||||
"锁语音包设置": "Balso paketo nustatymų užrakinimas",
|
||||
"(中国台湾)": "(中国台湾)",
|
||||
"男声": "vyriškas balsas",
|
||||
"女声": "Moteriškas balsas",
|
||||
"您的图像和视频数据仅保留": "Data imej dan video anda hanya dikekalkan",
|
||||
"后图像和视频数据将会失效,开通": "Selepas itu, data imej dan video akan menjadi tidak sah dan diaktifkan",
|
||||
"云存会员": "Keahlian Storan Awan",
|
||||
"服务,图像视频信息随心存!": "Maklumat perkhidmatan, imej dan video adalah di hati anda!",
|
||||
"图像": "Imej",
|
||||
"视频": "Video",
|
||||
"当前国家不支持手机验证码注册,请使用邮箱进行注册": "Pada masa ini, negara ini tidak menyokong pendaftaran kod pengesahan telefon bimbit, sila gunakan alamat e-mel anda untuk mendaftar",
|
||||
"注:": "Nota:",
|
||||
"必需在开始时间24小时内使用一次,否则将失效": "Mesti digunakan sekali dalam masa 24 jam dari masa mula, jika tidak ia akan luput",
|
||||
"这是单次密码,只能使用一次": "Ini ialah kata laluan sekali guna dan hanya boleh digunakan sekali",
|
||||
"您好": "Helo",
|
||||
"您的开门密码是": "Kod akses pintu anda ialah",
|
||||
"开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标": "Untuk membuka kunci, aktifkan papan kekunci kunci terlebih dahulu, kemudian masukkan kata laluan dan tamatkan dengan #. Kekunci # berada di sudut kanan bawah papan kekunci dan mungkin mempunyai ikon lain"
|
||||
}
|
||||
@ -1065,7 +1065,7 @@
|
||||
"波兰语": "Polski",
|
||||
"斯洛伐克语": "Slovenčina",
|
||||
"捷克语": "Čeština",
|
||||
"希腊语": "Ελληνικά",
|
||||
"希腊语": "ελληνικά",
|
||||
"希伯来语": "עברית",
|
||||
"塞尔维亚语": "Српски",
|
||||
"土耳其语": "Türkçe",
|
||||
@ -1078,8 +1078,11 @@
|
||||
"印度尼西亚语": "Bahasa Indonesia",
|
||||
"芬兰语": "Suomi",
|
||||
"丹麦语": "Dansk",
|
||||
"印地语": "हिंदीName",
|
||||
"印地语": "हिंदी",
|
||||
"乌尔都语": "اوردو",
|
||||
"亚美尼亚语": "Հայերեն",
|
||||
"格鲁吉亚语": "ქართული",
|
||||
"巴西葡萄牙语": "Português do Brasil",
|
||||
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
|
||||
"繁体中文(中国香港)": "繁體中文(中國香港)",
|
||||
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Na reset worden de middenhandsbeenaders van het slot verwijderd. Weet je zeker dat je wilt resetten?",
|
||||
@ -1152,40 +1155,24 @@
|
||||
"3.安装Google Home APP,点击左上角的加号按钮": "3. Installeer de google home-app en klik op de plus-knop in de linkerbovenhoek",
|
||||
"暂无最新记录": "Er zijn momenteel geen recente gegevens beschikbaar",
|
||||
"请将手机切换至2.4G WiFi进行手动连接": "Stel uw telefoon in op 2. 4g WiFi bij handmatige verbinding",
|
||||
"设备重置": "Apparaat resetten",
|
||||
"请确认设备已重置": "Bevestig dat het apparaat is gereset",
|
||||
"添加设备前,请确保设备已重置为出厂状态。": "Zorg ervoor dat het apparaat is teruggezet naar de fabrieksinstellingen voordat u het toevoegt.",
|
||||
"设备已重置": "Apparaat is gereset",
|
||||
"加不了锁常见问题": "Veelvoorkomende problemen bij het toevoegen van slot",
|
||||
"蓝牙未开启或未授权": "Bluetooth is niet ingeschakeld of niet geautoriseerd",
|
||||
"请确保手机蓝牙已开启,并授权App使用蓝牙权限。": "Zorg ervoor dat Bluetooth is ingeschakeld en de app toestemming heeft.",
|
||||
"检查手机设置中的蓝牙权限,确保已授权给App。": "Controleer de Bluetooth-machtigingen in de telefooninstellingen en geef de app toestemming.",
|
||||
"未重置锁": "Slot niet gereset",
|
||||
"请先将锁重置为出厂状态,重置方法详见上一步指引。": "Reset het slot eerst naar de fabrieksinstellingen, zie de vorige stap voor instructies.",
|
||||
"找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。": "Zoek de resetknop op het slot, houd deze ingedrukt tot u een pieptoon hoort of het lampje knippert.",
|
||||
"锁电量过低": "Batterij van het slot is te laag",
|
||||
"锁电量过低可能导致无法正常连接和添加。": "Een lage batterij kan problemen veroorzaken bij het verbinden en toevoegen.",
|
||||
"请更换电池后重试。": "Vervang de batterij en probeer het opnieuw.",
|
||||
"距离过远": "Te ver weg",
|
||||
"请确保手机与锁的距离在有效范围内。": "Zorg ervoor dat de telefoon binnen bereik van het slot is.",
|
||||
"将手机靠近锁,距离保持在1米以内。": "Houd de telefoon binnen 1 meter van het slot.",
|
||||
"锁已被其他用户添加": "Slot is al door een andere gebruiker toegevoegd",
|
||||
"如果锁已被其他用户添加,需要先解除绑定。": "Als het slot al is toegevoegd, moet u het eerst ontkoppelen.",
|
||||
"请联系锁的管理员解除绑定,或使用管理员权限重置锁。": "Neem contact op met de beheerder van het slot om te ontkoppelen of gebruik beheerdersrechten om te resetten.",
|
||||
"使用小程序": "Gebruik mini-app",
|
||||
"如果App无法正常添加锁,可以尝试使用小程序版本。": "Als de app niet werkt, probeer dan de mini-app.",
|
||||
"打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。": "Open WeChat, zoek naar '星星锁Lite' en probeer het slot toe te voegen via de mini-app.",
|
||||
"尝试升级固件": "Probeer firmware bij te werken",
|
||||
"升级说明": "Update-instructies",
|
||||
"如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:": "Als niets werkt, probeer dan de firmware van het slot bij te werken. Zorg ervoor dat:",
|
||||
"升级注意事项": "• De batterij van het slot is voldoende opgeladen\n• U heeft het juiste firmwarebestand\n• Verbreek de verbinding niet tijdens het bijwerken",
|
||||
"找不到锁?点此查看。": "Slot niet gevonden? Klik hier.",
|
||||
"常见问题": "Veelgestelde vragen",
|
||||
"固件升级": "Firmware bijwerken",
|
||||
"固件升级描述": "Klik op de knop \"Terug naar apparaatinstellingen\" in de rechteronderhoek om terug te keren naar de apparaatinstellingenpagina voor het bijwerken van de firmware.",
|
||||
"邮箱地址必须包含@符号": "E-mailadres moet '@' bevatten.",
|
||||
"手机号只能包含数字": "Telefoonnummer kan alleen cijfers bevatten",
|
||||
"重置方法请查阅设备说明书": "Lees de gebruiksaanwijzing van het apparaat",
|
||||
"我已重置,继续添加": "Ik heb het reset, ga door",
|
||||
"添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。": "Voordat u het apparaat toevoegt, zorg ervoor dat het is teruggezet naar de fabrieksinstellingen. Na het resetten worden alle gebruikersgegevens, inclusief vingerafdrukken, wachtwoorden en kaarten, verwijderd."
|
||||
"语音包设置": "Voice Pack-instellingen",
|
||||
"第三方平台设置": "Instellingen voor platforms van derden",
|
||||
"涂鸦智能": "Tuya Smart",
|
||||
"锁语音包设置": "Instellingen voor spraakpakket vergrendelen",
|
||||
"(中国台湾)": "(中国台湾)",
|
||||
"男声": "mannelijke stem",
|
||||
"女声": "Vrouwelijke stem",
|
||||
"您的图像和视频数据仅保留": "Uw beeld- en videogegevens worden alleen bewaard",
|
||||
"后图像和视频数据将会失效,开通": "Daarna zijn de afbeeldings- en videogegevens ongeldig en geactiveerd",
|
||||
"云存会员": "Lidmaatschap voor cloudopslag",
|
||||
"服务,图像视频信息随心存!": "Service-, beeld- en video-informatie staan bij u centraal!",
|
||||
"图像": "beeld",
|
||||
"视频": "Video",
|
||||
"当前国家不支持手机验证码注册,请使用邮箱进行注册": "Momenteel ondersteunt het land de registratie van de verificatiecode voor mobiele telefoons niet, gebruik uw e-mailadres om u te registreren",
|
||||
"注:": "Opmerking:",
|
||||
"必需在开始时间24小时内使用一次,否则将失效": "Moet één keer worden gebruikt binnen 24 uur na de starttijd, anders verloopt het",
|
||||
"这是单次密码,只能使用一次": "Dit is een eenmalig wachtwoord en kan maar één keer worden gebruikt",
|
||||
"您好": "Hallo",
|
||||
"您的开门密码是": "Uw deurtoegangscode is",
|
||||
"开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标": "Om te ontgrendelen, activeert u eerst het toetsenbord van het slot, voert u vervolgens het wachtwoord in en eindigt u met #. De #-toets bevindt zich in de rechterbenedenhoek van het toetsenbord en kan een ander pictogram hebben"
|
||||
}
|
||||
@ -1065,7 +1065,7 @@
|
||||
"波兰语": "Polski",
|
||||
"斯洛伐克语": "Slovenčina",
|
||||
"捷克语": "Čeština",
|
||||
"希腊语": "Ελληνικά",
|
||||
"希腊语": "ελληνικά",
|
||||
"希伯来语": "עברית",
|
||||
"塞尔维亚语": "Српски",
|
||||
"土耳其语": "Türkçe",
|
||||
@ -1078,8 +1078,11 @@
|
||||
"印度尼西亚语": "Bahasa Indonesia",
|
||||
"芬兰语": "Suomi",
|
||||
"丹麦语": "Dansk",
|
||||
"印地语": "हिंदीName",
|
||||
"印地语": "हिंदी",
|
||||
"乌尔都语": "اوردو",
|
||||
"亚美尼亚语": "Հայերեն",
|
||||
"格鲁吉亚语": "ქართული",
|
||||
"巴西葡萄牙语": "Português do Brasil",
|
||||
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
|
||||
"繁体中文(中国香港)": "繁體中文(中國香港)",
|
||||
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Po zresetowaniu żyły śródręcza zamka zostaną usunięte. Czy na pewno chcesz zresetować?",
|
||||
@ -1152,40 +1155,24 @@
|
||||
"3.安装Google Home APP,点击左上角的加号按钮": "3. Zainstaluj aplikację Google Home i kliknij przycisk plusa w lewym górnym rogu",
|
||||
"暂无最新记录": "Obecnie nie ma dostępnych najnowszych rekordów",
|
||||
"请将手机切换至2.4G WiFi进行手动连接": "Przełącz telefon na 2.4G Wi-Fi, aby uzyskać ręczne połączenie",
|
||||
"设备重置": "Resetuj urządzenie",
|
||||
"请确认设备已重置": "Proszę potwierdzić, że urządzenie zostało zresetowane",
|
||||
"添加设备前,请确保设备已重置为出厂状态。": "Przed dodaniem urządzenia upewnij się, że zostało zresetowane do ustawień fabrycznych.",
|
||||
"设备已重置": "Urządzenie zostało zresetowane",
|
||||
"加不了锁常见问题": "Częste problemy z dodaniem zamka",
|
||||
"蓝牙未开启或未授权": "Bluetooth nie jest włączony lub nieautoryzowany",
|
||||
"请确保手机蓝牙已开启,并授权App使用蓝牙权限。": "Upewnij się, że Bluetooth jest włączony i aplikacja ma odpowiednie uprawnienia.",
|
||||
"检查手机设置中的蓝牙权限,确保已授权给App。": "Sprawdź uprawnienia Bluetooth w ustawieniach telefonu i upewnij się, że aplikacja jest autoryzowana.",
|
||||
"未重置锁": "Zamek nie został zresetowany",
|
||||
"请先将锁重置为出厂状态,重置方法详见上一步指引。": "Najpierw zresetuj zamek do ustawień fabrycznych, szczegóły w poprzednim kroku.",
|
||||
"找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。": "Znajdź przycisk resetowania na zamku, przytrzymaj aż usłyszysz sygnał dźwiękowy lub zobaczysz migającą diodę.",
|
||||
"锁电量过低": "Niski poziom baterii zamka",
|
||||
"锁电量过低可能导致无法正常连接和添加。": "Niski poziom baterii może powodować problemy z połączeniem i dodaniem.",
|
||||
"请更换电池后重试。": "Wymień baterię i spróbuj ponownie.",
|
||||
"距离过远": "Za daleko",
|
||||
"请确保手机与锁的距离在有效范围内。": "Upewnij się, że telefon jest w zasięgu zamka.",
|
||||
"将手机靠近锁,距离保持在1米以内。": "Zbliż telefon do zamka, odległość do 1 metra.",
|
||||
"锁已被其他用户添加": "Zamek został już dodany przez innego użytkownika",
|
||||
"如果锁已被其他用户添加,需要先解除绑定。": "Jeśli zamek został już dodany, najpierw go odłącz.",
|
||||
"请联系锁的管理员解除绑定,或使用管理员权限重置锁。": "Skontaktuj się z administratorem zamka w celu odłączenia lub użyj uprawnień administratora do resetowania.",
|
||||
"使用小程序": "Użyj miniaplikacji",
|
||||
"如果App无法正常添加锁,可以尝试使用小程序版本。": "Jeśli aplikacja nie działa, spróbuj miniaplikacji.",
|
||||
"打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。": "Otwórz WeChat, wyszukaj '星星锁Lite' i spróbuj dodać zamek przez miniaplikację.",
|
||||
"尝试升级固件": "Spróbuj zaktualizować firmware",
|
||||
"升级说明": "Instrukcje aktualizacji",
|
||||
"如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:": "Jeśli nic nie pomaga, spróbuj zaktualizować firmware zamka. Przed aktualizacją upewnij się:",
|
||||
"升级注意事项": "• Bateria zamka jest naładowana\n• Masz poprawny plik firmware\n• Nie rozłączaj podczas aktualizacji",
|
||||
"找不到锁?点此查看。": "Nie możesz znaleźć zamka? Kliknij tutaj.",
|
||||
"常见问题": "Często zadawane pytania",
|
||||
"固件升级": "Aktualizacja firmware",
|
||||
"固件升级描述": "Kliknij przycisk \"Powrót do ustawień urządzenia\" w prawym dolnym rogu, aby powrócić do strony ustawień urządzenia dla aktualizacji firmware.",
|
||||
"邮箱地址必须包含@符号": "Adres e-mail musi zawierać symbol '@'.",
|
||||
"手机号只能包含数字": "Numer telefonu może zawierać tylko cyfry",
|
||||
"重置方法请查阅设备说明书": "Przeczytaj instrukcję obsługi urządzenia",
|
||||
"我已重置,继续添加": "Zresetowałem, kontynuuję",
|
||||
"添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。": "Przed dodaniem urządzenia upewnij się, że zostało zresetowane do ustawień fabrycznych. Po zresetowaniu wszystkie dane użytkownika, w tym odciski palców, hasła i karty, zostaną usunięte."
|
||||
"语音包设置": "Ustawienia pakietu głosowego",
|
||||
"第三方平台设置": "Ustawienia platformy stron trzecich",
|
||||
"涂鸦智能": "Tuya Smart",
|
||||
"锁语音包设置": "Ustawienia blokowania pakietu głosowego",
|
||||
"(中国台湾)": "(中国台湾)",
|
||||
"男声": "Mężczyzna",
|
||||
"女声": "Głos kobiecy",
|
||||
"您的图像和视频数据仅保留": "Dane obrazu i filmu są przechowywane tylko",
|
||||
"后图像和视频数据将会失效,开通": "Po tym czasie dane obrazu i wideo zostaną nieważne i aktywowane",
|
||||
"云存会员": "Członkostwo w usłudze Cloud Storage",
|
||||
"服务,图像视频信息随心存!": "Informacje o serwisie, obrazie i wideo są w Twoim sercu!",
|
||||
"图像": "obraz",
|
||||
"视频": "Wideo",
|
||||
"当前国家不支持手机验证码注册,请使用邮箱进行注册": "Obecnie kraj nie obsługuje rejestracji kodem weryfikacyjnym telefonu komórkowego, użyj swojego adresu e-mail, aby się zarejestrować",
|
||||
"注:": "Uwaga:",
|
||||
"必需在开始时间24小时内使用一次,否则将失效": "Należy użyć raz w ciągu 24 godzin od czasu rozpoczęcia, w przeciwnym razie wygaśnie",
|
||||
"这是单次密码,只能使用一次": "To hasło jednorazowe, którego można użyć tylko raz",
|
||||
"您好": "Cześć",
|
||||
"您的开门密码是": "Twój kod dostępu do drzwi to",
|
||||
"开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标": "Aby odblokować, najpierw aktywuj klawiaturę zamka, następnie wprowadź hasło i zakończ #. Klawisz # znajduje się w prawym dolnym rogu klawiatury i może mieć inną ikonę"
|
||||
}
|
||||
@ -1065,7 +1065,7 @@
|
||||
"波兰语": "Polski",
|
||||
"斯洛伐克语": "Slovenčina",
|
||||
"捷克语": "Čeština",
|
||||
"希腊语": "Ελληνικά",
|
||||
"希腊语": "ελληνικά",
|
||||
"希伯来语": "עברית",
|
||||
"塞尔维亚语": "Српски",
|
||||
"土耳其语": "Türkçe",
|
||||
@ -1078,8 +1078,11 @@
|
||||
"印度尼西亚语": "Bahasa Indonesia",
|
||||
"芬兰语": "Suomi",
|
||||
"丹麦语": "Dansk",
|
||||
"印地语": "हिंदीName",
|
||||
"印地语": "हिंदी",
|
||||
"乌尔都语": "اوردو",
|
||||
"亚美尼亚语": "Հայերեն",
|
||||
"格鲁吉亚语": "ქართული",
|
||||
"巴西葡萄牙语": "Português do Brasil",
|
||||
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
|
||||
"繁体中文(中国香港)": "繁體中文(中國香港)",
|
||||
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Após a reinicialização, as veias do metacarpo do bloqueio serão excluídas. Tens a certeza que queres reiniciar?",
|
||||
@ -1152,40 +1155,24 @@
|
||||
"3.安装Google Home APP,点击左上角的加号按钮": "3. Instale o aplicativo Google Home e clique no botão de adição no canto superior esquerdo",
|
||||
"暂无最新记录": "Atualmente não há registros mais recentes disponíveis",
|
||||
"请将手机切换至2.4G WiFi进行手动连接": "Mude seu telefone para WiFi 2.4G para conexão manual",
|
||||
"设备重置": "Redefinir dispositivo",
|
||||
"请确认设备已重置": "Por favor, confirme que o dispositivo foi redefinido",
|
||||
"添加设备前,请确保设备已重置为出厂状态。": "Antes de adicionar o dispositivo, certifique-se de que ele foi redefinido para as configurações de fábrica.",
|
||||
"设备已重置": "Dispositivo redefinido",
|
||||
"加不了锁常见问题": "Problemas comuns ao adicionar fechadura",
|
||||
"蓝牙未开启或未授权": "Bluetooth não está ativado ou autorizado",
|
||||
"请确保手机蓝牙已开启,并授权App使用蓝牙权限。": "Certifique-se de que o Bluetooth está ativado e o aplicativo tem permissão.",
|
||||
"检查手机设置中的蓝牙权限,确保已授权给App。": "Verifique as permissões de Bluetooth nas configurações do telefone e autorize o aplicativo.",
|
||||
"未重置锁": "Fechadura não redefinida",
|
||||
"请先将锁重置为出厂状态,重置方法详见上一步指引。": "Redefina a fechadura para as configurações de fábrica, veja o passo anterior.",
|
||||
"找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。": "Encontre o botão de redefinição na fechadura, mantenha pressionado até ouvir um bip ou ver a luz piscar.",
|
||||
"锁电量过低": "Bateria da fechadura fraca",
|
||||
"锁电量过低可能导致无法正常连接和添加。": "Bateria fraca pode causar problemas de conexão e adição.",
|
||||
"请更换电池后重试。": "Troque a bateria e tente novamente.",
|
||||
"距离过远": "Distância muito grande",
|
||||
"请确保手机与锁的距离在有效范围内。": "Certifique-se de que o telefone está dentro do alcance da fechadura.",
|
||||
"将手机靠近锁,距离保持在1米以内。": "Aproxime o telefone da fechadura, mantenha a distância dentro de 1 metro.",
|
||||
"锁已被其他用户添加": "Fechadura já adicionada por outro usuário",
|
||||
"如果锁已被其他用户添加,需要先解除绑定。": "Se a fechadura já foi adicionada, desvincule primeiro.",
|
||||
"请联系锁的管理员解除绑定,或使用管理员权限重置锁。": "Entre em contato com o administrador para desvincular ou use permissões de administrador para redefinir.",
|
||||
"使用小程序": "Usar miniaplicativo",
|
||||
"如果App无法正常添加锁,可以尝试使用小程序版本。": "Se o aplicativo não funcionar, tente o miniaplicativo.",
|
||||
"打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。": "Abra o WeChat, procure por '星星锁Lite' e tente adicionar a fechadura pelo miniaplicativo.",
|
||||
"尝试升级固件": "Tentar atualizar firmware",
|
||||
"升级说明": "Instruções de atualização",
|
||||
"如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:": "Se nada funcionar, tente atualizar o firmware da fechadura. Antes de atualizar, certifique-se:",
|
||||
"升级注意事项": "• Bateria da fechadura está carregada\n• Arquivo de firmware correto\n• Não desconecte durante a atualização",
|
||||
"找不到锁?点此查看。": "Não encontrou a fechadura? Clique aqui.",
|
||||
"常见问题": "Problemas comuns",
|
||||
"固件升级": "Atualização de firmware",
|
||||
"固件升级描述": "Clique no botão \"Voltar para configuração do dispositivo\" no canto inferior direito para voltar à página de configuração do dispositivo para atualizar o firmware.",
|
||||
"邮箱地址必须包含@符号": "O endereço de e-mail deve conter o símbolo '@'.",
|
||||
"手机号只能包含数字": "O número de telefone pode conter apenas números",
|
||||
"重置方法请查阅设备说明书": "Consulte o manual do dispositivo",
|
||||
"我已重置,继续添加": "Reiniciado, continuar",
|
||||
"添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。": "Antes de adicionar o dispositivo, certifique-se de que ele foi redefinido para as configurações de fábrica. Após a redefinição, todos os dados do usuário, incluindo impressões digitais, senhas e cartões, serão apagados."
|
||||
"语音包设置": "Configurações do pacote de voz",
|
||||
"第三方平台设置": "Configurações de plataformas de terceiros",
|
||||
"涂鸦智能": "Tuya Smart",
|
||||
"锁语音包设置": "Configurações do pacote de voz bloqueada",
|
||||
"(中国台湾)": "(中国台湾)",
|
||||
"男声": "Voz masculina",
|
||||
"女声": "voz feminina",
|
||||
"您的图像和视频数据仅保留": "Seus dados de imagem e vídeo são retidos apenas",
|
||||
"后图像和视频数据将会失效,开通": "Depois disso, os dados de imagem e vídeo serão inválidos e ativados",
|
||||
"云存会员": "Associação de armazenamento em nuvem",
|
||||
"服务,图像视频信息随心存!": "Informações de serviço, imagem e vídeo estão no seu coração!",
|
||||
"图像": "imagem",
|
||||
"视频": "Vídeo",
|
||||
"当前国家不支持手机验证码注册,请使用邮箱进行注册": "Atualmente, o país não suporta o registro do código de verificação do telefone celular, use seu endereço de e-mail para se registrar",
|
||||
"注:": "Nota:",
|
||||
"必需在开始时间24小时内使用一次,否则将失效": "Deve ser usado uma vez dentro de 24 horas após o horário de início, caso contrário expirará",
|
||||
"这是单次密码,只能使用一次": "Esta é uma senha de uso único e só pode ser usada uma vez",
|
||||
"您好": "Olá",
|
||||
"您的开门密码是": "Seu código de acesso à porta é",
|
||||
"开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标": "Para desbloquear, primeiro ative o teclado do cadeado e depois digite a senha terminando com #. A tecla # está no canto inferior direito do teclado e pode ter um ícone diferente"
|
||||
}
|
||||
1183
lan/lan_pt_br.json
Normal file
@ -104,7 +104,7 @@
|
||||
"门磁": "Senzor uși",
|
||||
"自动闭锁": "Blocare automată",
|
||||
"锁声音": "Blochează sunetul.",
|
||||
"防撬报警": "Alertă TamperName",
|
||||
"防撬报警": "Alertă Tamper",
|
||||
"重置键": "Butonul resitează",
|
||||
"锁时间": "Blochează ceasul",
|
||||
"诊断": "Diagnostică",
|
||||
@ -185,7 +185,7 @@
|
||||
"删除账号": "Șterge cont",
|
||||
"个人信息": "Informații cont",
|
||||
"头像": "Avatar",
|
||||
"昵称": "NickNameName",
|
||||
"昵称": "NickName",
|
||||
"请输入昵称": "Introduceți porecla dumneavoastră",
|
||||
"修改昵称": "Redenumește:",
|
||||
"修改账号": "Editează cont",
|
||||
@ -210,7 +210,7 @@
|
||||
"WiFi名称": "Nume WiFi",
|
||||
"网络MAC": "Rețea MAC",
|
||||
"网关升级": "Actualizare GatewayComment",
|
||||
"网关连接的锁": "Blocare (blocare) conectat la această GatewayName",
|
||||
"网关连接的锁": "Blocare (blocare) conectat la această Gateway",
|
||||
"信号强": "Puternică",
|
||||
"选择网关类型": "Alegeți tipul de port",
|
||||
"添加网关": "Adaugă poartă",
|
||||
@ -316,7 +316,7 @@
|
||||
"开门器": "Deschizător de uși",
|
||||
"面容开锁": "Fața deblochează",
|
||||
"开门方向设置": "Set de direcție de deschidere",
|
||||
"电机功率设置": "Setare MotorPowerName",
|
||||
"电机功率设置": "Setare MotorPower",
|
||||
"开锁时是否需联网": "Dacă Internetul este necesar la deblocarea",
|
||||
"选择要加入分组的锁": "Selectați blocarea S pentru a adăuga la acest grupă",
|
||||
"锁数量": "Blochează numărător",
|
||||
@ -593,7 +593,7 @@
|
||||
"开门通知": "Notificare de deschidere.",
|
||||
"N天未开门": "N zile fără deschiderea ușii",
|
||||
"门未关好": "Uşa nu e închisă.",
|
||||
"防拆报警": "Alarmă TamperName",
|
||||
"防拆报警": "Alarmă Tamper",
|
||||
"低电量提醒": "Baterie scăzută",
|
||||
"胁迫开门": "Deschiderea ușilor forțate",
|
||||
"有人按门铃": "Cineva sună la uşă.",
|
||||
@ -633,12 +633,12 @@
|
||||
"云存": "Stocarea norilor",
|
||||
"本地": "Această localitate:",
|
||||
"3天滚动储存": "3 zile de păstrare rulare",
|
||||
"去升级": "Actualizare acumName",
|
||||
"去升级": "Actualizare acum",
|
||||
"下载列表": "Lista descărcării",
|
||||
"已下载": "Descărcat",
|
||||
"全部视频": "Toate videoclipurile",
|
||||
"已为本设备免费提供3大滚动视频储存服务": "Pentru acest dispozitiv au fost furnizate trei servicii de stocare video de derulare gratuite",
|
||||
"视频播放": "Redare videoName",
|
||||
"视频播放": "Redare video",
|
||||
"全选": "Toate.",
|
||||
"请选择要删除的视频": "Alegeți videoclipul pe care doriți să o ștergeți.",
|
||||
"请选择要下载的视频": "Vă rugăm să selectați videoclipul pe care doriți să le descărcați",
|
||||
@ -691,7 +691,7 @@
|
||||
"请输入身份证号和真实姓名": "Introduceți numărul și numele real.",
|
||||
"点击返回设备配对": "Atinge înapoi la împerecherea dispozitivului",
|
||||
"无法连接?尝试升级": "Nu se poate conecta?",
|
||||
"固件升级提示": "Prompt de upgrade FirmwareName",
|
||||
"固件升级提示": "Prompt de upgrade Firmware",
|
||||
"请先获取固件文件到手机本地,再选择升级": "Vă rugăm să obțineți fișierul firmware la telefonul local întâi, și apoi selectați Upgrade.",
|
||||
"固件升级中": "Firware-ul este în actualizare",
|
||||
"取消升级": "Anulează actualizarea",
|
||||
@ -710,7 +710,7 @@
|
||||
"传输期间请勿离开当前页面": "Nu părăsi pagina curentă în timpul transferului",
|
||||
"机型": "Modele",
|
||||
"硬件版本": "Versiune hardware",
|
||||
"固件版本": "Versiunea FirmwareName",
|
||||
"固件版本": "Versiunea Firmware",
|
||||
"手动升级": "Upgrade manuală",
|
||||
"设备连接中...": "Conectare dispozitivă...",
|
||||
"未避免异常情况,请在门打开时升级": "Excepţii inevitabile, vă rugăm să upgradezi când uşa este deschisă.",
|
||||
@ -834,7 +834,7 @@
|
||||
"微信": "WeChat",
|
||||
"朋友圈": "Momente",
|
||||
"QQ": "QQ",
|
||||
"QQ空间": "QQZoneName",
|
||||
"QQ空间": "QQZone",
|
||||
"微博": "Weibo.",
|
||||
"FaceBook": "FacebookComment",
|
||||
"链接": "Legătură",
|
||||
@ -1065,7 +1065,7 @@
|
||||
"波兰语": "Polski",
|
||||
"斯洛伐克语": "Slovenčina",
|
||||
"捷克语": "Čeština",
|
||||
"希腊语": "Ελληνικά",
|
||||
"希腊语": "ελληνικά",
|
||||
"希伯来语": "עברית",
|
||||
"塞尔维亚语": "Српски",
|
||||
"土耳其语": "Türkçe",
|
||||
@ -1078,8 +1078,11 @@
|
||||
"印度尼西亚语": "Bahasa Indonesia",
|
||||
"芬兰语": "Suomi",
|
||||
"丹麦语": "Dansk",
|
||||
"印地语": "हिंदीName",
|
||||
"印地语": "हिंदी",
|
||||
"乌尔都语": "اوردو",
|
||||
"亚美尼亚语": "Հայերեն",
|
||||
"格鲁吉亚语": "ქართული",
|
||||
"巴西葡萄牙语": "Português do Brasil",
|
||||
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
|
||||
"繁体中文(中国香港)": "繁體中文(中國香港)",
|
||||
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "După resetare, venele metacarpale ale încuietorii vor fi şterse. Sigur doriți să resetați?",
|
||||
@ -1097,7 +1100,7 @@
|
||||
"支持的国家值": "Statele Unite ale Americii, Canada, Marea Britanie, Australia, India, Germania, Franța, Italia, Spania, Japonia",
|
||||
"操作流程": "Procesul operațional",
|
||||
"操作流程值": "1 Adăugați o blocare și o poartă cu Smart blocare APP\n\n2 Activați funcția de deblocare la distanță a încuietorii din APP (acesta funcție este oprită implicit). Dacă nu aveți această opțiune, blocarea nu suportă Alexa\n\n3 Adăugați abilități pentru Alexa și autorizați-le cu Smart blocare contul și parola APP. După ce autorizaţia va avea succes, puteţi descoperi dispozitivele sub cont\n\n4 Localizaţi blocarea în aplicaţia Alexa, activaţi funcţia de deblocare vocală, şi setaţi parola limbii\n\n5 Încuietoarea poate fi operată prin Alexa",
|
||||
"Google Home": "Acasă GoogleName",
|
||||
"Google Home": "Acasă Google",
|
||||
"Action name": "Nume acțiune",
|
||||
"ScienerSmart": "ScienerSmart",
|
||||
"支持的语言": "Limbi suportate",
|
||||
@ -1152,40 +1155,24 @@
|
||||
"3.安装Google Home APP,点击左上角的加号按钮": "3. Instalați aplicația Google Home și faceți clic pe butonul plus din colțul din stânga sus",
|
||||
"暂无最新记录": "În prezent nu există cele mai recente înregistrări disponibile",
|
||||
"请将手机切换至2.4G WiFi进行手动连接": "Vă rugăm să comutați telefonul la WiFi 2.4G pentru conectarea manuală",
|
||||
"设备重置": "Resetare dispozitiv",
|
||||
"请确认设备已重置": "Vă rugăm să confirmați că dispozitivul a fost resetat",
|
||||
"添加设备前,请确保设备已重置为出厂状态。": "Înainte de a adăuga dispozitivul, asigurați-vă că a fost resetat la setările din fabrică.",
|
||||
"设备已重置": "Dispozitivul a fost resetat",
|
||||
"加不了锁常见问题": "Probleme frecvente la adăugarea încuietorii",
|
||||
"蓝牙未开启或未授权": "Bluetooth nu este activat sau nu este autorizat",
|
||||
"请确保手机蓝牙已开启,并授权App使用蓝牙权限。": "Asigurați-vă că Bluetooth este activat și aplicația are permisiunea necesară.",
|
||||
"检查手机设置中的蓝牙权限,确保已授权给App。": "Verificați permisiunile Bluetooth în setările telefonului și asigurați-vă că aplicația este autorizată.",
|
||||
"未重置锁": "Încuietoarea nu a fost resetată",
|
||||
"请先将锁重置为出厂状态,重置方法详见上一步指引。": "Resetați mai întâi încuietoarea la setările din fabrică, consultați instrucțiunile anterioare.",
|
||||
"找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。": "Găsiți butonul de resetare pe încuietoare, țineți apăsat până auziți un sunet sau vedeți indicatorul luminos.",
|
||||
"锁电量过低": "Baterie încuietoare descărcată",
|
||||
"锁电量过低可能导致无法正常连接和添加。": "Bateria descărcată poate cauza probleme la conectare și adăugare.",
|
||||
"请更换电池后重试。": "Schimbați bateria și încercați din nou.",
|
||||
"距离过远": "Prea departe",
|
||||
"请确保手机与锁的距离在有效范围内。": "Asigurați-vă că telefonul este în raza de acțiune a încuietorii.",
|
||||
"将手机靠近锁,距离保持在1米以内。": "Apropiați telefonul de încuietoare, la o distanță de maxim 1 metru.",
|
||||
"锁已被其他用户添加": "Încuietoarea a fost deja adăugată de alt utilizator",
|
||||
"如果锁已被其他用户添加,需要先解除绑定。": "Dacă încuietoarea a fost adăugată, trebuie mai întâi deconectată.",
|
||||
"请联系锁的管理员解除绑定,或使用管理员权限重置锁。": "Contactați administratorul pentru deconectare sau folosiți drepturile de administrator pentru resetare.",
|
||||
"使用小程序": "Utilizați mini-aplicația",
|
||||
"如果App无法正常添加锁,可以尝试使用小程序版本。": "Dacă aplicația nu funcționează, încercați mini-aplicația.",
|
||||
"打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。": "Deschideți WeChat, căutați '星星锁Lite' și încercați să adăugați încuietoarea prin mini-aplicație.",
|
||||
"尝试升级固件": "Încercați să actualizați firmware-ul",
|
||||
"升级说明": "Instrucțiuni de actualizare",
|
||||
"如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:": "Dacă nimic nu funcționează, încercați să actualizați firmware-ul. Înainte de actualizare, asigurați-vă:",
|
||||
"升级注意事项": "• Bateria încuietorii este suficient de încărcată\n• Aveți fișierul corect de firmware\n• Nu deconectați în timpul actualizării",
|
||||
"找不到锁?点此查看。": "Nu găsiți încuietoarea? Faceți clic aici.",
|
||||
"常见问题": "Probleme frecvente",
|
||||
"固件升级": "Actualizare firmware",
|
||||
"固件升级描述": "Faceți clic pe butonul \"Întoarceți-vă la setările dispozitivului\" în colțul din dreapta jos pentru a reveni la pagina de setări a dispozitivului pentru actualizarea firmware.",
|
||||
"邮箱地址必须包含@符号": "Adresa de e-mail trebuie să conțină simbolul '@'.",
|
||||
"手机号只能包含数字": "Numărul de telefon poate conține doar cifre",
|
||||
"重置方法请查阅设备说明书": "Consultați instrucțiunile de utilizare a dispozitivului",
|
||||
"我已重置,继续添加": "Am resetat, continuă",
|
||||
"添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。": "Înainte de adăugarea dispozitivului, asigurați-vă că a fost resetat la setările din fabrică. După resetare, toate datele utilizatorilor, inclusiv amprentele de mână, parolele și cardurile, vor fi șterse."
|
||||
"语音包设置": "Setări pachet vocal",
|
||||
"第三方平台设置": "Setarea platformei terțelor părți",
|
||||
"涂鸦智能": "Tuya Smart",
|
||||
"锁语音包设置": "Configurarea pachetului vocal de blocare",
|
||||
"(中国台湾)": "(中国台湾)",
|
||||
"男声": "vocea bărbatului",
|
||||
"女声": "Voce feminină",
|
||||
"您的图像和视频数据仅保留": "Datele tale de imagine și video sunt păstrate numai",
|
||||
"后图像和视频数据将会失效,开通": "După aceea, datele de imagine și video vor fi invalide și activate",
|
||||
"云存会员": "Abonament de stocare în cloud",
|
||||
"服务,图像视频信息随心存!": "Serviciile, imaginile și informațiile video sunt în centrul dumneavoastră!",
|
||||
"图像": "imagine",
|
||||
"视频": "Video",
|
||||
"当前国家不支持手机验证码注册,请使用邮箱进行注册": "În prezent, țara nu acceptă înregistrarea codului de verificare a telefonului mobil, vă rugăm să utilizați adresa de e-mail pentru a vă înregistra",
|
||||
"注:": "Notă:",
|
||||
"必需在开始时间24小时内使用一次,否则将失效": "Trebuie folosit o dată în termen de 24 de ore de la ora de început, altfel va expira",
|
||||
"这是单次密码,只能使用一次": "Aceasta este o parolă unică și poate fi folosită doar o dată",
|
||||
"您好": "Bună",
|
||||
"您的开门密码是": "Codul dvs. de acces la ușă este",
|
||||
"开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标": "Pentru a debloca, activați mai întâi tastatura lacătului, apoi introduceți parola și terminați cu #. Tasta # se află în colțul din dreapta jos al tastaturii și poate avea o altă pictogramă"
|
||||
}
|
||||
@ -1065,7 +1065,7 @@
|
||||
"波兰语": "Polski",
|
||||
"斯洛伐克语": "Slovenčina",
|
||||
"捷克语": "Čeština",
|
||||
"希腊语": "Ελληνικά",
|
||||
"希腊语": "ελληνικά",
|
||||
"希伯来语": "עברית",
|
||||
"塞尔维亚语": "Српски",
|
||||
"土耳其语": "Türkçe",
|
||||
@ -1078,8 +1078,11 @@
|
||||
"印度尼西亚语": "Bahasa Indonesia",
|
||||
"芬兰语": "Suomi",
|
||||
"丹麦语": "Dansk",
|
||||
"印地语": "हिंदीName",
|
||||
"印地语": "हिंदी",
|
||||
"乌尔都语": "اوردو",
|
||||
"亚美尼亚语": "Հայերեն",
|
||||
"格鲁吉亚语": "ქართული",
|
||||
"巴西葡萄牙语": "Português do Brasil",
|
||||
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
|
||||
"繁体中文(中国香港)": "繁體中文(中國香港)",
|
||||
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "После сброса пястные вены замка будут удалены. Вы уверены, что хотите сбросить?",
|
||||
@ -1156,40 +1159,24 @@
|
||||
"已选": "Выбранные",
|
||||
"是否要远程开锁": "Нужно ли удалённо открывать замок",
|
||||
"请将手机切换至2.4G WiFi进行手动连接": "Пожалуйста, переключите телефон на 2.4G WiFi для ручного подключения",
|
||||
"设备重置": "Сброс устройства",
|
||||
"请确认设备已重置": "Пожалуйста, подтвердите, что устройство было сброшено",
|
||||
"添加设备前,请确保设备已重置为出厂状态。": "Перед добавлением устройства убедитесь, что оно сброшено к заводским настройкам.",
|
||||
"设备已重置": "Устройство сброшено",
|
||||
"加不了锁常见问题": "Частые проблемы при добавлении замка",
|
||||
"蓝牙未开启或未授权": "Bluetooth не включен или не авторизован",
|
||||
"请确保手机蓝牙已开启,并授权App使用蓝牙权限。": "Убедитесь, что Bluetooth включен и приложению предоставлены все разрешения.",
|
||||
"检查手机设置中的蓝牙权限,确保已授权给App。": "Проверьте разрешения Bluetooth в настройках телефона и убедитесь, что приложение авторизовано.",
|
||||
"未重置锁": "Замок не сброшен",
|
||||
"请先将锁重置为出厂状态,重置方法详见上一步指引。": "Сначала сбросьте замок к заводским настройкам, подробности смотрите в предыдущем шаге.",
|
||||
"找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。": "Найдите кнопку сброса на замке, удерживайте до звукового сигнала или мигания индикатора.",
|
||||
"锁电量过低": "Низкий заряд батареи замка",
|
||||
"锁电量过低可能导致无法正常连接和添加。": "Низкий заряд может привести к проблемам с подключением и добавлением.",
|
||||
"请更换电池后重试。": "Поменяйте батарею и попробуйте снова.",
|
||||
"距离过远": "Слишком далеко",
|
||||
"请确保手机与锁的距离在有效范围内。": "Убедитесь, что телефон находится в зоне действия замка.",
|
||||
"将手机靠近锁,距离保持在1米以内。": "Поднесите телефон к замку, расстояние не более 1 метра.",
|
||||
"锁已被其他用户添加": "Замок уже добавлен другим пользователем",
|
||||
"如果锁已被其他用户添加,需要先解除绑定。": "Если замок уже добавлен, сначала отвяжите его.",
|
||||
"请联系锁的管理员解除绑定,或使用管理员权限重置锁。": "Свяжитесь с администратором замка для отвязки или используйте права администратора для сброса.",
|
||||
"使用小程序": "Использовать мини-программу",
|
||||
"如果App无法正常添加锁,可以尝试使用小程序版本。": "Если приложение не работает, попробуйте мини-программу.",
|
||||
"打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。": "Откройте WeChat, найдите '星星锁Lite' и попробуйте добавить замок через мини-программу.",
|
||||
"尝试升级固件": "Попробовать обновить прошивку",
|
||||
"升级说明": "Инструкция по обновлению",
|
||||
"如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:": "Если ничего не помогло, попробуйте обновить прошивку замка. Перед обновлением убедитесь:",
|
||||
"升级注意事项": "• Заряд батареи замка достаточен\n• Получен правильный файл прошивки\n• Не отключайте соединение во время обновления",
|
||||
"找不到锁?点此查看。": "Не можете найти замок? Нажмите здесь.",
|
||||
"常见问题": "Часто задаваемые вопросы",
|
||||
"固件升级": "Обновление прошивки",
|
||||
"固件升级描述": "Нажмите на кнопку \"Вернуться к настройке устройства\" в нижнем правом углу, чтобы вернуться на страницу настройки устройства для обновления прошивки.",
|
||||
"邮箱地址必须包含@符号": "Адреса электронной почты должна содержать символ '@'.",
|
||||
"手机号只能包含数字": "Номер телефона может содержать только цифры",
|
||||
"重置方法请查阅设备说明书": "Прочитайте инструкцию по использованию устройства",
|
||||
"我已重置,继续添加": "Я сбросил, продолжаю",
|
||||
"添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。": "Перед добавлением устройства убедитесь, что оно сброшено к заводским настройкам. После сброса все данные пользователей, включая отпечатки пальцев, пароли и карты, будут удалены."
|
||||
"语音包设置": "Настройка голосового пакета",
|
||||
"第三方平台设置": "Настройка платформы третьей стороны",
|
||||
"涂鸦智能": "Tuya Smart",
|
||||
"锁语音包设置": "Запустить настройки голосового пакета",
|
||||
"(中国台湾)": "(中国台湾)",
|
||||
"男声": "Мужской голос",
|
||||
"女声": "Женские голоса",
|
||||
"您的图像和视频数据仅保留": "Ваши изображения и видеоданные сохраняются только",
|
||||
"后图像和视频数据将会失效,开通": "После этого изображение и видео данные будут недействительными и активированы",
|
||||
"云存会员": "Членство в облачном хранилище",
|
||||
"服务,图像视频信息随心存!": "Сервисная, имиджевая и видеоинформация в Вашем сердце!",
|
||||
"图像": "образ",
|
||||
"视频": "Видео",
|
||||
"当前国家不支持手机验证码注册,请使用邮箱进行注册": "В настоящее время страна не поддерживает регистрацию кода верификации мобильного телефона, пожалуйста, используйте свой адрес электронной почты для регистрации",
|
||||
"注:": "Примечание:",
|
||||
"必需在开始时间24小时内使用一次,否则将失效": "Должен быть использован один раз в течение 24 часов с момента начала, иначе он истечет",
|
||||
"这是单次密码,只能使用一次": "Это одноразовый пароль, который можно использовать только один раз",
|
||||
"您好": "Привет!",
|
||||
"您的开门密码是": "Ваш код доступа к двери",
|
||||
"开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标": "Чтобы разблокировать, сначала активируйте клавиатуру замка, затем введите пароль и закончите #. Клавиша # находится в правом нижнем углу клавиатуры и может иметь другой значок"
|
||||
}
|
||||
@ -1065,7 +1065,7 @@
|
||||
"波兰语": "Polski",
|
||||
"斯洛伐克语": "Slovenčina",
|
||||
"捷克语": "Čeština",
|
||||
"希腊语": "Ελληνικά",
|
||||
"希腊语": "ελληνικά",
|
||||
"希伯来语": "עברית",
|
||||
"塞尔维亚语": "Српски",
|
||||
"土耳其语": "Türkçe",
|
||||
@ -1078,8 +1078,11 @@
|
||||
"印度尼西亚语": "Bahasa Indonesia",
|
||||
"芬兰语": "Suomi",
|
||||
"丹麦语": "Dansk",
|
||||
"印地语": "हिंदीName",
|
||||
"印地语": "हिंदी",
|
||||
"乌尔都语": "اوردو",
|
||||
"亚美尼亚语": "Հայերեն",
|
||||
"格鲁吉亚语": "ქართული",
|
||||
"巴西葡萄牙语": "Português do Brasil",
|
||||
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
|
||||
"繁体中文(中国香港)": "繁體中文(中國香港)",
|
||||
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Po resetovaní budú metakarpálne žily zámku vymazané. Ste si istí, že chcete obnoviť?",
|
||||
@ -1152,40 +1155,24 @@
|
||||
"3.安装Google Home APP,点击左上角的加号按钮": "3. Nainštalujte si aplikáciu Google Home a kliknite na tlačidlo plus v ľavom hornom rohu",
|
||||
"暂无最新记录": "Momentálne nie sú k dispozícii žiadne najnovšie záznamy",
|
||||
"请将手机切换至2.4G WiFi进行手动连接": "Pre manuálne pripojenie prepnite telefón na 2.4G WiFi",
|
||||
"设备重置": "Reset zariadenia",
|
||||
"请确认设备已重置": "Potvrďte, že zariadenie bolo resetované",
|
||||
"添加设备前,请确保设备已重置为出厂状态。": "Pred pridaním zariadenia sa uistite, že bolo resetované na výrobné nastavenia.",
|
||||
"设备已重置": "Zariadenie bolo resetované",
|
||||
"加不了锁常见问题": "Časté problémy s pridaním zámku",
|
||||
"蓝牙未开启或未授权": "Bluetooth nie je zapnutý alebo nie je povolený",
|
||||
"请确保手机蓝牙已开启,并授权App使用蓝牙权限。": "Uistite sa, že je Bluetooth zapnutý a aplikácia má povolenie na jeho používanie.",
|
||||
"检查手机设置中的蓝牙权限,确保已授权给App。": "Skontrolujte povolenia Bluetooth v nastaveniach telefónu a uistite sa, že sú povolené pre aplikáciu.",
|
||||
"未重置锁": "Zámok nebol resetovaný",
|
||||
"请先将锁重置为出厂状态,重置方法详见上一步指引。": "Najskôr resetujte zámok na výrobné nastavenia, podrobnosti nájdete v predchádzajúcom kroku.",
|
||||
"找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。": "Nájdite tlačidlo reset na zámku, podržte ho, kým nepočujete pípnutie alebo neuvidíte blikajúcu kontrolku.",
|
||||
"锁电量过低": "Nízka úroveň batérie zámku",
|
||||
"锁电量过低可能导致无法正常连接和添加。": "Nízka batéria môže spôsobiť problémy s pripojením a pridaním.",
|
||||
"请更换电池后重试。": "Vymeniť batériu a skúsiť znova.",
|
||||
"距离过远": "Príliš ďaleko",
|
||||
"请确保手机与锁的距离在有效范围内。": "Uistite sa, že telefón je v dosahu zámku.",
|
||||
"将手机靠近锁,距离保持在1米以内。": "Priblížte telefón k zámku, vzdialenosť do 1 metra.",
|
||||
"锁已被其他用户添加": "Zámok už bol pridaný iným používateľom",
|
||||
"如果锁已被其他用户添加,需要先解除绑定。": "Ak bol zámok pridaný iným používateľom, najskôr ho odpojte.",
|
||||
"请联系锁的管理员解除绑定,或使用管理员权限重置锁。": "Kontaktujte správcu zámku na odpojenie alebo použite administrátorské oprávnenia na resetovanie.",
|
||||
"使用小程序": "Použiť miniaplikáciu",
|
||||
"如果App无法正常添加锁,可以尝试使用小程序版本。": "Ak aplikácia nefunguje, skúste použiť miniaplikáciu.",
|
||||
"打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。": "Otvorte WeChat, vyhľadajte '星星锁Lite' a skúste pridať zámok cez miniaplikáciu.",
|
||||
"尝试升级固件": "Skúsiť aktualizovať firmvér",
|
||||
"升级说明": "Pokyny na aktualizáciu",
|
||||
"如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:": "Ak nič nepomohlo, skúste aktualizovať firmvér zámku. Pred aktualizáciou sa uistite:",
|
||||
"升级注意事项": "• Batéria zámku je dostatočne nabitá\n• Máte správny súbor firmvéru\n• Počas aktualizácie neprerušujte pripojenie",
|
||||
"找不到锁?点此查看。": "Nemôžete nájsť zámok? Kliknite sem.",
|
||||
"常见问题": "Časté problémy",
|
||||
"固件升级": "Aktualizácia firmvéru",
|
||||
"固件升级描述": "Kliknite na tlačidlo \"Návrat na nastavenie zariadenia\" v dolnom pravom rohu, aby ste sa vrátili na stránku nastavenia zariadenia pre aktualizáciu firmvéru.",
|
||||
"邮箱地址必须包含@符号": "E-mailová adresa musí obsahovať '@' symbol.",
|
||||
"手机号只能包含数字": "Telefónny číslo môže obsahovať iba číslice",
|
||||
"重置方法请查阅设备说明书": "Prečítajte si návod k používaniu zariadenia",
|
||||
"我已重置,继续添加": "Resetoval som, pokračujem",
|
||||
"添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。": "Pred pridaním zariadenia sa uistite, že bolo resetované na výrobné nastavenia. Po resetovaní budú všetky údaje o používateľoch, vrátane odtlačkov prstov, heslá a kariet vymazané."
|
||||
"语音包设置": "Nastavenie hlasového balíka",
|
||||
"第三方平台设置": "Nastavenie platformy tretích strán",
|
||||
"涂鸦智能": "Tuya Smart",
|
||||
"锁语音包设置": "Zamknutie nastavení hlasového balíka",
|
||||
"(中国台湾)": "(中国台湾)",
|
||||
"男声": "mužský hlas",
|
||||
"女声": "Ženský hlas",
|
||||
"您的图像和视频数据仅保留": "Vaše údaje o obrázkoch a videách sa zachovajú iba",
|
||||
"后图像和视频数据将会失效,开通": "Potom budú údaje o obrázku a videu neplatné a aktivované",
|
||||
"云存会员": "Členstvo v cloudovom úložisku",
|
||||
"服务,图像视频信息随心存!": "Informácie o službách, obrázkoch a videách sú vo vašom srdci!",
|
||||
"图像": "obraz",
|
||||
"视频": "Video",
|
||||
"当前国家不支持手机验证码注册,请使用邮箱进行注册": "V súčasnosti krajina nepodporuje registráciu overovacieho kódu mobilného telefónu, na registráciu použite svoju e-mailovú adresu",
|
||||
"注:": "Poznámka:",
|
||||
"必需在开始时间24小时内使用一次,否则将失效": "Musí byť použitý raz do 24 hodín od počiatočného času, inak vyprší",
|
||||
"这是单次密码,只能使用一次": "Toto je jednorazové heslo, ktoré možno použiť iba raz",
|
||||
"您好": "Ahoj",
|
||||
"您的开门密码是": "Váš prístupový kód do dverí je",
|
||||
"开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标": "Ak chcete odomknúť, najprv aktivujte klávesnicu zámku, potom zadajte heslo a ukončite #. Kľúč # je v pravom dolnom rohu klávesnice a môže mať inú ikonu"
|
||||
}
|
||||
@ -1065,7 +1065,7 @@
|
||||
"波兰语": "Polski",
|
||||
"斯洛伐克语": "Slovenčina",
|
||||
"捷克语": "Čeština",
|
||||
"希腊语": "Ελληνικά",
|
||||
"希腊语": "ελληνικά",
|
||||
"希伯来语": "עברית",
|
||||
"塞尔维亚语": "Српски",
|
||||
"土耳其语": "Türkçe",
|
||||
@ -1078,8 +1078,11 @@
|
||||
"印度尼西亚语": "Bahasa Indonesia",
|
||||
"芬兰语": "Suomi",
|
||||
"丹麦语": "Dansk",
|
||||
"印地语": "हिंदीName",
|
||||
"印地语": "हिंदी",
|
||||
"乌尔都语": "اوردو",
|
||||
"亚美尼亚语": "Հայերեն",
|
||||
"格鲁吉亚语": "ქართული",
|
||||
"巴西葡萄牙语": "Português do Brasil",
|
||||
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
|
||||
"繁体中文(中国香港)": "繁體中文(中國香港)",
|
||||
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Након ресетовања, метакарпалне вене браве ће бити избрисане. Да ли сте сигурни да желите да ресетујете?",
|
||||
@ -1152,40 +1155,24 @@
|
||||
"3.安装Google Home APP,点击左上角的加号按钮": "3 . Инсталирајте апликацију Гоогле Хоме и кликните на дугме плус у горњем левом углу",
|
||||
"暂无最新记录": "Тренутно нема доступних најновијих података",
|
||||
"请将手机切换至2.4G WiFi进行手动连接": "Пребаците телефон на КСНУМКСГ ВиФи за ручно повезивање",
|
||||
"设备重置": "Ресетовање уређаја",
|
||||
"请确认设备已重置": "Молимо потврдите да је уређај ресетован",
|
||||
"添加设备前,请确保设备已重置为出厂状态。": "Пре додавања уређаја, уверите се да је ресетован на фабричка подешавања.",
|
||||
"设备已重置": "Уређај је ресетован",
|
||||
"加不了锁常见问题": "Честа питања о додавању браве",
|
||||
"蓝牙未开启或未授权": "Блутут није укључен или није одобрен",
|
||||
"请确保手机蓝牙已开启,并授权App使用蓝牙权限。": "Уверите се да је Блутут укључен и да је апликацији дата дозвола за коришћење Блутута.",
|
||||
"检查手机设置中的蓝牙权限,确保已授权给App。": "Проверите дозволе за Блутут у подешавањима телефона и уверите се да је апликацији одобрено.",
|
||||
"未重置锁": "Брава није ресетована",
|
||||
"请先将锁重置为出厂状态,重置方法详见上一步指引。": "Прво ресетујте браву на фабричка подешавања, погледајте претходни корак за упутство.",
|
||||
"找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。": "Пронађите дугме за ресетовање на брава, држите дугме док не чујете 'бип' или не видите да лампица трепери.",
|
||||
"锁电量过低": "Батерија уређаја је ниска",
|
||||
"锁电量过低可能导致无法正常连接和添加。": "Низак ниво батерије може довести до немогућности повезивања или додавања уређаја.",
|
||||
"请更换电池后重试。": "Замените батерију и покушајте поново.",
|
||||
"距离过远": "Предалеко",
|
||||
"请确保手机与锁的距离在有效范围内。": "Уверите се да је телефон у оквиру важеће удаљености од уређаја.",
|
||||
"将手机靠近锁,距离保持在1米以内。": "Приближите телефон уређају, држите растојање мање од 1 метра.",
|
||||
"锁已被其他用户添加": "Брава је већ додата од стране другог корисника",
|
||||
"如果锁已被其他用户添加,需要先解除绑定。": "Ако је браву већ додао други корисник, прво је потребно раскинути везу.",
|
||||
"请联系锁的管理员解除绑定,或使用管理员权限重置锁。": "Контактирајте администратора браве да раскине везу или користите администраторска права за ресетовање браве.",
|
||||
"使用小程序": "Користите мини-програм",
|
||||
"如果App无法正常添加锁,可以尝试使用小程序版本。": "Ако апликација не може да дода браву, покушајте са мини-програмом.",
|
||||
"打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。": "Отворите WeChat, потражите '星星锁Lite' мини-програм и покушајте да додате браву преко њега.",
|
||||
"尝试升级固件": "Покушајте да ажурирате фирмвер",
|
||||
"升级说明": "Упутство за ажурирање",
|
||||
"如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:": "Ако горе наведене методе не реше проблем, покушајте да ажурирате фирмвер браве. Пре ажурирања проверите:",
|
||||
"升级注意事项": "• Батерија је довољно пуна\n• Преузета је исправна фирмвер датотека\n• Не прекидајте везу током ажурирања",
|
||||
"找不到锁?点此查看。": "Не можете да пронађете браву? Кликните овде за више информација.",
|
||||
"常见问题": "Честа питања",
|
||||
"固件升级": "Ажурирање фирмвера",
|
||||
"固件升级描述": "Кликните на дугме \"Повратак на подешавање уређаја\" у доњем десном углу да бисте се вратили на страницу подешавања уређаја за ажурирање фирмвера.",
|
||||
"邮箱地址必须包含@符号": "Адреса е-поште мора да садржи '@' симбол.",
|
||||
"手机号只能包含数字": "Телефонски број може да садржи само цифре",
|
||||
"重置方法请查阅设备说明书": "Проверите упутство за уређај",
|
||||
"我已重置,继续添加": "Ресетовао сам, настављам",
|
||||
"添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。": "Пре додавања уређаја, уверите се да је ресетован на фабричка подешавања. После ресетовања, све корисничке податке, укључујући отисци прстију, лозинке и картице, биће избрисани."
|
||||
"语音包设置": "Подешавања гласовног пакета",
|
||||
"第三方平台设置": "Подешавања платформе трећих страна",
|
||||
"涂鸦智能": "Tuya Smart",
|
||||
"锁语音包设置": "Закључајте подешавања говорног пакета",
|
||||
"(中国台湾)": "(中国台湾)",
|
||||
"男声": "мушки глас",
|
||||
"女声": "женски глас",
|
||||
"您的图像和视频数据仅保留": "Ваши подаци о слици и видео записима се задржавају само",
|
||||
"后图像和视频数据将会失效,开通": "Након тога, сликовни и видео подаци ће бити неважећи и активирани",
|
||||
"云存会员": "Чланство у облаку за складиштење",
|
||||
"服务,图像视频信息随心存!": "Сервис , слике и видео информације су у вашем срцу!",
|
||||
"图像": "Слика",
|
||||
"视频": "Пријава",
|
||||
"当前国家不支持手机验证码注册,请使用邮箱进行注册": "Тренутно , земља не подржава регистрацију кода за верификацију мобилног телефона, молимо вас да користите своју адресу е-поште за регистрацију",
|
||||
"注:": "Напомена:",
|
||||
"必需在开始时间24小时内使用一次,否则将失效": "Мора се користити једном у року од 24 сата од времена почетка, иначе истиче",
|
||||
"这是单次密码,只能使用一次": "Ово је једнократна лозинка која се може користити само једном",
|
||||
"您好": "Здраво",
|
||||
"您的开门密码是": "Ваш код за отварање врата је",
|
||||
"开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标": "Да бисте откључали, прво активирајте тастатуру браве, затим унесите лозинку и завршите са #. Тастер # се налази у доњем десном углу тастатуре и може имати другу икону"
|
||||
}
|
||||
@ -116,7 +116,7 @@
|
||||
"微信二维码": "Lås upp QR- koden",
|
||||
"拥有电子钥匙的人,通过微信扫一扫这个二维码,即可开门。每把锁的二维码都不相同,你可以将其打印出来贴在对应的锁旁边": "Personer med elektroniska nycklar kan öppna dörren genom att skanna denna QR-kod genom WeChat. QR-koden för varje lås är olika. Du kan skriva ut den och klistra in den bredvid motsvarande lås",
|
||||
"锁编号": "Låsnummer",
|
||||
"电量": "BatteriName",
|
||||
"电量": "Batteri",
|
||||
"锁分组": "Lås grupp",
|
||||
"选择分组": "Välj grupp",
|
||||
"创建新分组": "Skapa en grupp",
|
||||
@ -146,8 +146,8 @@
|
||||
"上传": "Uppladdning",
|
||||
"本操作将上传锁内数据到服务器,过程可能需要几分钟,请耐心等待": "Ladda upp data från lås till server.Det kan ta flera minuter.",
|
||||
"请选择要从哪把锁导入": "Välj ett lås att importera från",
|
||||
"有新版本": "Har ny versionName",
|
||||
"当前版本": "Nuvarande versionName",
|
||||
"有新版本": "Har ny version",
|
||||
"当前版本": "Nuvarande version",
|
||||
"升级": "Uppdatera",
|
||||
"空闲": "Lediga",
|
||||
"已入住": "Upptagen",
|
||||
@ -185,7 +185,7 @@
|
||||
"删除账号": "Ta bort konto",
|
||||
"个人信息": "Kontoinformation",
|
||||
"头像": "Avatar",
|
||||
"昵称": "NickNameName",
|
||||
"昵称": "NickName",
|
||||
"请输入昵称": "Ange ditt smeknamn",
|
||||
"修改昵称": "Byt namn",
|
||||
"修改账号": "Redigera konto",
|
||||
@ -316,7 +316,7 @@
|
||||
"开门器": "Dörröppnare",
|
||||
"面容开锁": "Ansiktet upplåsas",
|
||||
"开门方向设置": "Öppningsriktning",
|
||||
"电机功率设置": "Inställning av motorpowerName",
|
||||
"电机功率设置": "Inställning av motorpower",
|
||||
"开锁时是否需联网": "Om Internet krävs vid upplåsning",
|
||||
"选择要加入分组的锁": "Välj Lås för att lägga till i gruppen.",
|
||||
"锁数量": "Lås antal",
|
||||
@ -450,7 +450,7 @@
|
||||
"是否发送电子钥匙给未注册账号": "Vill du skicka en ekey till ett nytt konto",
|
||||
"取消": "Avbryt",
|
||||
"标记成功": "Markera framgångsrikt",
|
||||
"微信好友": "WeChat- vännerName",
|
||||
"微信好友": "WeChat- vänner",
|
||||
"短信": "SMS",
|
||||
"邮件": "E- post@ info: whatsthis",
|
||||
"更多": "Flere",
|
||||
@ -703,7 +703,7 @@
|
||||
"传输中": "Under transitering",
|
||||
"发送人": "Utfärdat av:",
|
||||
"发送时间": "Utfärdad tid",
|
||||
"钥匙详情": "EKEY- infoName",
|
||||
"钥匙详情": "EKEY- info",
|
||||
"姓名": "Namn",
|
||||
"发送": "Skicka",
|
||||
"请确认姓名全名和身份证号码是否正确": "Bekräfta att fullständigt namn och ID-nummer är korrekt.",
|
||||
@ -834,8 +834,8 @@
|
||||
"微信": "Wechat",
|
||||
"朋友圈": "Momentar",
|
||||
"QQ": "QQ",
|
||||
"QQ空间": "QQZoneName",
|
||||
"微博": "WeiboName",
|
||||
"QQ空间": "QQZone",
|
||||
"微博": "Weibo",
|
||||
"FaceBook": "Facebok",
|
||||
"链接": "Länk",
|
||||
"今天": "Idag",
|
||||
@ -1065,7 +1065,7 @@
|
||||
"波兰语": "Polski",
|
||||
"斯洛伐克语": "Slovenčina",
|
||||
"捷克语": "Čeština",
|
||||
"希腊语": "Ελληνικά",
|
||||
"希腊语": "ελληνικά",
|
||||
"希伯来语": "עברית",
|
||||
"塞尔维亚语": "Српски",
|
||||
"土耳其语": "Türkçe",
|
||||
@ -1078,8 +1078,11 @@
|
||||
"印度尼西亚语": "Bahasa Indonesia",
|
||||
"芬兰语": "Suomi",
|
||||
"丹麦语": "Dansk",
|
||||
"印地语": "हिंदीName",
|
||||
"印地语": "हिंदी",
|
||||
"乌尔都语": "اوردو",
|
||||
"亚美尼亚语": "Հայերեն",
|
||||
"格鲁吉亚语": "ქართული",
|
||||
"巴西葡萄牙语": "Português do Brasil",
|
||||
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
|
||||
"繁体中文(中国香港)": "繁體中文(中國香港)",
|
||||
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Efter återställd, de metakarpal venerna i låset tas bort. Är du säker på att du vill återställa?",
|
||||
@ -1097,7 +1100,7 @@
|
||||
"支持的国家值": "USA, Kanada, Storbritannien, Australien, Indien, Tyskland, Frankrike, Italien, Spanien, Japan.",
|
||||
"操作流程": "Driftsprocess",
|
||||
"操作流程值": "1 Lägg till ett lås och gateway med Smart Lås APP\n\n2 Aktivera fjärrlåsningsfunktionen för låset i APP (denna funktion är avstängd som standard). Om du inte har det här alternativet stöder inte låset Alexa\n\n3 Lägg till färdigheter till Alexa och godkänna dem med Smart lås APP konto och lösenord. När auktorisationen är framgångsrik kan du upptäcka enheter under kontot\n\n4 Hitta låset i Alexa-appen, slå på röst upplåsningsfunktionen och ställa in språklösenordet.\n\n5 Låset kan manövreras genom Alexa",
|
||||
"Google Home": "Google HomeName",
|
||||
"Google Home": "Google Home",
|
||||
"Action name": "Åtgärdsnamn",
|
||||
"ScienerSmart": "ScienerSmart",
|
||||
"支持的语言": "Stödda språk",
|
||||
@ -1152,40 +1155,24 @@
|
||||
"3.安装Google Home APP,点击左上角的加号按钮": "3. Installera Google Home-appen och klicka på plusknappen i det övre vänstra hörnet",
|
||||
"暂无最新记录": "Det finns för närvarande inga senaste poster tillgängliga",
|
||||
"请将手机切换至2.4G WiFi进行手动连接": "Byt din telefon till 2.4G WiFi för manuell anslutning",
|
||||
"设备重置": "Återställ enhet",
|
||||
"请确认设备已重置": "Vänligen bekräfta att enheten har återställts",
|
||||
"添加设备前,请确保设备已重置为出厂状态。": "Innan du lägger till enheten, se till att den har återställts till fabriksinställningarna.",
|
||||
"设备已重置": "Enheten har återställts",
|
||||
"加不了锁常见问题": "Vanliga problem vid tillägg av lås",
|
||||
"蓝牙未开启或未授权": "Bluetooth är inte aktiverat eller inte auktoriserat",
|
||||
"请确保手机蓝牙已开启,并授权App使用蓝牙权限。": "Se till att Bluetooth är aktiverat på din telefon och att appen har behörighet att använda Bluetooth.",
|
||||
"检查手机设置中的蓝牙权限,确保已授权给App。": "Kontrollera Bluetooth-behörigheter i telefonens inställningar och se till att appen har behörighet.",
|
||||
"未重置锁": "Låset har inte återställts",
|
||||
"请先将锁重置为出厂状态,重置方法详见上一步指引。": "Återställ låset till fabriksinställningarna först, se föregående steg för instruktioner.",
|
||||
"找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。": "Hitta återställningsknappen på låset, håll intryckt tills du hör ett 'pip' eller ser indikatorlampan blinka.",
|
||||
"锁电量过低": "Låsets batterinivå är låg",
|
||||
"锁电量过低可能导致无法正常连接和添加。": "Lågt batteri kan göra att låset inte kan anslutas eller läggas till korrekt.",
|
||||
"请更换电池后重试。": "Byt batteri och försök igen.",
|
||||
"距离过远": "För långt avstånd",
|
||||
"请确保手机与锁的距离在有效范围内。": "Se till att telefonen är inom giltigt avstånd från låset.",
|
||||
"将手机靠近锁,距离保持在1米以内。": "Håll telefonen nära låset, inom 1 meter.",
|
||||
"锁已被其他用户添加": "Låset har redan lagts till av en annan användare",
|
||||
"如果锁已被其他用户添加,需要先解除绑定。": "Om låset redan har lagts till av en annan användare, måste det först avbindas.",
|
||||
"请联系锁的管理员解除绑定,或使用管理员权限重置锁。": "Kontakta låsets administratör för att avbinda, eller återställ låset med administratörsbehörighet.",
|
||||
"使用小程序": "Använd Mini-program",
|
||||
"如果App无法正常添加锁,可以尝试使用小程序版本。": "Om appen inte kan lägga till låset, försök använda mini-programmet.",
|
||||
"打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。": "Öppna WeChat, sök efter '星星锁Lite' mini-programmet och försök lägga till låset där.",
|
||||
"尝试升级固件": "Försök att uppgradera firmware",
|
||||
"升级说明": "Uppgraderingsinstruktioner",
|
||||
"如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:": "Om ovanstående metoder inte löser problemet, försök att uppgradera låsets firmware. Kontrollera före uppgradering:",
|
||||
"升级注意事项": "• Tillräcklig batterinivå\n• Rätt firmwarefil har hämtats\n• Koppla inte från under uppgraderingen",
|
||||
"找不到锁?点此查看。": "Kan du inte hitta låset? Klicka här för att se.",
|
||||
"常见问题": "Vanliga problem",
|
||||
"固件升级": "Firmware uppgradering",
|
||||
"固件升级描述": "Klicka på knappen \"Gå tillbaka till enhetsanpassning\" i det nedre högra hörnet för att gå tillbaka till enhetsanpassningen för att uppgradera firmware.",
|
||||
"邮箱地址必须包含@符号": "E-postadressen måste innehålla '@'.",
|
||||
"手机号只能包含数字": "Telefonnumret kan endast innehålla siffror",
|
||||
"重置方法请查阅设备说明书": "Läs enhetsinstruktionen",
|
||||
"我已重置,继续添加": "Jag har återställt, fortsätt lägga till",
|
||||
"添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。": "Innan du lägger till enheten, se till att den har återställts till fabriksinställningarna. Efter återställningen kommer alla användaruppgifter, inklusive fingeravtryck, lösenord och kort, att rensas."
|
||||
"语音包设置": "Inställningar för röstpaket",
|
||||
"第三方平台设置": "Inställningar för tredjepartsplattformar",
|
||||
"涂鸦智能": "Tuya Smart",
|
||||
"锁语音包设置": "Lås inställningar för röstpaket",
|
||||
"(中国台湾)": "(中国台湾)",
|
||||
"男声": "Mänsklig röst",
|
||||
"女声": "Kvinnlig röst",
|
||||
"您的图像和视频数据仅保留": "Dina bild- och videodata sparas endast",
|
||||
"后图像和视频数据将会失效,开通": "Efter det kommer bild- och videodata att vara ogiltiga och aktiverade",
|
||||
"云存会员": "Medlemskap i molnlagring",
|
||||
"服务,图像视频信息随心存!": "Service, bild- och videoinformation finns i ditt hjärta!",
|
||||
"图像": "bild",
|
||||
"视频": "Video",
|
||||
"当前国家不支持手机验证码注册,请使用邮箱进行注册": "För närvarande stöder landet inte registrering av verifieringskoder för mobiltelefoner, använd din e-postadress för att registrera dig",
|
||||
"注:": "Obs:",
|
||||
"必需在开始时间24小时内使用一次,否则将失效": "Måste användas en gång inom 24 timmar efter starttiden, annars löper den ut",
|
||||
"这是单次密码,只能使用一次": "Detta är ett engångslösenord och kan endast användas en gång",
|
||||
"您好": "Hej",
|
||||
"您的开门密码是": "Din dörröppningskod är",
|
||||
"开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标": "För att låsa upp, aktivera först låsens tangentbord, ange sedan lösenordet och avsluta med #. #-tangenten finns i det nedre högra hörnet av tangentbordet och kan ha en annan ikon"
|
||||
}
|
||||
@ -1065,7 +1065,7 @@
|
||||
"波兰语": "Polski",
|
||||
"斯洛伐克语": "Slovenčina",
|
||||
"捷克语": "Čeština",
|
||||
"希腊语": "Ελληνικά",
|
||||
"希腊语": "ελληνικά",
|
||||
"希伯来语": "עברית",
|
||||
"塞尔维亚语": "Српски",
|
||||
"土耳其语": "Türkçe",
|
||||
@ -1078,8 +1078,11 @@
|
||||
"印度尼西亚语": "Bahasa Indonesia",
|
||||
"芬兰语": "Suomi",
|
||||
"丹麦语": "Dansk",
|
||||
"印地语": "हिंदीName",
|
||||
"印地语": "हिंदी",
|
||||
"乌尔都语": "اوردو",
|
||||
"亚美尼亚语": "Հայերեն",
|
||||
"格鲁吉亚语": "ქართული",
|
||||
"巴西葡萄牙语": "Português do Brasil",
|
||||
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
|
||||
"繁体中文(中国香港)": "繁體中文(中國香港)",
|
||||
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "หลังจากรีเซ็ตแล้วหลอดเลือดดำ metacarpal ของล็อคจะถูกลบออกคุณแน่ใจว่าอยากจะรีเซ็ต?",
|
||||
@ -1152,40 +1155,24 @@
|
||||
"3.安装Google Home APP,点击左上角的加号按钮": "3. ติดตั้ง googlehome แอพ และคลิกปุ่มบวก ที่มุมบนซ้าย",
|
||||
"暂无最新记录": "ปัจจุบันยังไม่มีบันทึกล่าสุด ที่มีอยู่",
|
||||
"请将手机切换至2.4G WiFi进行手动连接": "กรุณาเปลี่ยนโทรศัพท์เป็น 2.4 GWiFi สำหรับการเชื่อมต่อด้วยตนเอง",
|
||||
"设备重置": "รีเซ็ตอุปกรณ์",
|
||||
"请确认设备已重置": "โปรดยืนยันว่าอุปกรณ์ถูกรีเซ็ตแล้ว",
|
||||
"添加设备前,请确保设备已重置为出厂状态。": "ก่อนเพิ่มอุปกรณ์ โปรดตรวจสอบให้อุปกรณ์ถูกรีเซ็ตเป็นค่าโรงงานแล้ว",
|
||||
"设备已重置": "อุปกรณ์ถูกรีเซ็ตแล้ว",
|
||||
"加不了锁常见问题": "ปัญหาที่พบบ่อยในการเพิ่มอุปกรณ์",
|
||||
"蓝牙未开启或未授权": "บลูทูธยังไม่ได้เปิดหรือไม่ได้รับอนุญาต",
|
||||
"请确保手机蓝牙已开启,并授权App使用蓝牙权限。": "โปรดตรวจสอบว่าได้เปิดบลูทูธและอนุญาตแอปให้ใช้บลูทูธแล้ว",
|
||||
"检查手机设置中的蓝牙权限,确保已授权给App。": "ตรวจสอบสิทธิ์บลูทูธในตั้งค่าโทรศัพท์และให้สิทธิ์กับแอป",
|
||||
"未重置锁": "ยังไม่ได้รีเซ็ตอุปกรณ์",
|
||||
"请先将锁重置为出厂状态,重置方法详见上一步指引。": "โปรดรีเซ็ตอุปกรณ์เป็นค่าโรงงานก่อน ดูวิธีรีเซ็ตในขั้นตอนก่อนหน้า",
|
||||
"找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。": "ค้นหาปุ่มรีเซ็ตบนอุปกรณ์ กดค้างไว้จนได้ยินเสียง \"ติ๊ด\" หรือเห็นไฟแสดงสถานะกระพริบ",
|
||||
"锁电量过低": "แบตเตอรี่อุปกรณ์ต่ำ",
|
||||
"锁电量过低可能导致无法正常连接和添加。": "แบตเตอรี่อุปกรณ์ต่ำอาจทำให้เชื่อมต่อและเพิ่มอุปกรณ์ไม่ได้",
|
||||
"请更换电池后重试。": "โปรดเปลี่ยนแบตเตอรี่แล้วลองใหม่",
|
||||
"距离过远": "ระยะห่างไกลเกินไป",
|
||||
"请确保手机与锁的距离在有效范围内。": "โปรดตรวจสอบว่าโทรศัพท์อยู่ในระยะที่เหมาะสมกับอุปกรณ์",
|
||||
"将手机靠近锁,距离保持在1米以内。": "นำโทรศัพท์เข้าใกล้อุปกรณ์ ระยะไม่เกิน 1 เมตร",
|
||||
"锁已被其他用户添加": "อุปกรณ์นี้ถูกเพิ่มโดยผู้ใช้อื่นแล้ว",
|
||||
"如果锁已被其他用户添加,需要先解除绑定。": "หากอุปกรณ์ถูกเพิ่มโดยผู้ใช้อื่น ต้องยกเลิกการเชื่อมต่อก่อน",
|
||||
"请联系锁的管理员解除绑定,或使用管理员权限重置锁。": "โปรดติดต่อผู้ดูแลอุปกรณ์เพื่อยกเลิกการเชื่อมต่อ หรือใช้สิทธิ์ผู้ดูแลรีเซ็ตอุปกรณ์",
|
||||
"使用小程序": "ใช้มินิโปรแกรม",
|
||||
"如果App无法正常添加锁,可以尝试使用小程序版本。": "หากแอปไม่สามารถเพิ่มอุปกรณ์ได้ ลองใช้มินิโปรแกรมแทน",
|
||||
"打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。": "เปิด WeChat ค้นหา '星星锁Lite' มินิโปรแกรม แล้วลองเพิ่มอุปกรณ์ผ่านมินิโปรแกรม",
|
||||
"尝试升级固件": "ลองอัปเกรดเฟิร์มแวร์",
|
||||
"升级说明": "คำแนะนำการอัปเกรด",
|
||||
"如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:": "หากวิธีข้างต้นยังไม่สามารถแก้ไขปัญหาได้ ลองอัปเกรดเฟิร์มแวร์ของอุปกรณ์ ก่อนอัปเกรดโปรดตรวจสอบว่า:",
|
||||
"升级注意事项": "• แบตเตอรี่อุปกรณ์เพียงพอ\n• ได้รับไฟล์เฟิร์มแวร์ที่ถูกต้อง\n• ห้ามตัดการเชื่อมต่อระหว่างอัปเกรด",
|
||||
"找不到锁?点此查看。": "หาอุปกรณ์ไม่เจอ? คลิกที่นี่เพื่อดู",
|
||||
"常见问题": "ปัญหาที่พบบ่อย",
|
||||
"固件升级": "อัปเกรดเฟิร์มแวร์",
|
||||
"固件升级描述": "คลิกปุ่ม \"กลับไปที่การจัดการอุปกรณ์\" ที่มุมล่างขวาของหน้าเพื่อกลับไปที่หน้าการจัดการอุปกรณ์เพื่ออัปเกรดเฟิร์มแวร์",
|
||||
"邮箱地址必须包含@符号": "ที่อยู่อีเมลต้องมี '@' สัญลักษณ์",
|
||||
"手机号只能包含数字": "เบอร์โทรศัพท์สามารถมีเฉพาะตัวเลขเท่านั้น",
|
||||
"重置方法请查阅设备说明书": "อ่านคู่มือการตั้งค่าอุปกรณ์",
|
||||
"我已重置,继续添加": "ฉันได้ตั้งค่าใหม่แล้ว ต่อไป",
|
||||
"添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。": "ก่อนเพิ่มอุปกรณ์ โปรดตรวจสอบให้อุปกรณ์ถูกตั้งค่าใหม่เป็นค่าโรงงานแล้ว อุปกรณ์ที่ตั้งค่าใหม่จะล้างข้อมูลผู้ใช้ทั้งหมด รวมถึงลายนิ้วมือ รหัสผ่าน และบัตร"
|
||||
"语音包设置": "การตั้งค่าแพ็กเกจเสียง",
|
||||
"第三方平台设置": "การตั้งค่าแพลตฟอร์มของบุคคลที่สาม",
|
||||
"涂鸦智能": "Tuya Smart",
|
||||
"锁语音包设置": "ล็อคการตั้งค่า Voice Pack",
|
||||
"(中国台湾)": "(中国台湾)",
|
||||
"男声": "เสียงผู้ชาย",
|
||||
"女声": "เสียงผู้หญิง",
|
||||
"您的图像和视频数据仅保留": "ระบบจะเก็บข้อมูลรูปภาพและวิดีโอของคุณไว้เท่านั้น",
|
||||
"后图像和视频数据将会失效,开通": "หลังจากนั้น ข้อมูลรูปภาพและวิดีโอจะไม่ถูกต้องและเปิดใช้งาน",
|
||||
"云存会员": "สมาชิกที่เก็บข้อมูลบนคลาวด์",
|
||||
"服务,图像视频信息随心存!": "ข้อมูลบริการ รูปภาพ และวิดีโออยู่ที่หัวใจของคุณ!",
|
||||
"图像": "ภาพ",
|
||||
"视频": "วีดิทัศน์",
|
||||
"当前国家不支持手机验证码注册,请使用邮箱进行注册": "ปัจจุบันประเทศไม่รองรับการลงทะเบียนรหัสยืนยันโทรศัพท์มือถือ โปรดใช้ที่อยู่อีเมลของคุณในการลงทะเบียน",
|
||||
"注:": "หมายเหตุ:",
|
||||
"必需在开始时间24小时内使用一次,否则将失效": "ต้องใช้ภายใน 24 ชั่วโมงหลังจากเวลาเริ่มต้น มิฉะนั้นจะหมดอายุ",
|
||||
"这是单次密码,只能使用一次": "นี่คือรหัสผ่านแบบใช้ครั้งเดียวและสามารถใช้ได้เพียงครั้งเดียวเท่านั้น",
|
||||
"您好": "สวัสดี",
|
||||
"您的开门密码是": "รหัสการเข้าถึงประตูของคุณคือ",
|
||||
"开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标": "ในการปลดล็อค ให้เปิดใช้งานแป้นพิมพ์ล็อคก่อน จากนั้นป้อนรหัสผ่านและจบด้วย # ปุ่ม # อยู่ที่มุมล่างขวาของแป้นพิมพ์และอาจมีไอคอนอื่น"
|
||||
}
|
||||
@ -1065,7 +1065,7 @@
|
||||
"波兰语": "Polski",
|
||||
"斯洛伐克语": "Slovenčina",
|
||||
"捷克语": "Čeština",
|
||||
"希腊语": "Ελληνικά",
|
||||
"希腊语": "ελληνικά",
|
||||
"希伯来语": "עברית",
|
||||
"塞尔维亚语": "Српски",
|
||||
"土耳其语": "Türkçe",
|
||||
@ -1078,8 +1078,11 @@
|
||||
"印度尼西亚语": "Bahasa Indonesia",
|
||||
"芬兰语": "Suomi",
|
||||
"丹麦语": "Dansk",
|
||||
"印地语": "हिंदीName",
|
||||
"印地语": "हिंदी",
|
||||
"乌尔都语": "اوردو",
|
||||
"亚美尼亚语": "Հայերեն",
|
||||
"格鲁吉亚语": "ქართული",
|
||||
"巴西葡萄牙语": "Português do Brasil",
|
||||
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
|
||||
"繁体中文(中国香港)": "繁體中文(中國香港)",
|
||||
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Sıfırlamadan sonra, kilidin metacarpal damarları silinecektir. Sıfırlamak istediğine emin misin?",
|
||||
@ -1152,40 +1155,24 @@
|
||||
"3.安装Google Home APP,点击左上角的加号按钮": "3. Google Home uygulamasını yükleyin ve sol üst köşedeki artı düğmesini tıklayın",
|
||||
"暂无最新记录": "Şu anda en son kayıt mevcut değil",
|
||||
"请将手机切换至2.4G WiFi进行手动连接": "Manuel bağlantı için lütfen telefonunuzu 2.4G WiFi'ye getirin",
|
||||
"设备重置": "Cihazı sıfırla",
|
||||
"请确认设备已重置": "Lütfen cihazın sıfırlandığını onaylayın",
|
||||
"添加设备前,请确保设备已重置为出厂状态。": "Cihazı eklemeden önce, cihazın fabrika ayarlarına sıfırlandığından emin olun.",
|
||||
"设备已重置": "Cihaz sıfırlandı",
|
||||
"加不了锁常见问题": "Kilit eklenemiyor - Sıkça Sorulan Sorunlar",
|
||||
"蓝牙未开启或未授权": "Bluetooth kapalı veya yetkilendirilmemiş",
|
||||
"请确保手机蓝牙已开启,并授权App使用蓝牙权限。": "Lütfen telefonunuzda Bluetooth'un açık olduğundan ve uygulamanın Bluetooth iznine sahip olduğundan emin olun.",
|
||||
"检查手机设置中的蓝牙权限,确保已授权给App。": "Telefon ayarlarında Bluetooth izinlerini kontrol edin ve uygulamaya yetki verildiğinden emin olun.",
|
||||
"未重置锁": "Kilit sıfırlanmadı",
|
||||
"请先将锁重置为出厂状态,重置方法详见上一步指引。": "Lütfen önce kilidi fabrika ayarlarına sıfırlayın, ayrıntılı yöntem için bir önceki adıma bakın.",
|
||||
"找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。": "Kilit üzerindeki sıfırlama düğmesini bulun, 'bip' sesi duyana veya gösterge ışığı yanıp sönene kadar basılı tutun.",
|
||||
"锁电量过低": "Kilit pili çok düşük",
|
||||
"锁电量过低可能导致无法正常连接和添加。": "Kilit pili çok düşükse, bağlantı ve ekleme işlemleri başarısız olabilir.",
|
||||
"请更换电池后重试。": "Lütfen pili değiştirip tekrar deneyin.",
|
||||
"距离过远": "Mesafe çok uzak",
|
||||
"请确保手机与锁的距离在有效范围内。": "Telefon ile kilit arasındaki mesafenin geçerli aralıkta olduğundan emin olun.",
|
||||
"将手机靠近锁,距离保持在1米以内。": "Telefonu kilide yaklaştırın, mesafeyi 1 metre içinde tutun.",
|
||||
"锁已被其他用户添加": "Kilit başka bir kullanıcı tarafından eklenmiş",
|
||||
"如果锁已被其他用户添加,需要先解除绑定。": "Kilit başka bir kullanıcıya eklenmişse, önce bağlantıyı kaldırmanız gerekir.",
|
||||
"请联系锁的管理员解除绑定,或使用管理员权限重置锁。": "Lütfen kilidin yöneticisiyle iletişime geçin veya yönetici yetkisiyle kilidi sıfırlayın.",
|
||||
"使用小程序": "Mini programı kullan",
|
||||
"如果App无法正常添加锁,可以尝试使用小程序版本。": "Eğer uygulama ile kilit eklenemiyorsa, mini programı kullanmayı deneyin.",
|
||||
"打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。": "WeChat'i açın, '星星锁Lite' mini programını arayın ve kilidi eklemeyi deneyin.",
|
||||
"尝试升级固件": "Donanım yazılımını güncellemeyi deneyin",
|
||||
"升级说明": "Güncelleme talimatları",
|
||||
"如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:": "Yukarıdaki yöntemler işe yaramazsa, kilidin donanım yazılımını güncellemeyi deneyin. Güncellemeden önce lütfen şunları sağlayın:",
|
||||
"升级注意事项": "Kilit pili yeterli olmalı\n• Doğru donanım yazılımı dosyası alınmış olmalı\n• Güncelleme sırasında bağlantı kesilmemeli",
|
||||
"找不到锁?点此查看。": "Kilit bulunamıyor mu? Buraya tıklayın.",
|
||||
"常见问题": "Sıkça Sorulan Sorunlar",
|
||||
"固件升级": "Donanım yazılımını güncellemeyi deneyin",
|
||||
"固件升级描述": "Lütfen alt köşedeki \"Cihaz eşleştirmeye dön\" düğmesine tıklayın ve donanım yazılımını güncellemeyi deneyin.",
|
||||
"邮箱地址必须包含@符号": "E-posta adresi '@' simgesini içermelidir.",
|
||||
"手机号只能包含数字": "Telefon numarası yalnızca sayılar içerebilir",
|
||||
"重置方法请查阅设备说明书": "Cihazın kullanım kılavuzunu okuyun",
|
||||
"我已重置,继续添加": "Sıfırladım, devam et",
|
||||
"添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。": "Cihazı eklemeden önce, cihazın fabrika ayarlarına sıfırlandığından emin olun. Sıfırlanan cihaz tüm kullanıcı verilerini (parmak izleri, şifreler, kartlar vb.) temizler."
|
||||
"语音包设置": "Ses Paketi Ayarları",
|
||||
"第三方平台设置": "Üçüncü Taraf Platform Ayarları",
|
||||
"涂鸦智能": "Tuya Smart",
|
||||
"锁语音包设置": "Ses Paketi Ayarlarını Kilitle",
|
||||
"(中国台湾)": "(中国台湾)",
|
||||
"男声": "Erkek Sesi",
|
||||
"女声": "Kadın Sesi",
|
||||
"您的图像和视频数据仅保留": "Görüntü ve video verileriniz yalnızca korunur",
|
||||
"后图像和视频数据将会失效,开通": "Bundan sonra, görüntü ve video verileri geçersiz olacak ve etkinleştirilecektir",
|
||||
"云存会员": "Bulut Depolama Üyeliği",
|
||||
"服务,图像视频信息随心存!": "Servis, görüntü ve video bilgileri kalbinizde!",
|
||||
"图像": "resim",
|
||||
"视频": "Video",
|
||||
"当前国家不支持手机验证码注册,请使用邮箱进行注册": "Şu anda ülke cep telefonu doğrulama kodu kaydını desteklememektedir, lütfen kaydolmak için e-posta adresinizi kullanın",
|
||||
"注:": "Not:",
|
||||
"必需在开始时间24小时内使用一次,否则将失效": "Başlangıç zamanından itibaren 24 saat içinde bir kez kullanılmalıdır, aksi takdirde süresi dolacaktır",
|
||||
"这是单次密码,只能使用一次": "Bu tek kullanımlık bir şifredir ve yalnızca bir kez kullanılabilir",
|
||||
"您好": "Merhaba",
|
||||
"您的开门密码是": "Kapı erişim kodunuz",
|
||||
"开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标": "Kilidi açmak için önce kilit klavyesini etkinleştirin, ardından şifreyi girin ve # ile bitirin. # tuşu klavyenin sağ alt köşesindedir ve farklı bir simge olabilir"
|
||||
}
|
||||
@ -1065,7 +1065,7 @@
|
||||
"波兰语": "Polski",
|
||||
"斯洛伐克语": "Slovenčina",
|
||||
"捷克语": "Čeština",
|
||||
"希腊语": "Ελληνικά",
|
||||
"希腊语": "ελληνικά",
|
||||
"希伯来语": "עברית",
|
||||
"塞尔维亚语": "Српски",
|
||||
"土耳其语": "Türkçe",
|
||||
@ -1078,8 +1078,11 @@
|
||||
"印度尼西亚语": "Bahasa Indonesia",
|
||||
"芬兰语": "Suomi",
|
||||
"丹麦语": "Dansk",
|
||||
"印地语": "हिंदीName",
|
||||
"印地语": "हिंदी",
|
||||
"乌尔都语": "اوردو",
|
||||
"亚美尼亚语": "Հայերեն",
|
||||
"格鲁吉亚语": "ქართული",
|
||||
"巴西葡萄牙语": "Português do Brasil",
|
||||
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
|
||||
"繁体中文(中国香港)": "繁體中文(中國香港)",
|
||||
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "重置後,鎖的掌靜脈將被刪除。 是否確實要重置?",
|
||||
@ -1152,40 +1155,24 @@
|
||||
"3.安装Google Home APP,点击左上角的加号按钮": "3. 安裝谷歌Home應用程序並單擊左上角的加號按鈕",
|
||||
"暂无最新记录": "目前沒有最新的記錄",
|
||||
"请将手机切换至2.4G WiFi进行手动连接": "手動連接時請將手機調至2.4G WiFi",
|
||||
"设备重置": "設備重置",
|
||||
"请确认设备已重置": "請確認設備已重置",
|
||||
"添加设备前,请确保设备已重置为出厂状态。": "添加設備前,請確保設備已重置為出廠狀態。",
|
||||
"设备已重置": "設備已重置",
|
||||
"加不了锁常见问题": "加不了鎖常見問題",
|
||||
"蓝牙未开启或未授权": "藍牙未開啟或未授權",
|
||||
"请确保手机蓝牙已开启,并授权App使用蓝牙权限。": "請確保手機藍牙已開啟,並授權App使用藍牙權限。",
|
||||
"检查手机设置中的蓝牙权限,确保已授权给App。": "檢查手機設置中的藍牙權限,確保已授權給App。",
|
||||
"未重置锁": "未重置鎖",
|
||||
"请先将锁重置为出厂状态,重置方法详见上一步指引。": "請先將鎖重置為出廠狀態,重置方法詳見上一步指引。",
|
||||
"找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。": "找到鎖上的重置按鈕,長按直到聽到「嗶」聲或看到指示燈閃爍。",
|
||||
"锁电量过低": "鎖電量過低",
|
||||
"锁电量过低可能导致无法正常连接和添加。": "鎖電量過低可能導致無法正常連接和添加。",
|
||||
"请更换电池后重试。": "請更換電池後重試。",
|
||||
"距离过远": "距離過遠",
|
||||
"请确保手机与锁的距离在有效范围内。": "請確保手機與鎖的距離在有效範圍內。",
|
||||
"将手机靠近锁,距离保持在1米以内。": "將手機靠近鎖,距離保持在1米以內。",
|
||||
"锁已被其他用户添加": "鎖已被其他用戶添加",
|
||||
"如果锁已被其他用户添加,需要先解除绑定。": "如果鎖已被其他用戶添加,需要先解除綁定。",
|
||||
"请联系锁的管理员解除绑定,或使用管理员权限重置锁。": "請聯繫鎖的管理員解除綁定,或使用管理員權限重置鎖。",
|
||||
"使用小程序": "使用小程序",
|
||||
"如果App无法正常添加锁,可以尝试使用小程序版本。": "如果App無法正常添加鎖,可以嘗試使用小程序版本。",
|
||||
"打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。": "打開微信,搜尋「星星锁Lite」小程序,嘗試通過小程序添加鎖。",
|
||||
"尝试升级固件": "嘗試升級固件",
|
||||
"升级说明": "升級說明",
|
||||
"如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:": "如果以上方法都無法解決問題,可以嘗試升級鎖的固件。升級前請確保:",
|
||||
"升级注意事项": "鎖電量充足\n• 已獲取正確的固件文件\n• 升級過程中不要斷開連接",
|
||||
"找不到锁?点此查看。": "找不到鎖?點此查看。",
|
||||
"常见问题": "常見問題",
|
||||
"固件升级": "固件升級",
|
||||
"固件升级描述": "請點擊右下角的「點擊返回設備配對」按鈕,返回設備配對頁面進行固件升級",
|
||||
"邮箱地址必须包含@符号": "電子郵件地址必須包含@符號。",
|
||||
"手机号只能包含数字": "手機號碼只能包含數字",
|
||||
"重置方法请查阅设备说明书": "重置方法請參閱設備說明書",
|
||||
"我已重置,继续添加": "我已重置,繼續添加",
|
||||
"添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。": "添加設備前,請確保設備已重置為出廠狀態。重置後的設備將清除所有用戶數據,包括指紋、密碼、卡片等信息。"
|
||||
"语音包设置": "語音包設定",
|
||||
"第三方平台设置": "協力廠商領獎臺設定",
|
||||
"涂鸦智能": "Tuya Smart",
|
||||
"锁语音包设置": "鎖語音包設定",
|
||||
"(中国台湾)": "(中国台湾)",
|
||||
"男声": "男聲",
|
||||
"女声": "女聲",
|
||||
"您的图像和视频数据仅保留": "您的圖像和視頻數據僅保留",
|
||||
"后图像和视频数据将会失效,开通": "后圖像和視頻數據將會失效,開通",
|
||||
"云存会员": "雲存會員",
|
||||
"服务,图像视频信息随心存!": "服務,圖像視頻資訊隨心存!",
|
||||
"图像": "圖像",
|
||||
"视频": "視頻",
|
||||
"当前国家不支持手机验证码注册,请使用邮箱进行注册": "當前國家不支援手機驗證碼註冊,請使用郵箱進行註冊",
|
||||
"注:": "註:",
|
||||
"必需在开始时间24小时内使用一次,否则将失效": "必須在開始時間24小時內使用一次,否則將失效",
|
||||
"这是单次密码,只能使用一次": "這是單次密碼,只能使用一次",
|
||||
"您好": "您好",
|
||||
"您的开门密码是": "您的開門密碼是",
|
||||
"开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标": "開鎖時,先啟動鎖鍵盤,再輸入密碼,以#號結束,#號鍵在鍵盤右下角,有可能是其他圖標"
|
||||
}
|
||||
@ -1065,7 +1065,7 @@
|
||||
"波兰语": "Polski",
|
||||
"斯洛伐克语": "Slovenčina",
|
||||
"捷克语": "Čeština",
|
||||
"希腊语": "Ελληνικά",
|
||||
"希腊语": "ελληνικά",
|
||||
"希伯来语": "עברית",
|
||||
"塞尔维亚语": "Српски",
|
||||
"土耳其语": "Türkçe",
|
||||
@ -1078,8 +1078,11 @@
|
||||
"印度尼西亚语": "Bahasa Indonesia",
|
||||
"芬兰语": "Suomi",
|
||||
"丹麦语": "Dansk",
|
||||
"印地语": "हिंदीName",
|
||||
"印地语": "हिंदी",
|
||||
"乌尔都语": "اوردو",
|
||||
"亚美尼亚语": "Հայերեն",
|
||||
"格鲁吉亚语": "ქართული",
|
||||
"巴西葡萄牙语": "Português do Brasil",
|
||||
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
|
||||
"繁体中文(中国香港)": "繁體中文(中國香港)",
|
||||
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Після скидання п'ясткові вени замку будуть видалені. Ви впевнені, що хочете скинути налаштування?",
|
||||
@ -1152,40 +1155,24 @@
|
||||
"3.安装Google Home APP,点击左上角的加号按钮": "3. Встановіть програму Google Home і натисніть кнопку плюс у верхньому лівому кутку",
|
||||
"暂无最新记录": "Наразі немає останніх доступних записів",
|
||||
"请将手机切换至2.4G WiFi进行手动连接": "Будь ласка, перемкніть свій телефон на 2.4G WiFi для ручного підключення",
|
||||
"设备重置": "Скидання пристрою",
|
||||
"请确认设备已重置": "Будь ласка, підтвердіть, що пристрій скинуто",
|
||||
"添加设备前,请确保设备已重置为出厂状态。": "Перед додаванням пристрою переконайтеся, що він скинутий до заводських налаштувань.",
|
||||
"设备已重置": "Пристрій скинуто",
|
||||
"加不了锁常见问题": "Поширені проблеми з додаванням пристрою",
|
||||
"蓝牙未开启或未授权": "Bluetooth вимкнено або не авторизовано",
|
||||
"请确保手机蓝牙已开启,并授权App使用蓝牙权限。": "Переконайтеся, що Bluetooth увімкнено, і додатку надано дозвіл.",
|
||||
"检查手机设置中的蓝牙权限,确保已授权给App。": "Перевірте дозвіл Bluetooth у налаштуваннях телефону та переконайтеся, що додатку надано дозвіл.",
|
||||
"未重置锁": "Пристрій не скинуто",
|
||||
"请先将锁重置为出厂状态,重置方法详见上一步指引。": "Спочатку скиньте пристрій до заводських налаштувань, див. інструкцію на попередньому кроці.",
|
||||
"找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。": "Знайдіть кнопку скидання на пристрої, натисніть і утримуйте, поки не почуєте сигнал або не побачите миготіння індикатора.",
|
||||
"锁电量过低": "Низький заряд батареї пристрою",
|
||||
"锁电量过低可能导致无法正常连接和添加。": "Низький заряд батареї може призвести до неможливості підключення або додавання пристрою.",
|
||||
"请更换电池后重试。": "Будь ласка, замініть батарею і спробуйте ще раз.",
|
||||
"距离过远": "Занадто велика відстань",
|
||||
"请确保手机与锁的距离在有效范围内。": "Переконайтеся, що телефон знаходиться в межах дії пристрою.",
|
||||
"将手机靠近锁,距离保持在1米以内。": "Піднесіть телефон ближче до пристрою, тримайте відстань менше 1 метра.",
|
||||
"锁已被其他用户添加": "Пристрій вже додано іншим користувачем",
|
||||
"如果锁已被其他用户添加,需要先解除绑定。": "Якщо пристрій вже додано іншим користувачем, спочатку потрібно відв'язати його.",
|
||||
"请联系锁的管理员解除绑定,或使用管理员权限重置锁。": "Зверніться до адміністратора пристрою для відв'язки або скористайтеся правами адміністратора для скидання пристрою.",
|
||||
"使用小程序": "Використовуйте мініпрограму",
|
||||
"如果App无法正常添加锁,可以尝试使用小程序版本。": "Якщо додаток не може додати пристрій, спробуйте використати мініпрограму.",
|
||||
"打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。": "Відкрийте WeChat, знайдіть мініпрограму '星星锁Lite' і спробуйте додати пристрій.",
|
||||
"尝试升级固件": "Спробуйте оновити прошивку",
|
||||
"升级说明": "Інструкція з оновлення",
|
||||
"如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:": "Якщо жоден із вищевказаних способів не допоміг, спробуйте оновити прошивку пристрою. Перед оновленням переконайтеся, що:",
|
||||
"升级注意事项": "• Заряд батареї пристрою достатній\n• Отримано правильний файл прошивки\n• Не відключайте пристрій під час оновлення",
|
||||
"找不到锁?点此查看。": "Не можете знайти пристрій? Натисніть тут.",
|
||||
"常见问题": "Поширені проблеми",
|
||||
"固件升级": "Оновлення прошивки",
|
||||
"固件升级描述": "Натисніть кнопку \"Повернутися до налаштування пристрою\" у нижньому правому кутку, щоб повернутися до сторінки налаштування пристрою для оновлення прошивки.",
|
||||
"邮箱地址必须包含@符号": "Адреса електронної пошти повинна містити символ '@'.",
|
||||
"手机号只能包含数字": "Номер телефону може містити лише цифри",
|
||||
"重置方法请查阅设备说明书": "Перегляньте інструкцію з пристрою",
|
||||
"我已重置,继续添加": "Я відновив, продовжую",
|
||||
"添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。": "Перед додаванням пристрою переконайтеся, що він скинутий до заводських налаштувань. Після скидання пристрою будуть видалені всі дані користувачів, включаючи відбитки пальців, паролі та картки."
|
||||
"语音包设置": "Параметри голосового пакету",
|
||||
"第三方平台设置": "Налаштування платформи третьої сторони",
|
||||
"涂鸦智能": "Tuya Smart",
|
||||
"锁语音包设置": "Параметри блокування голосового пакету",
|
||||
"(中国台湾)": "(中国台湾)",
|
||||
"男声": "Чоловічий голос",
|
||||
"女声": "жіночий голос",
|
||||
"您的图像和视频数据仅保留": "Ваші зображення та відеодані зберігаються лише",
|
||||
"后图像和视频数据将会失效,开通": "Після цього дані зображення та відео будуть недійсними та активованими",
|
||||
"云存会员": "Членство в хмарних сховищах",
|
||||
"服务,图像视频信息随心存!": "Сервіс, зображення та відео інформація у вашому серці!",
|
||||
"图像": "образ",
|
||||
"视频": "Відео",
|
||||
"当前国家不支持手机验证码注册,请使用邮箱进行注册": "Наразі країна не підтримує реєстрацію коду підтвердження на мобільному телефоні, будь ласка, використовуйте свою адресу електронної пошти для реєстрації",
|
||||
"注:": "Примітка:",
|
||||
"必需在开始时间24小时内使用一次,否则将失效": "Потрібно використати один раз протягом 24 годин після початкового часу, інакше термін дії спливе",
|
||||
"这是单次密码,只能使用一次": "Це одноразовий пароль, який можна використовувати лише один раз",
|
||||
"您好": "Привіт",
|
||||
"您的开门密码是": "Ваш код доступу до дверей",
|
||||
"开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标": "Щоб розблокувати, спочатку активуйте клавіатуру замка, потім введіть пароль і закінчіть #. Клавіша # знаходиться в правому нижньому куті клавіатури та може мати інший значок"
|
||||
}
|
||||
@ -1067,7 +1067,7 @@
|
||||
"波兰语": "Polski",
|
||||
"斯洛伐克语": "Slovenčina",
|
||||
"捷克语": "Čeština",
|
||||
"希腊语": "Ελληνικά",
|
||||
"希腊语": "ελληνικά",
|
||||
"希伯来语": "עברית",
|
||||
"塞尔维亚语": "Српски",
|
||||
"土耳其语": "Türkçe",
|
||||
@ -1080,8 +1080,11 @@
|
||||
"印度尼西亚语": "Bahasa Indonesia",
|
||||
"芬兰语": "Suomi",
|
||||
"丹麦语": "Dansk",
|
||||
"印地语": "हिंदीName",
|
||||
"印地语": "हिंदी",
|
||||
"乌尔都语": "اوردو",
|
||||
"亚美尼亚语": "Հայերեն",
|
||||
"格鲁吉亚语": "ქართული",
|
||||
"巴西葡萄牙语": "Português do Brasil",
|
||||
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
|
||||
"繁体中文(中国香港)": "繁體中文(中國香港)",
|
||||
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "ری سیٹ کرنے کے بعد ، لاک کی میٹاکارپل رگیں حذف کردی جائیں گی۔ کیا آپ واقعی دوبارہ ترتیب دینا چاہتے ہیں؟",
|
||||
@ -1152,40 +1155,24 @@
|
||||
"3.安装Google Home APP,点击左上角的加号按钮": "3. گوگل ہوم ایپ انسٹال کریں اور اوپری بائیں کونے میں پلس بٹن پر کلک کریں۔",
|
||||
"暂无最新记录": "فی الحال کوئی تازہ ترین ریکارڈ دستیاب نہیں ہے",
|
||||
"请将手机切换至2.4G WiFi进行手动连接": "براہ کرم دستی کنکشن کے لئے اپنے فون کو 2.4 جی وائی فائی پر سوئچ کریں",
|
||||
"设备重置": "ڈیوائس ری سیٹ",
|
||||
"请确认设备已重置": "براہ کرم تصدیق کریں کہ ڈیوائس ری سیٹ ہو چکی ہے",
|
||||
"添加设备前,请确保设备已重置为出厂状态。": "ڈیوائس شامل کرنے سے پہلے، براہ کرم تصدیق کریں کہ ڈیوائس فیکٹری ری سیٹ ہو چکی ہے۔",
|
||||
"设备已重置": "ڈیوائس ری سیٹ ہو چکی ہے",
|
||||
"加不了锁常见问题": "لاک شامل کرنے کے مسائل کے عمومی سوالات",
|
||||
"蓝牙未开启或未授权": "بلوٹوتھ آن یا مجاز نہیں",
|
||||
"请确保手机蓝牙已开启,并授权App使用蓝牙权限。": "براہ کرم تصدیق کریں کہ فون کا بلوٹوتھ آن ہے اور ایپ کو اجازت دی گئی ہے۔",
|
||||
"检查手机设置中的蓝牙权限,确保已授权给App。": "فون کی سیٹنگز میں بلوٹوتھ اجازت چیک کریں اور ایپ کو اجازت دیں۔",
|
||||
"未重置锁": "لاک ری سیٹ نہیں ہوا",
|
||||
"请先将锁重置为出厂状态,重置方法详见上一步指引。": "براہ کرم پہلے لاک کو فیکٹری ری سیٹ کریں، طریقہ پچھلے مرحلے میں دیکھیں۔",
|
||||
"找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。": "لاک پر ری سیٹ بٹن تلاش کریں، 'بیپ' سننے یا لائٹ چمکنے تک دبائے رکھیں۔",
|
||||
"锁电量过低": "لاک کی بیٹری کم ہے",
|
||||
"锁电量过低可能导致无法正常连接和添加。": "بیٹری کم ہونے سے لاک کنیکٹ یا شامل نہیں ہو سکتا۔",
|
||||
"请更换电池后重试。": "براہ کرم بیٹری تبدیل کر کے دوبارہ کوشش کریں۔",
|
||||
"距离过远": "فاصلہ بہت زیادہ ہے",
|
||||
"请确保手机与锁的距离在有效范围内。": "براہ کرم تصدیق کریں کہ فون اور لاک کا فاصلہ درست ہے۔",
|
||||
"将手机靠近锁,距离保持在1米以内。": "فون کو لاک کے قریب، 1 میٹر کے اندر رکھیں۔",
|
||||
"锁已被其他用户添加": "لاک کسی اور صارف نے شامل کر لیا ہے",
|
||||
"如果锁已被其他用户添加,需要先解除绑定。": "اگر لاک کسی اور نے شامل کیا ہے تو پہلے ان بائنڈ کریں۔",
|
||||
"请联系锁的管理员解除绑定,或使用管理员权限重置锁。": "براہ کرم ایڈمن سے ان بائنڈ کروائیں یا ایڈمن اجازت سے لاک ری سیٹ کریں۔",
|
||||
"使用小程序": "منی پروگرام استعمال کریں",
|
||||
"如果App无法正常添加锁,可以尝试使用小程序版本。": "اگر ایپ سے لاک شامل نہیں ہو رہا تو منی پروگرام آزمائیں۔",
|
||||
"打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。": "وی چیٹ کھولیں، '星星锁Lite' منی پروگرام تلاش کریں اور لاک شامل کرنے کی کوشش کریں۔",
|
||||
"尝试升级固件": "فرم ویئر اپ گریڈ آزمائیں",
|
||||
"升级说明": "اپ گریڈ ہدایات",
|
||||
"如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:": "اگر مسئلہ حل نہ ہو تو لاک کا فرم ویئر اپ گریڈ کرنے کی کوشش کریں۔ اپ گریڈ سے پہلے تصدیق کریں:",
|
||||
"升级注意事项": "• بیٹری کافی ہو\n• درست فرم ویئر فائل حاصل ہو\n• اپ گریڈ کے دوران کنکشن نہ توڑیں",
|
||||
"找不到锁?点此查看。": "لاک نہیں مل رہا؟ یہاں کلک کریں۔",
|
||||
"常见问题": "عمومی سوالات",
|
||||
"固件升级": "فرم ویئر اپ گریڈ",
|
||||
"固件升级描述": "براہ کرم ڈاؤن لوڈ پیج پر جائیں۔",
|
||||
"邮箱地址必须包含@符号": "ای میل پتہ '@' سمبل سے شروع ہونا چاہیے۔",
|
||||
"手机号只能包含数字": "فون نمبر صرف اعداد اور علامات پر مشتمل ہونا چاہیے",
|
||||
"重置方法请查阅设备说明书": "لاک کی تفصیلات کو پڑھیں",
|
||||
"我已重置,继续添加": "میں ری سیٹ کردم، جاری رکھیں",
|
||||
"添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。": "ڈیوائس شامل کرنے سے پہلے، براہ کرم تصدیق کریں کہ ڈیوائس فیکٹری ری سیٹ ہو چکی ہے۔"
|
||||
"语音包设置": "صوتی پیکیج ترتیبات",
|
||||
"第三方平台设置": "تھرڈ پارٹی پلیٹ فارم کی ترتیبات",
|
||||
"涂鸦智能": "Tuya Smart",
|
||||
"锁语音包设置": "صوتی پیکیج کی ترتیبات لاک کریں",
|
||||
"(中国台湾)": "(中国台湾)",
|
||||
"男声": "مردوں کی آواز",
|
||||
"女声": "خواتین کی آواز",
|
||||
"您的图像和视频数据仅保留": "آپ کی تصویر اور ویڈیو کا ڈیٹا صرف برقرار رکھا گیا ہے",
|
||||
"后图像和视频数据将会失效,开通": "اس کے بعد ، تصویر اور ویڈیو کا ڈیٹا غیر قانونی اور فعال ہوجائے گا۔",
|
||||
"云存会员": "Cloud Storage Membership",
|
||||
"服务,图像视频信息随心存!": "خدمت، تصویر اور ویڈیو کی معلومات آپ کے دل میں ہیں!",
|
||||
"图像": "روپ",
|
||||
"视频": "ویڈیو",
|
||||
"当前国家不支持手机验证码注册,请使用邮箱进行注册": "فی الحال، ملک موبائل فون کی توثیقی کوڈ رجسٹریشن کی حمایت نہیں کرتا ہے، براہ کرم رجسٹر کرنے کے لئے اپنا ای میل ایڈریس استعمال کریں",
|
||||
"注:": "نوٹ:",
|
||||
"必需在开始时间24小时内使用一次,否则将失效": "وقت آغاز سے 24 گھنٹوں کے اندر ایک بار استعمال کرنا ضروری ہے، ورنہ اس کی میعاد ختم ہو جائے گی",
|
||||
"这是单次密码,只能使用一次": "یہ ایک بار کا پاس ورڈ ہے اور صرف ایک بار استعمال کیا جا سکتا ہے",
|
||||
"您好": "ہیلو",
|
||||
"您的开门密码是": "آپ کا دروازہ کھولنے کا کوڈ ہے",
|
||||
"开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标": "غیر مقفل کرنے کے لئے، پہلے لاک کی بورڈ کو چالو کریں، پھر پاس ورڈ درج کریں اور # کے ساتھ ختم کریں۔ # کلید کی بورڈ کے دائیں نچلے کونے میں ہے اور اس میں کوئی اور آئیکن ہو سکتی ہے"
|
||||
}
|
||||
@ -1065,7 +1065,7 @@
|
||||
"波兰语": "Polski",
|
||||
"斯洛伐克语": "Slovenčina",
|
||||
"捷克语": "Čeština",
|
||||
"希腊语": "Ελληνικά",
|
||||
"希腊语": "ελληνικά",
|
||||
"希伯来语": "עברית",
|
||||
"塞尔维亚语": "Српски",
|
||||
"土耳其语": "Türkçe",
|
||||
@ -1078,8 +1078,11 @@
|
||||
"印度尼西亚语": "Bahasa Indonesia",
|
||||
"芬兰语": "Suomi",
|
||||
"丹麦语": "Dansk",
|
||||
"印地语": "हिंदीName",
|
||||
"印地语": "हिंदी",
|
||||
"乌尔都语": "اوردو",
|
||||
"亚美尼亚语": "Հայերեն",
|
||||
"格鲁吉亚语": "ქართული",
|
||||
"巴西葡萄牙语": "Português do Brasil",
|
||||
"繁体中文(中国台湾)": "繁體中文(中國臺灣)",
|
||||
"繁体中文(中国香港)": "繁體中文(中國香港)",
|
||||
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "Sau khi đặt lại, các tĩnh mạch metacarpal của khóa sẽ bị xóa. Bạn có chắc muốn thiết lập lại không?",
|
||||
@ -1152,40 +1155,24 @@
|
||||
"3.安装Google Home APP,点击左上角的加号按钮": "3. Cài đặt ứng dụng Google Home và nhấn nút Plus ở góc trên bên trái",
|
||||
"暂无最新记录": "Hiện tại không có hồ sơ mới nhất",
|
||||
"请将手机切换至2.4G WiFi进行手动连接": "Vui lòng chuyển điện thoại sang 2.4G WiFi để kết nối bằng tay",
|
||||
"设备重置": "Thiết lập lại thiết bị",
|
||||
"请确认设备已重置": "Vui lòng xác nhận rằng thiết bị đã được thiết lập lại",
|
||||
"添加设备前,请确保设备已重置为出厂状态。": "Trước khi thêm thiết bị, vui lòng đảm bảo rằng thiết bị đã được thiết lập lại đến trạng thái sản xuất.",
|
||||
"设备已重置": "Thiết bị đã được thiết lập lại",
|
||||
"加不了锁常见问题": "Các vấn đề thường gặp khi thêm thiết bị",
|
||||
"蓝牙未开启或未授权": "Bluetooth chưa được bật hoặc chưa được cấp quyền",
|
||||
"请确保手机蓝牙已开启,并授权App使用蓝牙权限。": "Vui lòng đảm bảo rằng Bluetooth đã được bật và ứng dụng đã được cấp quyền sử dụng Bluetooth.",
|
||||
"检查手机设置中的蓝牙权限,确保已授权给App。": "Kiểm tra quyền sử dụng Bluetooth trong cài đặt điện thoại và đảm bảo rằng ứng dụng đã được cấp quyền sử dụng Bluetooth.",
|
||||
"未重置锁": "Không thể thiết lập lại khóa",
|
||||
"请先将锁重置为出厂状态,重置方法详见上一步指引。": "Vui lòng thiết lập lại khóa đến trạng thái sản xuất trước, xem hướng dẫn trong bước trước.",
|
||||
"找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。": "Tìm nút thiết lập trên khóa, nhấn và giữ cho đến khi nghe thấy âm thanh \"beep\" hoặc thấy đèn báo nhấp nháy.",
|
||||
"锁电量过低": "Pin khóa thấp",
|
||||
"锁电量过低可能导致无法正常连接和添加。": "Pin khóa thấp có thể ngăn cản kết nối và thêm thiết bị.",
|
||||
"请更换电池后重试。": "Vui lòng thay pin và thử lại.",
|
||||
"距离过远": "Khoảng cách quá xa",
|
||||
"请确保手机与锁的距离在有效范围内。": "Vui lòng đảm bảo rằng khoảng cách giữa điện thoại và khóa nằm trong phạm vi hợp lệ.",
|
||||
"将手机靠近锁,距离保持在1米以内。": "Di chuyển điện thoại đến gần khóa, giữ khoảng cách trong khoảng 1 mét.",
|
||||
"锁已被其他用户添加": "Khóa đã được thêm bởi người dùng khác",
|
||||
"如果锁已被其他用户添加,需要先解除绑定。": "Nếu khóa đã được thêm bởi người dùng khác, cần giải phóng liên kết trước.",
|
||||
"请联系锁的管理员解除绑定,或使用管理员权限重置锁。": "Vui lòng liên hệ với quản trị viên khóa để giải phóng liên kết hoặc thiết lập lại khóa bằng quyền quản trị viên.",
|
||||
"使用小程序": "Sử dụng ứng dụng mini",
|
||||
"如果App无法正常添加锁,可以尝试使用小程序版本。": "Nếu ứng dụng không thể thêm khóa thành công, hãy thử sử dụng phiên bản ứng dụng mini.",
|
||||
"打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。": "Mở WeChat, tìm kiếm \"星星锁Lite\" trong ứng dụng mini và thử thêm khóa thông qua ứng dụng mini.",
|
||||
"尝试升级固件": "Thử nâng cấp firmware",
|
||||
"升级说明": "Hướng dẫn nâng cấp",
|
||||
"如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:": "Nếu các phương pháp trên không thể giải quyết vấn đề, hãy thử nâng cấp firmware của khóa. Trước khi nâng cấp, vui lòng đảm bảo:",
|
||||
"升级注意事项": "• Pin khóa đủ\n• Đã nhận được tệp firmware đúng\n• Không ngắt kết nối trong quá trình nâng cấp",
|
||||
"找不到锁?点此查看。": "Không tìm thấy khóa? Nhấp vào đây để xem.",
|
||||
"常见问题": "Các vấn đề thường gặp",
|
||||
"固件升级": "Nâng cấp firmware",
|
||||
"固件升级描述": "Vui lòng nhấp vào nút \"Quay lại thiết lập thiết bị\" ở góc dưới cùng bên phải để quay lại trang thiết lập thiết bị để nâng cấp firmware.",
|
||||
"邮箱地址必须包含@符号": "Địa chỉ email phải chứa ký tự @.",
|
||||
"手机号只能包含数字": "Số điện thoại chỉ có thể chứa số",
|
||||
"重置方法请查阅设备说明书": "Hướng dẫn thiết lập lại thiết bị",
|
||||
"我已重置,继续添加": "Tôi đã thiết lập lại, tiếp tục thêm",
|
||||
"添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。": "Trước khi thêm thiết bị, vui lòng đảm bảo rằng thiết bị đã được thiết lập lại đến trạng thái sản xuất. Thiết bị đã thiết lập lại sẽ xóa tất cả dữ liệu người dùng, bao gồm dấu vân tay, mật khẩu và thẻ."
|
||||
"语音包设置": "Thiết lập gói thoại",
|
||||
"第三方平台设置": "Cài đặt nền tảng của bên thứ ba",
|
||||
"涂鸦智能": "Tuya Smart",
|
||||
"锁语音包设置": "Khóa cài đặt gói thoại",
|
||||
"(中国台湾)": "(中国台湾)",
|
||||
"男声": "Giọng nam",
|
||||
"女声": "Giọng nữ",
|
||||
"您的图像和视频数据仅保留": "Dữ liệu hình ảnh và video của bạn chỉ được giữ lại",
|
||||
"后图像和视频数据将会失效,开通": "Sau đó, dữ liệu hình ảnh và video sẽ không hợp lệ và được kích hoạt",
|
||||
"云存会员": "Tư cách thành viên lưu trữ đám mây",
|
||||
"服务,图像视频信息随心存!": "Thông tin dịch vụ, hình ảnh và video là trọng tâm của bạn!",
|
||||
"图像": "ảnh",
|
||||
"视频": "Video",
|
||||
"当前国家不支持手机验证码注册,请使用邮箱进行注册": "Hiện tại, quốc gia này không hỗ trợ đăng ký mã xác minh điện thoại di động, vui lòng sử dụng địa chỉ email của bạn để đăng ký",
|
||||
"注:": "Lưu ý:",
|
||||
"必需在开始时间24小时内使用一次,否则将失效": "Phải được sử dụng một lần trong vòng 24 giờ kể từ thời điểm bắt đầu, nếu không sẽ hết hạn",
|
||||
"这是单次密码,只能使用一次": "Đây là mật khẩu một lần và chỉ có thể sử dụng một lần",
|
||||
"您好": "Xin chào",
|
||||
"您的开门密码是": "Mã truy cập cửa của bạn là",
|
||||
"开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标": "Để mở khóa, trước tiên hãy kích hoạt bàn phím khóa, sau đó nhập mật khẩu và kết thúc bằng #. Phím # nằm ở góc dưới bên phải của bàn phím và có thể có biểu tượng khác"
|
||||
}
|
||||
@ -63,7 +63,6 @@
|
||||
"授权管理员拥有操作这把锁的重要权限,请确保只发给我你信任的人": "授权管理员拥有操作这把锁的重要权限,请确保只发给我你信任的人",
|
||||
"功能开启后,你将可以通过网关远程开锁。此功能的开启和关闭只能在锁附近通过手机蓝牙进行。": "功能开启后,你将可以通过网关远程开锁。此功能的开启和关闭只能在锁附近通过手机蓝牙进行。",
|
||||
"此功能的开启和关闭只能在锁附近通过手机蓝牙进行": "此功能的开启和关闭只能在锁附近通过手机蓝牙进行",
|
||||
|
||||
"功能开启后,你将可以通过网关远程开锁。": "功能开启后,你将可以通过网关远程开锁。",
|
||||
"排列方式": "排列方式",
|
||||
"早到榜": "早到榜",
|
||||
@ -1070,7 +1069,7 @@
|
||||
"波兰语": "Polski",
|
||||
"斯洛伐克语": "Slovenčina",
|
||||
"捷克语": "Čeština",
|
||||
"希腊语": "Ελληνικά",
|
||||
"希腊语": "ελληνικά",
|
||||
"希伯来语": "עברית",
|
||||
"塞尔维亚语": "Српски",
|
||||
"土耳其语": "Türkçe",
|
||||
@ -1083,8 +1082,11 @@
|
||||
"印度尼西亚语": "Bahasa Indonesia",
|
||||
"芬兰语": "Suomi",
|
||||
"丹麦语": "Dansk",
|
||||
"印地语": "हिंदीName",
|
||||
"印地语": "हिंदी",
|
||||
"乌尔都语": "اوردو",
|
||||
"亚美尼亚语": "Հայերեն",
|
||||
"格鲁吉亚语": "ქართული",
|
||||
"巴西葡萄牙语": "Português do Brasil",
|
||||
"重置后,该锁的掌静脉都将被删除哦,确认要重置吗?": "重置后,该锁的掌静脉都将被删除哦,确认要重置吗?",
|
||||
"在线": "在线",
|
||||
"离线": "离线",
|
||||
@ -1099,7 +1101,7 @@
|
||||
"支持的国家": "支持的国家",
|
||||
"支持的国家值": "美国、加拿大、英国、澳大利亚、印度、德国、法国、意大利、西班牙、日本",
|
||||
"操作流程": "操作流程",
|
||||
"操作流程值":"1 用智能锁APP添加锁和网关\n\n2 在APP里开启锁的远程开锁功能(这个功能默认是关闭的)。如果没有这个选项,则锁不支持Alexa \n\n3 在Alexa中添加Skill,并用智能锁APP的账号和密码进行授权。授权成功后就可以发现账号下的设备\n\n4 在Alexa app里找到锁,开启语音开锁的功能,并设置语言密码\n\n5 可以通过Alexa操作锁了",
|
||||
"操作流程值": "1 用智能锁APP添加锁和网关\n\n2 在APP里开启锁的远程开锁功能(这个功能默认是关闭的)。如果没有这个选项,则锁不支持Alexa \n\n3 在Alexa中添加Skill,并用智能锁APP的账号和密码进行授权。授权成功后就可以发现账号下的设备\n\n4 在Alexa app里找到锁,开启语音开锁的功能,并设置语言密码\n\n5 可以通过Alexa操作锁了",
|
||||
"Google Home": "Google Home",
|
||||
"Action name": "Action name",
|
||||
"ScienerSmart": "ScienerSmart",
|
||||
@ -1165,40 +1167,24 @@
|
||||
"需要相机权限": "需要相机权限",
|
||||
"一键登录": "一键登录",
|
||||
"网关添加成功": "网关添加成功",
|
||||
"设备重置": "设备重置",
|
||||
"请确认设备已重置": "请确认设备已重置",
|
||||
"添加设备前,请确保设备已重置为出厂状态。": "添加设备前,请确保设备已重置为出厂状态。",
|
||||
"设备已重置": "设备已重置",
|
||||
"加不了锁常见问题": "加不了锁常见问题",
|
||||
"蓝牙未开启或未授权": "蓝牙未开启或未授权",
|
||||
"请确保手机蓝牙已开启,并授权App使用蓝牙权限。": "请确保手机蓝牙已开启,并授权App使用蓝牙权限。",
|
||||
"检查手机设置中的蓝牙权限,确保已授权给App。": "检查手机设置中的蓝牙权限,确保已授权给App。",
|
||||
"未重置锁": "未重置锁",
|
||||
"请先将锁重置为出厂状态,重置方法详见上一步指引。": "请先将锁重置为出厂状态,重置方法详见上一步指引。",
|
||||
"找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。": "找到锁上的重置按钮,长按直到听到\"滴\"声或看到指示灯闪烁。",
|
||||
"锁电量过低": "锁电量过低",
|
||||
"锁电量过低可能导致无法正常连接和添加。": "锁电量过低可能导致无法正常连接和添加。",
|
||||
"请更换电池后重试。": "请更换电池后重试。",
|
||||
"距离过远": "距离过远",
|
||||
"请确保手机与锁的距离在有效范围内。": "请确保手机与锁的距离在有效范围内。",
|
||||
"将手机靠近锁,距离保持在1米以内。": "将手机靠近锁,距离保持在1米以内。",
|
||||
"锁已被其他用户添加": "锁已被其他用户添加",
|
||||
"如果锁已被其他用户添加,需要先解除绑定。": "如果锁已被其他用户添加,需要先解除绑定。",
|
||||
"请联系锁的管理员解除绑定,或使用管理员权限重置锁。": "请联系锁的管理员解除绑定,或使用管理员权限重置锁。",
|
||||
"使用小程序": "使用小程序",
|
||||
"如果App无法正常添加锁,可以尝试使用小程序版本。": "如果App无法正常添加锁,可以尝试使用小程序版本。",
|
||||
"打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。": "打开微信,搜索“星星锁Lite”小程序,尝试通过小程序添加锁。",
|
||||
"尝试升级固件": "尝试升级固件",
|
||||
"升级说明": "升级说明",
|
||||
"如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:": "如果以上方法都无法解决问题,可以尝试升级锁的固件。升级前请确保:",
|
||||
"升级注意事项": "锁电量充足\n• 已获取正确的固件文件\n• 升级过程中不要断开连接",
|
||||
"找不到锁?点此查看。": "找不到锁?点此查看。",
|
||||
"常见问题": "常见问题",
|
||||
"固件升级": "固件升级",
|
||||
"固件升级描述": "请点击右下角\"点击返回设备配对\"按钮返回设备配对页面进行固件升级",
|
||||
"邮箱地址必须包含@符号": "邮箱地址必须包含@符号",
|
||||
"手机号只能包含数字": "手机号只能包含数字",
|
||||
"重置方法请查阅设备说明书": "重置方法请查阅设备说明书",
|
||||
"我已重置,继续添加": "我已重置,继续添加",
|
||||
"添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。": "添加设备前,请确保设备已重置为出厂状态。重置后的设备将清除所有用户数据,包括指纹、密码、卡片等信息。"
|
||||
}
|
||||
"第三方平台设置": "第三方平台设置",
|
||||
"涂鸦智能": "涂鸦智能",
|
||||
"锁语音包设置": "锁语音包设置",
|
||||
"语音包设置": "语音包设置",
|
||||
"(中国台湾)": "(中国台湾)",
|
||||
"男声": "男声",
|
||||
"女声": "女声",
|
||||
"您的图像和视频数据仅保留": "您的图像和视频数据仅保留",
|
||||
"后图像和视频数据将会失效,开通": "后图像和视频数据将会失效,开通",
|
||||
"云存会员": "云存会员",
|
||||
"服务,图像视频信息随心存!": "服务,图像视频信息随心存!",
|
||||
"图像": "图像",
|
||||
"视频": "视频",
|
||||
"当前国家不支持手机验证码注册,请使用邮箱进行注册": "当前国家不支持手机验证码注册,请使用邮箱进行注册",
|
||||
"注:":"注:",
|
||||
"必需在开始时间24小时内使用一次,否则将失效": "必需在开始时间24小时内使用一次,否则将失效",
|
||||
"这是单次密码,只能使用一次": "这是单次密码,只能使用一次",
|
||||
"您好": "您好",
|
||||
"您的开门密码是": "您的开门密码是",
|
||||
"开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标": "开锁时,先激活锁键盘,再输入密码,以#号结束,#号键在键盘右下角,有可能是其他图标"
|
||||
}
|
||||
560
langAi.py
Normal file
@ -0,0 +1,560 @@
|
||||
#!/usr/bin/python3
|
||||
import base64
|
||||
import datetime
|
||||
import hashlib
|
||||
import hmac
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
import urllib.parse
|
||||
from typing import Dict
|
||||
|
||||
import requests
|
||||
|
||||
# 运行格式方式:python langAi.py youdao 备注:aliyun 阿里云 youdao 有道翻译
|
||||
|
||||
# 语言文件路径 /Users/mac/www/app-starlock/lan
|
||||
path = "./lan2/"
|
||||
# 原语言
|
||||
SOURCE_LANG = 'lan_en'
|
||||
|
||||
# 过滤不翻译的语言
|
||||
FILTER_LANG = ['lan_zh', 'lan_en', 'lan_keys']
|
||||
|
||||
# 阿里云语言映射
|
||||
ALIYUN_LANG_MAP = {
|
||||
'lan_zh': {
|
||||
'name': '中文',
|
||||
'code': 'zh'
|
||||
},
|
||||
'lan_tw': {
|
||||
'name': '繁体中文',
|
||||
'code': 'zh-tw',
|
||||
},
|
||||
'lan_en': {
|
||||
'name': '英文',
|
||||
'code': 'en',
|
||||
},
|
||||
'lan_fr': {
|
||||
'name': '法文',
|
||||
'code': 'fr',
|
||||
},
|
||||
'lan_ru': {
|
||||
'name': '俄文',
|
||||
'code': 'ru',
|
||||
},
|
||||
'lan_de': {
|
||||
'name': '德文',
|
||||
'code': 'de',
|
||||
},
|
||||
'lan_ja': {
|
||||
'name': '日文',
|
||||
'code': 'ja',
|
||||
},
|
||||
'lan_ko': {
|
||||
'name': '韩文',
|
||||
'code': 'ko',
|
||||
},
|
||||
'lan_it': {
|
||||
'name': '意大利文',
|
||||
'code': 'it',
|
||||
},
|
||||
'lan_pt': {
|
||||
'name': '葡萄牙文',
|
||||
'code': 'pt',
|
||||
},
|
||||
'lan_es': {
|
||||
'name': '西班牙文',
|
||||
'code': 'es',
|
||||
},
|
||||
'lan_ar': {
|
||||
'name': '阿拉伯文',
|
||||
'code': 'ar',
|
||||
},
|
||||
'lan_vi': {
|
||||
'name': '越南文',
|
||||
'code': 'vi',
|
||||
},
|
||||
'lan_ms': {
|
||||
'name': '马来文',
|
||||
'code': 'ms',
|
||||
},
|
||||
'lan_nl': {
|
||||
'name': '荷兰文',
|
||||
'code': 'nl',
|
||||
},
|
||||
'lan_ro': {
|
||||
'name': '罗马尼亚文',
|
||||
'code': 'ro',
|
||||
},
|
||||
'lan_lt': {
|
||||
'name': '立陶宛文',
|
||||
'code': 'lt',
|
||||
},
|
||||
'lan_sv': {
|
||||
'name': '瑞典文',
|
||||
'code': 'sv',
|
||||
},
|
||||
'lan_et': {
|
||||
'name': '爱沙尼亚文',
|
||||
'code': 'et',
|
||||
},
|
||||
'lan_pl': {
|
||||
'name': '波兰文',
|
||||
'code': 'pl',
|
||||
},
|
||||
'lan_sk': {
|
||||
'name': '斯洛伐克文',
|
||||
'code': 'sk',
|
||||
},
|
||||
'lan_cs': {
|
||||
'name': '捷克文',
|
||||
'code': 'cs',
|
||||
},
|
||||
'lan_el': {
|
||||
'name': '希腊文',
|
||||
'code': 'el',
|
||||
},
|
||||
'lan_he': {
|
||||
'name': '希伯来文',
|
||||
'code': 'he',
|
||||
},
|
||||
'lan_tr': {
|
||||
'name': '土耳其文',
|
||||
'code': 'tr',
|
||||
},
|
||||
'lan_hu': {
|
||||
'name': '匈牙利文',
|
||||
'code': 'hu',
|
||||
},
|
||||
'lan_bg': {
|
||||
'name': '保加利亚文',
|
||||
'code': 'bg',
|
||||
},
|
||||
'lan_kk': {
|
||||
'name': '哈萨克文',
|
||||
'code': 'kk',
|
||||
},
|
||||
'lan_bn': {
|
||||
'name': '孟加拉文',
|
||||
'code': 'bn',
|
||||
},
|
||||
'lan_hr': {
|
||||
'name': '克罗地亚文',
|
||||
'code': 'hbs',
|
||||
},
|
||||
'lan_th': {
|
||||
'name': '泰文',
|
||||
'code': 'th',
|
||||
},
|
||||
'lan_id': {
|
||||
'name': '印尼文',
|
||||
'code': 'id',
|
||||
},
|
||||
'lan_fi': {
|
||||
'name': '芬兰文',
|
||||
'code': 'fi',
|
||||
},
|
||||
'lan_da': {
|
||||
'name': '丹麦文',
|
||||
'code': 'da',
|
||||
},
|
||||
}
|
||||
|
||||
# 有道语言映射
|
||||
YOUDAO_LANG_MAP = {
|
||||
'lan_zh': {
|
||||
'name': '中文',
|
||||
'code': 'zh-CHS',
|
||||
},
|
||||
'lan_tw': {
|
||||
'name': '繁体中文(中国台湾)',
|
||||
'code': 'zh-CHT',
|
||||
},
|
||||
'lan_hk': {
|
||||
'name': '繁体中文(中国香港)',
|
||||
'code': 'yue',
|
||||
},
|
||||
'lan_en': {
|
||||
'name': '英文',
|
||||
'code': 'en'
|
||||
},
|
||||
'lan_fr': {
|
||||
'name': '法文',
|
||||
'code': 'fr'
|
||||
},
|
||||
'lan_ru': {
|
||||
'name': '俄文',
|
||||
'code': 'ru'
|
||||
},
|
||||
'lan_de': {
|
||||
'name': '德文',
|
||||
'code': 'de'
|
||||
},
|
||||
'lan_ja': {
|
||||
'name': '日文',
|
||||
'code': 'ja'
|
||||
},
|
||||
'lan_ko': {
|
||||
'name': '韩文',
|
||||
'code': 'ko'
|
||||
},
|
||||
'lan_it': {
|
||||
'name': '意大利文',
|
||||
'code': 'it'
|
||||
},
|
||||
'lan_pt': {
|
||||
'name': '葡萄牙文',
|
||||
'code': 'pt'
|
||||
},
|
||||
'lan_es': {
|
||||
'name': '西班牙文',
|
||||
'code': 'es'
|
||||
},
|
||||
'lan_ar': {
|
||||
'name': '阿拉伯文',
|
||||
'code': 'ar'
|
||||
},
|
||||
'lan_vi': {
|
||||
'name': '越南文',
|
||||
'code': 'vi'
|
||||
},
|
||||
'lan_ms': {
|
||||
'name': '马来文',
|
||||
'code': 'ms'
|
||||
},
|
||||
'lan_nl': {
|
||||
'name': '荷兰文',
|
||||
'code': 'nl'
|
||||
},
|
||||
'lan_ro': {
|
||||
'name': '罗马尼亚文',
|
||||
'code': 'ro'
|
||||
},
|
||||
'lan_lt': {
|
||||
'name': '立陶宛文',
|
||||
'code': 'lt'
|
||||
},
|
||||
'lan_sv': {
|
||||
'name': '瑞典文',
|
||||
'code': 'sv'
|
||||
},
|
||||
'lan_et': {
|
||||
'name': '爱沙尼亚文',
|
||||
'code': 'et'
|
||||
},
|
||||
'lan_pl': {
|
||||
'name': '波兰文',
|
||||
'code': 'pl'
|
||||
},
|
||||
'lan_sk': {
|
||||
'name': '斯洛伐克文',
|
||||
'code': 'sk'
|
||||
},
|
||||
'lan_cs': {
|
||||
'name': '捷克文',
|
||||
'code': 'cs'
|
||||
},
|
||||
'lan_el': {
|
||||
'name': '希腊文',
|
||||
'code': 'el'
|
||||
},
|
||||
'lan_he': {
|
||||
'name': '希伯来文',
|
||||
'code': 'he'
|
||||
},
|
||||
'lan_tr': {
|
||||
'name': '土耳其文',
|
||||
'code': 'tr'
|
||||
},
|
||||
'lan_hu': {
|
||||
'name': '匈牙利文',
|
||||
'code': 'hu'
|
||||
},
|
||||
'lan_bg': {
|
||||
'name': '保加利亚文',
|
||||
'code': 'bg'
|
||||
},
|
||||
'lan_kk': {
|
||||
'name': '哈萨克文',
|
||||
'code': 'kk'
|
||||
},
|
||||
'lan_bn': {
|
||||
'name': '孟加拉文',
|
||||
'code': 'bn'
|
||||
},
|
||||
'lan_hr': {
|
||||
'name': '克罗地亚文',
|
||||
'code': 'hr'
|
||||
},
|
||||
'lan_th': {
|
||||
'name': '泰文',
|
||||
'code': 'th'
|
||||
},
|
||||
'lan_id': {
|
||||
'name': '印尼文',
|
||||
'code': 'id'
|
||||
},
|
||||
'lan_fi': {
|
||||
'name': '芬兰文',
|
||||
'code': 'fi'
|
||||
},
|
||||
'lan_da': {
|
||||
'name': '丹麦文',
|
||||
'code': 'da'
|
||||
},
|
||||
'lan_uk': {
|
||||
'name': '乌克兰文',
|
||||
'code': 'uk'
|
||||
},
|
||||
'lan_sr_cyrl': {
|
||||
'name': '塞尔维亚语(西里尔文)',
|
||||
'code': 'sr-Cyrl'
|
||||
},
|
||||
'lan_hy': {
|
||||
'name': '亚美尼亚语',
|
||||
'code': 'hy'
|
||||
},
|
||||
'lan_ka': {
|
||||
'name': '格鲁吉亚语',
|
||||
'code': 'ka'
|
||||
},
|
||||
}
|
||||
|
||||
# =============================== 以下为固定代码,非必要请勿修改 ===============================
|
||||
|
||||
# 阿里云配置
|
||||
ALIYUN_CONFIG = {
|
||||
'domain': 'mt.cn-hangzhou.aliyuncs.com/api/translate/web/ecommerce',
|
||||
'accessKeyId': 'LTAI5tFke4yGaY94ondXkmHn',
|
||||
'accessKeySecret': '08zPw8BoRqfqlKDTMX65k7gfeER33x',
|
||||
}
|
||||
|
||||
# 有道翻译配置
|
||||
YOUDAO_CONFIG = {
|
||||
'domain': 'https://openapi.youdao.com/api',
|
||||
'appKey': '3e4923bad470f8d2',
|
||||
'appSecret': '5thWwZ7D0RIzT0aquCF6NKmaiakAyhqr'
|
||||
}
|
||||
|
||||
CHANNELS = ['aliyun', 'youdao']
|
||||
|
||||
if len(sys.argv) < 2:
|
||||
print('Usage: python langAi.py aliLang')
|
||||
sys.exit(1)
|
||||
|
||||
# 检测传入参数是否合法
|
||||
if sys.argv[1] not in CHANNELS:
|
||||
print('channel must be one of {}'.format(CHANNELS))
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
# 主函数
|
||||
def main(channel):
|
||||
en_path = path + SOURCE_LANG + ".json"
|
||||
# 判断文件是否存在
|
||||
if not os.path.exists(en_path):
|
||||
print('文件不存在:', en_path)
|
||||
sys.exit(1)
|
||||
|
||||
# 读取文件内容
|
||||
en_us_content = read_file(en_path)
|
||||
|
||||
# 把json转数组
|
||||
en_us_data = json.loads(en_us_content)
|
||||
|
||||
# 语言列表 如果channel为aliyun赋值ALIYUN_LANG_MAP,否则赋值YOUDAO_LANG_MAP
|
||||
lang_map = ALIYUN_LANG_MAP if channel == 'aliyun' else YOUDAO_LANG_MAP
|
||||
|
||||
# 遍历ALIYUN_LANG_MAP
|
||||
for key in lang_map:
|
||||
# 过滤掉不翻译的语言
|
||||
if key in FILTER_LANG:
|
||||
continue
|
||||
|
||||
lang_path = path + key + ".json"
|
||||
# 验证文件是否存在,如果不存在即创建
|
||||
if not os.path.exists(lang_path):
|
||||
create_file(lang_path)
|
||||
|
||||
data_content = read_file(lang_path)
|
||||
if data_content.strip(): # Check if the file is not empty
|
||||
datas = json.loads(data_content)
|
||||
else:
|
||||
datas = {}
|
||||
|
||||
total = len(en_us_data) # 总数
|
||||
current = 0 # 当前数
|
||||
|
||||
for en_us_key in en_us_data:
|
||||
current += 1
|
||||
print('语言:%s-%s 正在翻译处理第%d/%d批数据' % (key,lang_map[key]['code'], current, total))
|
||||
# 过滤已存在的key
|
||||
if en_us_key in datas:
|
||||
continue
|
||||
|
||||
# 异常处理
|
||||
try:
|
||||
datas[en_us_key] = translation(channel, lang_map[SOURCE_LANG]['code'], lang_map[key]['code'],
|
||||
en_us_data[en_us_key])
|
||||
except Exception as e:
|
||||
print('翻译异常:', e.args, 'key:', en_us_key, 'content:', en_us_data[en_us_key])
|
||||
continue
|
||||
|
||||
# 写入文件
|
||||
with open(lang_path, 'w', encoding='utf-8') as file:
|
||||
json.dump(datas, file, ensure_ascii=False, indent=4)
|
||||
|
||||
|
||||
# 翻译
|
||||
def translation(channel, source_language, target_language, text):
|
||||
translation_text = ''
|
||||
if channel == 'aliyun':
|
||||
translation_text = aliyun_translation(source_language, target_language, text)
|
||||
elif channel == 'youdao':
|
||||
translation_text = youdao_translation(source_language, target_language, text)
|
||||
# 延迟2秒
|
||||
time.sleep(2)
|
||||
|
||||
return translation_text
|
||||
|
||||
|
||||
# 有道翻译
|
||||
def youdao_translation(source_language, target_language, text):
|
||||
post_body = {
|
||||
'q': text,
|
||||
'from': source_language,
|
||||
'to': target_language,
|
||||
'appKey': YOUDAO_CONFIG['appKey'],
|
||||
'salt': hashlib.md5(os.urandom(32)).hexdigest(), # 随机字符串,可使用UUID进行生产
|
||||
'signType': 'v3',
|
||||
'curtime': str(int(datetime.datetime.now().timestamp())),
|
||||
}
|
||||
|
||||
# 签名生成方法如下:
|
||||
# signType=v3;
|
||||
# sign=sha256(应用ID+input+salt+curtime+应用密钥);
|
||||
# 其中,input的计算方式为:input=q前10个字符 + q长度 + q后10个字符(当q长度大于20)或 input=q字符串(当q长度小于等于20);
|
||||
|
||||
input_text = post_body['q']
|
||||
if len(input_text) > 20:
|
||||
input_text = input_text[:10] + str(len(input_text)) + input_text[-10:]
|
||||
post_body['input'] = input_text
|
||||
|
||||
sign = hashlib.sha256((YOUDAO_CONFIG['appKey'] + input_text + post_body['salt'] + post_body['curtime'] +
|
||||
YOUDAO_CONFIG['appSecret']).encode('utf-8')).hexdigest()
|
||||
|
||||
post_body['sign'] = sign
|
||||
|
||||
req = fetch_content(YOUDAO_CONFIG['domain'], 'POST', post_body)
|
||||
req_json = json.loads(req)
|
||||
try:
|
||||
return req_json['translation'][0]
|
||||
except KeyError as e:
|
||||
print(f"[翻译异常][KeyError] 目标语言: {target_language}, key: {text}, API返回: {req_json}, 请求参数: {post_body}")
|
||||
raise
|
||||
except Exception as e:
|
||||
print(f"[翻译异常][OtherError] 目标语言: {target_language}, key: {text}, API返回: {req_json}, 请求参数: {post_body}, 异常: {e}")
|
||||
raise
|
||||
|
||||
|
||||
# 阿里云翻译
|
||||
def aliyun_translation(source_language, target_language, text):
|
||||
headers = {
|
||||
'Version': '2018-10-12',
|
||||
}
|
||||
post_body = {
|
||||
"FormatType": "text",
|
||||
"SourceLanguage": source_language,
|
||||
"TargetLanguage": target_language,
|
||||
"SourceText": text,
|
||||
"Ccene": "general",
|
||||
'Action': 'TranslateGeneral',
|
||||
}
|
||||
req = aliyun_request(ALIYUN_CONFIG['domain'], {**post_body, **headers})
|
||||
if req['Code'] == '200':
|
||||
return req['Data']['Translated']
|
||||
else:
|
||||
raise Exception(req)
|
||||
|
||||
|
||||
def aliyun_request(domain: str, params: Dict, security: bool = True,
|
||||
method: str = 'POST') -> Dict:
|
||||
# Add common parameters
|
||||
api_params = {
|
||||
"SignatureMethod": "HMAC-SHA1",
|
||||
"SignatureNonce": hashlib.md5(os.urandom(32)).hexdigest(),
|
||||
"SignatureVersion": "1.0",
|
||||
"AccessKeyId": ALIYUN_CONFIG['accessKeyId'],
|
||||
"Timestamp": datetime.datetime.utcnow().isoformat("T"),
|
||||
"Format": "JSON",
|
||||
}
|
||||
api_params.update(params)
|
||||
|
||||
# Sort parameters by key
|
||||
sorted_params = sorted(api_params.items(), key=lambda x: x[0])
|
||||
|
||||
sorted_query_string_tmp = ""
|
||||
for key, value in sorted(sorted_params):
|
||||
sorted_query_string_tmp += "&" + aliyun_encode(key) + "=" + aliyun_encode(value)
|
||||
|
||||
string_to_sign = "{}&%2F&{}".format(method, aliyun_encode(sorted_query_string_tmp[1:]))
|
||||
|
||||
# Calculate the signature
|
||||
signature = base64.b64encode(
|
||||
hmac.new((ALIYUN_CONFIG['accessKeySecret'] + "&").encode('utf-8'), string_to_sign.encode('utf-8'),
|
||||
hashlib.sha1).digest()).decode(
|
||||
'utf-8')
|
||||
|
||||
# Add the signature to the parameters
|
||||
api_params['Signature'] = signature
|
||||
|
||||
# Send the request
|
||||
url = ("https" if security else "http") + "://" + domain + "/"
|
||||
if method == 'POST':
|
||||
response = requests.post(url, data=api_params)
|
||||
else:
|
||||
response = requests.get(url, params=api_params)
|
||||
return response.json()
|
||||
|
||||
|
||||
# 阿里云编码
|
||||
def aliyun_encode(value):
|
||||
res = urllib.parse.quote_plus(value)
|
||||
res = res.replace("+", "%20")
|
||||
res = res.replace("*", "%2A")
|
||||
res = res.replace("%7E", "~")
|
||||
return res
|
||||
|
||||
|
||||
def fetch_content(url, method, body):
|
||||
headers = {"x-sdk-client": "python/2.0.0"}
|
||||
|
||||
if method == 'POST':
|
||||
response = requests.post(url, data=body, headers=headers)
|
||||
else:
|
||||
response = requests.get(url, params=body, headers=headers)
|
||||
|
||||
if response.status_code != 200:
|
||||
raise Exception(f"Request failed with status {response.status_code}")
|
||||
|
||||
return response.text
|
||||
|
||||
|
||||
# 创建文件
|
||||
def create_file(file_path):
|
||||
with open(file_path, 'w') as file:
|
||||
pass
|
||||
|
||||
|
||||
# 读取文件内容
|
||||
def read_file(file_path):
|
||||
with open(file_path, 'r', encoding='utf-8') as file:
|
||||
content = file.read()
|
||||
return content
|
||||
|
||||
|
||||
# translation_text = youdao_translation('en', 'de', 'Your application <:name> has been approved.')
|
||||
# print(translation_text)
|
||||
main(sys.argv[1])
|
||||
348
langAzure.py
Normal file
@ -0,0 +1,348 @@
|
||||
#!/usr/bin/python3
|
||||
import datetime
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
import time
|
||||
from typing import Dict
|
||||
|
||||
import requests
|
||||
|
||||
# 运行格式方式一:python langAzure.py
|
||||
# 运行格式方式二:python3 langAzure.py
|
||||
|
||||
# 语言文件路径
|
||||
path = "./resources/lang/"
|
||||
# 原语言
|
||||
SOURCE_LANG = 'en_US'
|
||||
|
||||
# 过滤不翻译的语言
|
||||
FILTER_LANG = ['zh_CN', 'en_US']
|
||||
|
||||
# Azure翻译语言映射,基于: https://docs.azure.cn/zh-cn/ai-services/translator/text-translation/reference/v3/translate
|
||||
# 语言代码:https://api.translator.azure.cn/languages?api-version=3.0&scope=translation
|
||||
AZURE_LANG_MAP = {
|
||||
# 'zh_CN': {
|
||||
# 'name': '简体中文',
|
||||
# 'code': 'zh-Hans'
|
||||
# },
|
||||
# 'zh_TW': {
|
||||
# 'name': '繁体中文',
|
||||
# 'code': 'zh-Hant',
|
||||
# },
|
||||
# 'zh_HK': {
|
||||
# 'name': '粤语(繁体)',
|
||||
# 'code': 'yue',
|
||||
# },
|
||||
# 'en_US': {
|
||||
# 'name': '英文',
|
||||
# 'code': 'en',
|
||||
# },
|
||||
# 'fr_FR': {
|
||||
# 'name': '法语',
|
||||
# 'code': 'fr',
|
||||
# },
|
||||
# 'ru_RU': {
|
||||
# 'name': '俄语',
|
||||
# 'code': 'ru',
|
||||
# },
|
||||
# 'de_DE': {
|
||||
# 'name': '德语',
|
||||
# 'code': 'de',
|
||||
# },
|
||||
# 'ja_JP': {
|
||||
# 'name': '日语',
|
||||
# 'code': 'ja',
|
||||
# },
|
||||
# 'ko_KR': {
|
||||
# 'name': '韩语',
|
||||
# 'code': 'ko',
|
||||
# },
|
||||
# 'it_IT': {
|
||||
# 'name': '意大利语',
|
||||
# 'code': 'it',
|
||||
# },
|
||||
# 'pt_PT': {
|
||||
# 'name': '葡萄牙语',
|
||||
# 'code': 'pt-PT',
|
||||
# },
|
||||
# 'es_ES': {
|
||||
# 'name': '西班牙语',
|
||||
# 'code': 'es',
|
||||
# },
|
||||
# 'ar_SA': {
|
||||
# 'name': '阿拉伯语',
|
||||
# 'code': 'ar',
|
||||
# },
|
||||
# 'vi_VN': {
|
||||
# 'name': '越南语',
|
||||
# 'code': 'vi',
|
||||
# },
|
||||
# 'ms_MY': {
|
||||
# 'name': '马来语',
|
||||
# 'code': 'ms',
|
||||
# },
|
||||
# 'nl_NL': {
|
||||
# 'name': '荷兰语',
|
||||
# 'code': 'nl',
|
||||
# },
|
||||
# 'ro_RO': {
|
||||
# 'name': '罗马尼亚语',
|
||||
# 'code': 'ro',
|
||||
# },
|
||||
# 'lt_LT': {
|
||||
# 'name': '立陶宛语',
|
||||
# 'code': 'lt',
|
||||
# },
|
||||
# 'sv_SE': {
|
||||
# 'name': '瑞典语',
|
||||
# 'code': 'sv',
|
||||
# },
|
||||
# 'et_EE': {
|
||||
# 'name': '爱沙尼亚语',
|
||||
# 'code': 'et',
|
||||
# },
|
||||
# 'pl_PL': {
|
||||
# 'name': '波兰语',
|
||||
# 'code': 'pl',
|
||||
# },
|
||||
# 'sk_SK': {
|
||||
# 'name': '斯洛伐克语',
|
||||
# 'code': 'sk',
|
||||
# },
|
||||
# 'cs_CZ': {
|
||||
# 'name': '捷克语',
|
||||
# 'code': 'cs',
|
||||
# },
|
||||
# 'el_GR': {
|
||||
# 'name': '希腊语',
|
||||
# 'code': 'el',
|
||||
# },
|
||||
# 'he_IL': {
|
||||
# 'name': '希伯来语',
|
||||
# 'code': 'he',
|
||||
# },
|
||||
# 'tr_TR': {
|
||||
# 'name': '土耳其语',
|
||||
# 'code': 'tr',
|
||||
# },
|
||||
# 'hu_HU': {
|
||||
# 'name': '匈牙利语',
|
||||
# 'code': 'hu',
|
||||
# },
|
||||
# 'bg_BG': {
|
||||
# 'name': '保加利亚语',
|
||||
# 'code': 'bg',
|
||||
# },
|
||||
# 'kk_KZ': {
|
||||
# 'name': '哈萨克语',
|
||||
# 'code': 'kk',
|
||||
# },
|
||||
# 'bn_BD': {
|
||||
# 'name': '孟加拉语',
|
||||
# 'code': 'bn',
|
||||
# },
|
||||
# 'hr_HR': {
|
||||
# 'name': '克罗地亚语',
|
||||
# 'code': 'hr',
|
||||
# },
|
||||
# 'th_TH': {
|
||||
# 'name': '泰语',
|
||||
# 'code': 'th',
|
||||
# },
|
||||
# 'id_ID': {
|
||||
# 'name': '印尼语',
|
||||
# 'code': 'id',
|
||||
# },
|
||||
# 'fi_FI': {
|
||||
# 'name': '芬兰语',
|
||||
# 'code': 'fi',
|
||||
# },
|
||||
# 'da_DK': {
|
||||
# 'name': '丹麦语',
|
||||
# 'code': 'da',
|
||||
# },
|
||||
# 'uk_UA': {
|
||||
# 'name': '乌克兰语',
|
||||
# 'code': 'uk',
|
||||
# },
|
||||
# 'sr_RS': {
|
||||
# 'name': '塞尔维亚语(西里尔)',
|
||||
# 'code': 'sr-Cyrl',
|
||||
# },
|
||||
# 'hi_IN': {
|
||||
# 'name': '印地语',
|
||||
# 'code': 'hi',
|
||||
# },
|
||||
# 'ur_PK': {
|
||||
# 'name': '乌尔都语',
|
||||
# 'code': 'ur',
|
||||
# },
|
||||
# 'hy_AM': {
|
||||
# 'name': '亚美尼亚语',
|
||||
# 'code': 'hy',
|
||||
# },
|
||||
# 'ka_GE': {
|
||||
# 'name': '格鲁吉亚语',
|
||||
# 'code': 'ka',
|
||||
# },
|
||||
'pt_BR': {
|
||||
'name': '葡萄牙语 (巴西)',
|
||||
'code': 'pt',
|
||||
},
|
||||
|
||||
}
|
||||
|
||||
# =============================== 以下为固定代码,非必要请勿修改 ===============================
|
||||
|
||||
# Azure配置
|
||||
AZURE_CONFIG = {
|
||||
'api_url': 'https://api.cognitive.microsofttranslator.com',
|
||||
'subscription_key': '5UGFXbyyyIlwtvFbl5HUeWeHffW9aKLNIiZlqWsRZuLaFSmXfxfzJQQJ99BGAC3pKaRXJ3w3AAAbACOGpL8p', # 替换为您的订阅密钥
|
||||
'region': 'eastasia', # 替换为您的区域,例如 'eastasia'
|
||||
}
|
||||
|
||||
def main():
|
||||
en_path = path + SOURCE_LANG + ".json"
|
||||
# 判断文件是否存在
|
||||
if not os.path.exists(en_path):
|
||||
print('文件不存在:', en_path)
|
||||
sys.exit(1)
|
||||
|
||||
# 读取文件内容
|
||||
en_us_content = read_file(en_path)
|
||||
|
||||
# 把json转数组
|
||||
en_us_data = json.loads(en_us_content)
|
||||
|
||||
# 遍历AZURE_LANG_MAP
|
||||
for key in AZURE_LANG_MAP:
|
||||
# 过滤掉不翻译的语言
|
||||
if key in FILTER_LANG:
|
||||
continue
|
||||
|
||||
lang_path = path + key + ".json"
|
||||
# 验证文件是否存在,如果不存在即创建
|
||||
if not os.path.exists(lang_path):
|
||||
create_file(lang_path)
|
||||
|
||||
data_content = read_file(lang_path)
|
||||
if data_content.strip(): # Check if the file is not empty
|
||||
datas = json.loads(data_content)
|
||||
else:
|
||||
datas = {}
|
||||
|
||||
total = len(en_us_data) # 总数
|
||||
current = 0 # 当前数
|
||||
|
||||
for en_us_key in en_us_data:
|
||||
current += 1
|
||||
|
||||
# 检查key是否包含中文
|
||||
has_chinese = bool(re.search(r'[\u4e00-\u9fff]', en_us_key))
|
||||
text_to_translate = en_us_key if has_chinese else en_us_data[en_us_key]
|
||||
|
||||
print('语言:%s 正在翻译处理第%d/%d批数据 是否中文:%s' % (key, current, total, has_chinese))
|
||||
# 过滤已存在的key
|
||||
if en_us_key in datas:
|
||||
continue
|
||||
|
||||
# 异常处理
|
||||
try:
|
||||
if has_chinese:
|
||||
# 从中文翻译到目标语言
|
||||
datas[en_us_key] = azure_translation('zh-Hans', AZURE_LANG_MAP[key]['code'], text_to_translate)
|
||||
else:
|
||||
# 从英文翻译到目标语言
|
||||
datas[en_us_key] = azure_translation(AZURE_LANG_MAP[SOURCE_LANG]['code'], AZURE_LANG_MAP[key]['code'], text_to_translate)
|
||||
|
||||
# 延迟1秒避免API限制
|
||||
#time.sleep(1)
|
||||
|
||||
except Exception as e:
|
||||
print('翻译异常:', e.args, 'key:', en_us_key, 'content:', en_us_data[en_us_key])
|
||||
continue
|
||||
|
||||
# 写入文件
|
||||
with open(lang_path, 'w', encoding='utf-8') as file:
|
||||
json.dump(datas, file, ensure_ascii=False, indent=4)
|
||||
|
||||
|
||||
def azure_translation(source_language, target_language, text):
|
||||
"""
|
||||
使用Azure翻译API进行文本翻译
|
||||
|
||||
Args:
|
||||
source_language: 源语言代码
|
||||
target_language: 目标语言代码
|
||||
text: 要翻译的文本
|
||||
|
||||
Returns:
|
||||
翻译后的文本
|
||||
"""
|
||||
# 构建API端点
|
||||
endpoint = f"{AZURE_CONFIG['api_url']}/translate"
|
||||
|
||||
# 设置参数
|
||||
params = {
|
||||
'api-version': '3.0',
|
||||
'from': source_language,
|
||||
'to': target_language
|
||||
}
|
||||
|
||||
# 设置请求头
|
||||
headers = {
|
||||
'Ocp-Apim-Subscription-Key': AZURE_CONFIG['subscription_key'],
|
||||
'Ocp-Apim-Subscription-Region': AZURE_CONFIG['region'],
|
||||
'Content-type': 'application/json',
|
||||
'X-ClientTraceId': str(datetime.datetime.now().timestamp())
|
||||
}
|
||||
|
||||
# 构建请求体
|
||||
body = [{'text': text}]
|
||||
|
||||
try:
|
||||
# 发送请求
|
||||
response = requests.post(endpoint, params=params, headers=headers, json=body)
|
||||
|
||||
# 检查响应状态
|
||||
if response.status_code != 200:
|
||||
raise Exception(f"Azure翻译API请求失败,状态码:{response.status_code},响应:{response.text}")
|
||||
|
||||
# 解析响应
|
||||
result = response.json()
|
||||
|
||||
# 提取翻译结果
|
||||
if result and len(result) > 0 and 'translations' in result[0]:
|
||||
return result[0]['translations'][0]['text']
|
||||
else:
|
||||
raise Exception(f"Azure翻译API响应格式异常:{result}")
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
raise Exception(f"Azure翻译API网络请求异常:{str(e)}")
|
||||
except json.JSONDecodeError as e:
|
||||
raise Exception(f"Azure翻译API响应JSON解析异常:{str(e)}")
|
||||
|
||||
|
||||
# 创建文件
|
||||
def create_file(file_path):
|
||||
with open(file_path, 'w') as file:
|
||||
pass
|
||||
|
||||
|
||||
# 读取文件内容
|
||||
def read_file(file_path):
|
||||
with open(file_path, 'r', encoding='utf-8') as file:
|
||||
content = file.read()
|
||||
return content
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
# 检查配置
|
||||
if AZURE_CONFIG['subscription_key'] == 'YOUR_SUBSCRIPTION_KEY':
|
||||
print("错误:请先在脚本中配置您的Azure订阅密钥")
|
||||
print("请修改AZURE_CONFIG中的subscription_key和region")
|
||||
sys.exit(1)
|
||||
|
||||
main()
|
||||
@ -71,21 +71,45 @@ class FirebaseHelper {
|
||||
}
|
||||
|
||||
Future<void> initSdk() async {
|
||||
FirebaseAnalytics.instance.setAnalyticsCollectionEnabled(true);
|
||||
const bool isProductVmMode = bool.fromEnvironment('dart.vm.product');
|
||||
if (F.isProductionEnv &&
|
||||
isProductVmMode &&
|
||||
defaultTargetPlatform == TargetPlatform.android) {
|
||||
FirebaseAnalytics.instance.setAnalyticsCollectionEnabled(true);
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> login(String userId) async {
|
||||
FirebaseAnalytics.instance.setUserId(id: userId);
|
||||
const bool isProductVmMode = bool.fromEnvironment('dart.vm.product');
|
||||
if (F.isProductionEnv &&
|
||||
isProductVmMode &&
|
||||
defaultTargetPlatform == TargetPlatform.android) {
|
||||
FirebaseAnalytics.instance.setUserId(id: userId);
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> trackEvent(
|
||||
String eventName, Map<String, Object>? parameters) async {
|
||||
FirebaseAnalytics.instance
|
||||
.logEvent(name: eventName, parameters: parameters);
|
||||
String eventName,
|
||||
Map<String, Object>? parameters,
|
||||
) async {
|
||||
const bool isProductVmMode = bool.fromEnvironment('dart.vm.product');
|
||||
if (F.isProductionEnv &&
|
||||
isProductVmMode &&
|
||||
defaultTargetPlatform == TargetPlatform.android) {
|
||||
FirebaseAnalytics.instance.logEvent(
|
||||
name: eventName,
|
||||
parameters: parameters,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> logout() async {
|
||||
FirebaseAnalytics.instance.setUserId(id: '');
|
||||
const bool isProductVmMode = bool.fromEnvironment('dart.vm.product');
|
||||
if (F.isProductionEnv &&
|
||||
isProductVmMode &&
|
||||
defaultTargetPlatform == TargetPlatform.android) {
|
||||
FirebaseAnalytics.instance.setUserId(id: '');
|
||||
}
|
||||
}
|
||||
}
|
||||
//</com>
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
//<cn>
|
||||
import 'package:umeng_common_sdk/umeng_common_sdk.dart';
|
||||
// import 'package:umeng_common_sdk/umeng_common_sdk.dart';
|
||||
import '../../flavors.dart';
|
||||
|
||||
class UmengHelper {
|
||||
@ -15,27 +15,24 @@ class UmengHelper {
|
||||
return _instance!;
|
||||
}
|
||||
|
||||
Future<void> initApp() async {
|
||||
|
||||
}
|
||||
Future<void> initApp() async {}
|
||||
|
||||
Future<void> initSdk() async {
|
||||
UmengCommonSdk.initCommon(
|
||||
F.umengKey.androidKey, F.umengKey.iosKey, F.umengKey.channel);
|
||||
UmengCommonSdk.setPageCollectionModeManual();
|
||||
// UmengCommonSdk.initCommon(
|
||||
// F.umengKey.androidKey, F.umengKey.iosKey, F.umengKey.channel);
|
||||
// UmengCommonSdk.setPageCollectionModeManual();
|
||||
}
|
||||
|
||||
Future<void> login(String userId) async {
|
||||
UmengCommonSdk.onProfileSignIn(userId);
|
||||
// UmengCommonSdk.onProfileSignIn(userId);
|
||||
}
|
||||
|
||||
Future<void> trackEvent(
|
||||
String eventName, Map<String, Object> parameters) async {
|
||||
UmengCommonSdk.onEvent(eventName, parameters);
|
||||
Future<void> trackEvent(String eventName, Map<String, Object> parameters) async {
|
||||
// UmengCommonSdk.onEvent(eventName, parameters);
|
||||
}
|
||||
|
||||
Future<void> logout() async {
|
||||
UmengCommonSdk.onProfileSignOff();
|
||||
// UmengCommonSdk.onProfileSignOff();
|
||||
}
|
||||
}
|
||||
//</cn>
|
||||
|
||||
@ -144,7 +144,7 @@ class _MyAppState extends State<MyApp> with WidgetsBindingObserver, BaseWidget {
|
||||
break;
|
||||
case AppLifecycleState.paused:
|
||||
// AppLog.log('App--->进入后台');
|
||||
BlueManage().disconnect();
|
||||
BlueManage.instance.disconnect();
|
||||
break;
|
||||
case AppLifecycleState.resumed:
|
||||
// AppLog.log('App--->进入前台');
|
||||
|
||||
@ -18,6 +18,7 @@ import 'package:star_lock/main/lockDetail/iris/addIris/addIris_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/iris/addIrisType/addIrisTypeManage/addIrisTypeManage_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/iris/irisList/irisList_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/lockDetail/lockDetail_main_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/lockSet/aiAssistant/ai_assistant_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/lockSet/catEyeSet/catEyeCustomMode/catEyeCustomMode_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/lockSet/catEyeSet/catEyeSet/catEyeSet_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/lockSet/catEyeSet/videoSlot/videoSlot_page.dart';
|
||||
@ -26,6 +27,8 @@ import 'package:star_lock/main/lockDetail/lockSet/faceUnlock/faceUnlock_page.dar
|
||||
import 'package:star_lock/main/lockDetail/lockSet/liveVideo/liveVideo_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/lockSet/motorPower/motorPower_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/lockSet/openDoorDirection/openDoorDirection_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/lockSet/speechLanguageSettings/speech_language_settings_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/lockSet/thirdPartyPlatform/third_party_platform_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/messageWarn/addFamily/addFamily_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/messageWarn/lockUser/lockUser_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/messageWarn/msgNotification/coerceOpenDoor/coerceFingerprint/coerceFingerprint_page.dart';
|
||||
@ -41,8 +44,7 @@ import 'package:star_lock/main/lockDetail/palm/palmList/palmList_page.dart';
|
||||
import 'package:star_lock/main/lockDetail/passwordKey/passwordKeyDetailChangeDate/passwordKeyDetailChangeDate_page.dart';
|
||||
import 'package:star_lock/main/lockMian/lockMain/xhj/lockMain_xhj_page.dart';
|
||||
import 'package:star_lock/mine/about/webviewShow_page.dart';
|
||||
import 'package:star_lock/mine/addLock/lockAddFaq/lockAddFaq_page.dart';
|
||||
import 'package:star_lock/mine/addLock/lockResetConfirm/lockResetConfirm_page.dart';
|
||||
import 'package:star_lock/mine/addLock/lock_voice_setting/lock_voice_setting_page.dart';
|
||||
import 'package:star_lock/mine/mine/safeVerify/safeVerify_page.dart';
|
||||
import 'package:star_lock/mine/minePersonInfo/minePersonInfoEmail/mineBindPhoneOrEmail_page.dart';
|
||||
import 'package:star_lock/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_entity.dart';
|
||||
@ -61,7 +63,10 @@ import 'package:star_lock/mine/mineSet/transferSmartLock/selectBranch/selectBran
|
||||
import 'package:star_lock/mine/mineSet/transferSmartLock/transferSmartLockList/transferSmartLock_page.dart';
|
||||
import 'package:star_lock/mine/valueAddedServices/advancedFeaturesWeb/advancedFeaturesWeb_page.dart';
|
||||
import 'package:star_lock/mine/valueAddedServices/advancedFunctionRecord/advancedFunctionRecord_page.dart';
|
||||
import 'package:star_lock/mine/valueAddedServices/cloudStorage/cloud_storage_page.dart';
|
||||
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesRecord/value_added_services_record_page.dart';
|
||||
import 'package:star_lock/talk/starChart/views/guide/permission_guidance_page.dart';
|
||||
import 'package:star_lock/talk/starChart/views/native/talk_view_native_decode_page.dart';
|
||||
import 'package:star_lock/talk/starChart/views/talkView/talk_view_page.dart';
|
||||
import 'package:star_lock/talk/starChart/webView/h264_web_view.dart';
|
||||
|
||||
@ -204,6 +209,7 @@ import 'mine/valueAddedServices/valueAddedServicesRealName/value_added_services_
|
||||
import 'mine/valueAddedServices/valueAddedServicesSMSTemplate/valueAddedServicesAddSMSTemplate/newSMSTemplate_page.dart';
|
||||
import 'mine/valueAddedServices/valueAddedServicesSMSTemplate/valueAddedServicesListSMSTemplate/customSMSTemplateList_page.dart';
|
||||
import 'starLockApplication/starLockApplication.dart';
|
||||
import 'talk/starChart/views/imageTransmission/image_transmission_page.dart';
|
||||
import 'tools/seletKeyCyclicDate/seletKeyCyclicDate_page.dart';
|
||||
|
||||
abstract class Routers {
|
||||
@ -367,6 +373,8 @@ abstract class Routers {
|
||||
'/valueAddedServicesRecordPage'; // 增值服务-记录
|
||||
static const String valueAddedServicesHighFunctionPage =
|
||||
'/ValueAddedServicesHighFunctionPage'; // 增值服务-高级功能
|
||||
static const String valueAddedCloudStoragePage =
|
||||
'/valueAddedCloudStoragePage'; // 增值服务-云存
|
||||
static const String valueAddedServicesBuyPage =
|
||||
'/ValueAddedServicesBuyPage'; // 增值服务-购买服务
|
||||
static const String customSMSTemplateListPage =
|
||||
@ -435,6 +443,10 @@ abstract class Routers {
|
||||
'/AddLockSelectCountryPage'; // 演示模式锁设置页
|
||||
static const String faceUnlockPage = '/faceUnlockPage'; //面容开锁设置
|
||||
static const String motorPowerPage = '/motorPowerPage'; //电机功率设置
|
||||
static const String speechLanguageSettingsPage =
|
||||
'/speechLanguageSettingsPage'; //锁语音包设置
|
||||
static const String thirdPartyPlatformPage =
|
||||
'/thirdPartyPlatformPage'; //第三方平台设置
|
||||
static const String openDoorDirectionPage = '/openDoorDirectionPage'; //开门方向设置
|
||||
static const String catEyeWorkModePage = '/catEyeWorkModePage'; //猫眼工作模式
|
||||
static const String msgNotificationPage = '/msgNotificationPage'; //消息提醒
|
||||
@ -515,9 +527,13 @@ abstract class Routers {
|
||||
static const String doubleLockLinkPage = '/doubleLockLinkPage'; //双锁联动
|
||||
static const String starChartPage = '/starChartPage'; //星图
|
||||
static const String starChartTalkView = '/starChartTalkView'; //星图对讲页面
|
||||
static const String h264WebView = '/h264WebView'; //星图对讲页面
|
||||
static const String lockResetConfirmPage = '/LockResetConfirmPage'; // 重置锁确认页面
|
||||
static const String lockAddFaqPage = '/LockAddFaqPage';
|
||||
static const String h264View = '/h264View'; //星图对讲页面
|
||||
static const String imageTransmissionView =
|
||||
'/imageTransmissionView'; //星图对讲页面(图传)
|
||||
static const String permissionGuidancePage =
|
||||
'/permissionGuidancePage'; // 锁屏权限通知引导页面
|
||||
static const String lockVoiceSettingPage = '/lockVoiceSetting'; // 锁屏权限通知引导页面
|
||||
static const String aiAssistant = '/aiAssistant';
|
||||
}
|
||||
|
||||
abstract class AppRouters {
|
||||
@ -901,6 +917,10 @@ abstract class AppRouters {
|
||||
name: Routers.valueAddedServicesHighFunctionPage,
|
||||
page: () => const ValueAddedServicesHighFunctionPage(),
|
||||
),
|
||||
GetPage<dynamic>(
|
||||
name: Routers.valueAddedCloudStoragePage,
|
||||
page: () => const CloudStoragePage(),
|
||||
),
|
||||
GetPage<dynamic>(
|
||||
name: Routers.customSMSTemplateListPage,
|
||||
page: () => const CustomSMSTemplateListPage(),
|
||||
@ -1021,6 +1041,9 @@ abstract class AppRouters {
|
||||
name: Routers.faceUnlockPage, page: () => const FaceUnlockPage()),
|
||||
GetPage<dynamic>(
|
||||
name: Routers.motorPowerPage, page: () => const MotorPowerPage()),
|
||||
GetPage<dynamic>(
|
||||
name: Routers.speechLanguageSettingsPage,
|
||||
page: () => const SpeechLanguageSettingsPage()),
|
||||
GetPage<dynamic>(
|
||||
name: Routers.openDoorDirectionPage,
|
||||
page: () => const OpenDoorDirectionPage()),
|
||||
@ -1188,14 +1211,25 @@ abstract class AppRouters {
|
||||
page: () => const DoubleLockLinkPage()),
|
||||
GetPage<dynamic>(
|
||||
name: Routers.starChartTalkView, page: () => const TalkViewPage()),
|
||||
GetPage<dynamic>(name: Routers.h264WebView, page: () => H264WebView()),
|
||||
GetPage<dynamic>(
|
||||
name: Routers.lockResetConfirmPage,
|
||||
page: () => const LockResetConfirmPage(),
|
||||
),
|
||||
name: Routers.h264View, page: () => TalkViewNativeDecodePage()),
|
||||
// 插件播放页面
|
||||
GetPage<dynamic>(
|
||||
name: Routers.lockAddFaqPage,
|
||||
page: () => const LockAddFaqPage(),
|
||||
),
|
||||
name: Routers.imageTransmissionView,
|
||||
page: () => ImageTransmissionPage()),
|
||||
|
||||
GetPage<dynamic>(
|
||||
name: Routers.permissionGuidancePage,
|
||||
page: () => PermissionGuidancePage()),
|
||||
GetPage<dynamic>(
|
||||
name: Routers.lockVoiceSettingPage, page: () => LockVoiceSetting()),
|
||||
GetPage<dynamic>(
|
||||
name: Routers.thirdPartyPlatformPage,
|
||||
page: () => ThirdPartyPlatformPage()),
|
||||
GetPage<dynamic>(
|
||||
name: Routers.aiAssistant,
|
||||
page: () => AiAssistantPage()),
|
||||
// 插件播放页面
|
||||
// GetPage<dynamic>(name: Routers.h264View, page: () => H264WebView()), // webview播放页面
|
||||
];
|
||||
}
|
||||
|
||||
@ -5,6 +5,7 @@ import 'package:flutter_blue_plus/flutter_blue_plus.dart';
|
||||
import 'package:flutter_easyloading/flutter_easyloading.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:star_lock/app_settings/app_settings.dart';
|
||||
import 'package:star_lock/flavors.dart';
|
||||
import 'package:star_lock/tools/bugly/bugly_tool.dart';
|
||||
import 'package:star_lock/tools/commonDataManage.dart';
|
||||
|
||||
@ -15,8 +16,7 @@ import 'io_type.dart';
|
||||
import 'reciver_data.dart';
|
||||
|
||||
//连接状态回调
|
||||
typedef ConnectStateCallBack = Function(
|
||||
BluetoothConnectionState connectionState);
|
||||
typedef ConnectStateCallBack = Function(BluetoothConnectionState connectionState);
|
||||
typedef ScanDevicesCallBack = Function(List<ScanResult>);
|
||||
|
||||
class BlueManage {
|
||||
@ -46,7 +46,7 @@ class BlueManage {
|
||||
StreamSubscription<BluetoothConnectionState>? _connectionStateSubscription;
|
||||
|
||||
StreamSubscription<int>? _mtuSubscription;
|
||||
int? _mtuSize = 20;
|
||||
int? _mtuSize = 30;
|
||||
|
||||
// 当前连接设备的名字
|
||||
String connectDeviceName = '';
|
||||
@ -61,8 +61,7 @@ class BlueManage {
|
||||
ScanResult? scanResult;
|
||||
|
||||
// 监听蓝牙连接状态
|
||||
BluetoothConnectionState? bluetoothConnectionState =
|
||||
BluetoothConnectionState.disconnected;
|
||||
BluetoothConnectionState? bluetoothConnectionState = BluetoothConnectionState.disconnected;
|
||||
|
||||
BluetoothAdapterState? _adapterState = BluetoothAdapterState.on;
|
||||
StreamSubscription<BluetoothAdapterState>? _adapterStateStateSubscription;
|
||||
@ -84,6 +83,12 @@ class BlueManage {
|
||||
return _manager;
|
||||
}
|
||||
|
||||
// 提供全局单例访问入口
|
||||
static BlueManage get instance {
|
||||
_manager ??= BlueManage._init();
|
||||
return _manager!;
|
||||
}
|
||||
|
||||
BlueManage? get manager => shareManager();
|
||||
|
||||
void _initBlue() {
|
||||
@ -93,15 +98,18 @@ class BlueManage {
|
||||
}
|
||||
|
||||
void _initGetMtuSubscription() {
|
||||
_mtuSubscription ??= bluetoothConnectDevice!.mtu.listen((int value) {
|
||||
// 先取消之前的订阅,避免重复监听
|
||||
_mtuSubscription?.cancel();
|
||||
_mtuSubscription = null;
|
||||
|
||||
_mtuSubscription = bluetoothConnectDevice!.mtu.listen((int value) {
|
||||
_mtuSize = value - 3;
|
||||
AppLog.log('_mtuSizeValue:$value mtuSize:$_mtuSize');
|
||||
AppLog.log('设备MTU变化 - 原始值:$value 计算后MTU:$_mtuSize 设备:${bluetoothConnectDevice?.remoteId.str}');
|
||||
});
|
||||
}
|
||||
|
||||
void _initAdapterStateStateSubscription() {
|
||||
_adapterStateStateSubscription ??=
|
||||
FlutterBluePlus.adapterState.listen((BluetoothAdapterState state) {
|
||||
_adapterStateStateSubscription ??= FlutterBluePlus.adapterState.listen((BluetoothAdapterState state) {
|
||||
AppLog.log('蓝牙状态:$state');
|
||||
_adapterState = state;
|
||||
});
|
||||
@ -111,18 +119,14 @@ class BlueManage {
|
||||
_connectionStateSubscription?.cancel();
|
||||
_connectionStateSubscription = null;
|
||||
|
||||
_connectionStateSubscription = bluetoothConnectDevice!.connectionState
|
||||
.listen((BluetoothConnectionState state) async {
|
||||
_connectionStateSubscription = bluetoothConnectDevice!.connectionState.listen((BluetoothConnectionState state) async {
|
||||
bluetoothConnectionState = state;
|
||||
AppLog.log('蓝牙连接回调状态:$state');
|
||||
});
|
||||
}
|
||||
|
||||
void _initSendStreamSubscription() {
|
||||
_sendStreamSubscription ??= EventBusManager()
|
||||
.eventBus!
|
||||
.on<EventSendModel>()
|
||||
.listen((EventSendModel model) {
|
||||
_sendStreamSubscription ??= EventBusManager().eventBus!.on<EventSendModel>().listen((EventSendModel model) {
|
||||
AppLog.log('eventBus接收发送数据:${model}');
|
||||
if (model.sendChannel == DataChannel.ble) {
|
||||
FlutterBluePlus.isSupported.then((bool isAvailable) async {
|
||||
@ -147,39 +151,27 @@ class BlueManage {
|
||||
}
|
||||
|
||||
/// 开始指定设备名称的扫描蓝牙设备
|
||||
Future<void> startScanSingle(String deviceName, int timeout,
|
||||
ScanDevicesCallBack scanDevicesCallBack) async {
|
||||
Future<void> startScanSingle(String deviceName, int timeout, ScanDevicesCallBack scanDevicesCallBack) async {
|
||||
final DateTime start = DateTime.now();
|
||||
FlutterBluePlus.isSupported.then((bool isAvailable) async {
|
||||
if (isAvailable) {
|
||||
// AppLog.log('startScanSingle 蓝牙状态 系统蓝牙状态:$_adapterState 蓝牙连接状态:$bluetoothConnectionState');
|
||||
if (_adapterState == BluetoothAdapterState.on) {
|
||||
try {
|
||||
BuglyTool.uploadException(
|
||||
message: '开始指定设备名称的扫描蓝牙设备',
|
||||
detail: '调用方法是:startScanSingle 指定设备名称是:$deviceName',
|
||||
upload: false);
|
||||
BuglyTool.uploadException(message: '开始指定设备名称的扫描蓝牙设备', detail: '调用方法是:startScanSingle 指定设备名称是:$deviceName', upload: false);
|
||||
//android 扫描比较慢,取样只要 3 分之一
|
||||
final int divisor = Platform.isAndroid ? 3 : 1;
|
||||
FlutterBluePlus.startScan(
|
||||
continuousDivisor: divisor,
|
||||
continuousUpdates: true,
|
||||
withKeywords: <String>[deviceName],
|
||||
timeout: Duration(seconds: timeout));
|
||||
continuousDivisor: divisor, continuousUpdates: true, withKeywords: <String>[deviceName], timeout: Duration(seconds: timeout));
|
||||
final Completer<dynamic> completer = Completer<dynamic>();
|
||||
final StreamSubscription<List<ScanResult>> subscription =
|
||||
FlutterBluePlus.scanResults.listen((List<ScanResult> results) {
|
||||
final bool isExit = results.any((ScanResult element) =>
|
||||
(element.device.platformName == deviceName) ||
|
||||
(element.advertisementData.advName == deviceName));
|
||||
final int milliseconds = DateTime.now().millisecondsSinceEpoch -
|
||||
start.millisecondsSinceEpoch;
|
||||
AppLog.log(
|
||||
'扫描到的设备数:${results.length} 是否查找到 $isExit 以查找$milliseconds毫秒');
|
||||
final StreamSubscription<List<ScanResult>> subscription = FlutterBluePlus.scanResults.listen((List<ScanResult> results) {
|
||||
final bool isExit = results
|
||||
.any((ScanResult element) => (element.device.platformName == deviceName) || (element.advertisementData.advName == deviceName));
|
||||
final int milliseconds = DateTime.now().millisecondsSinceEpoch - start.millisecondsSinceEpoch;
|
||||
AppLog.log('扫描到的设备数:${results.length} 是否查找到 $isExit 以查找$milliseconds毫秒');
|
||||
BuglyTool.uploadException(
|
||||
message: '指定设备名称的扫描蓝牙设备 监听扫描结果',
|
||||
detail:
|
||||
'startScanSingle$deviceName 监听扫描结果 是否查找到 $isExit 以查找$milliseconds毫秒 扫描到的设备数:${results.length} results:$results',
|
||||
detail: 'startScanSingle$deviceName 监听扫描结果 是否查找到 $isExit 以查找$milliseconds毫秒 扫描到的设备数:${results.length} results:$results',
|
||||
upload: false);
|
||||
if (isExit) {
|
||||
for (final ScanResult scanResult in results) {
|
||||
@ -190,19 +182,16 @@ class BlueManage {
|
||||
continue;
|
||||
}
|
||||
|
||||
final isMatch = _isMatch(scanResult
|
||||
.advertisementData.serviceUuids
|
||||
.map((e) => e.uuid)
|
||||
.toList());
|
||||
final isMatch = _isMatch(
|
||||
scanResult.advertisementData.serviceUuids.map((e) => e.uuid).toList(),
|
||||
isSingle: true,
|
||||
);
|
||||
|
||||
if (isMatch && (scanResult.rssi >= -100)) {
|
||||
// 查询id相同的元素
|
||||
final int knownDeviceIndex = scanDevices.indexWhere(
|
||||
(ScanResult d) =>
|
||||
(d.device.platformName ==
|
||||
scanResult.device.platformName) ||
|
||||
(d.advertisementData.advName ==
|
||||
scanResult.advertisementData.advName));
|
||||
final int knownDeviceIndex = scanDevices.indexWhere((ScanResult d) =>
|
||||
(d.device.platformName == scanResult.device.platformName) ||
|
||||
(d.advertisementData.advName == scanResult.advertisementData.advName));
|
||||
// 不存在的时候返回-1
|
||||
if (knownDeviceIndex >= 0) {
|
||||
scanDevices[knownDeviceIndex] = scanResult;
|
||||
@ -211,8 +200,7 @@ class BlueManage {
|
||||
}
|
||||
BuglyTool.uploadException(
|
||||
message: '遍历扫描到的结果跟缓存的结果对比,如果有最新的就更新缓存',
|
||||
detail:
|
||||
'startScanSingle deviceName:$deviceName 查询到的结果scanResult:$scanResult',
|
||||
detail: 'startScanSingle deviceName:$deviceName 查询到的结果scanResult:$scanResult',
|
||||
upload: false);
|
||||
}
|
||||
}
|
||||
@ -220,10 +208,7 @@ class BlueManage {
|
||||
completer.complete();
|
||||
}
|
||||
}, onError: (e) {
|
||||
BuglyTool.uploadException(
|
||||
message: '指定设备名称的扫描蓝牙设备 监听扫描结果失败',
|
||||
detail: '打印失败问题 e:${e.toString()}',
|
||||
upload: false);
|
||||
BuglyTool.uploadException(message: '指定设备名称的扫描蓝牙设备 监听扫描结果失败', detail: '打印失败问题 e:${e.toString()}', upload: false);
|
||||
AppLog.log('扫描失败:$e');
|
||||
});
|
||||
FlutterBluePlus.cancelWhenScanComplete(subscription);
|
||||
@ -231,10 +216,7 @@ class BlueManage {
|
||||
scanDevicesCallBack(scanDevices);
|
||||
subscription.cancel();
|
||||
} catch (e) {
|
||||
BuglyTool.uploadException(
|
||||
message: '指定设备名称的扫描蓝牙设备 内部逻辑整形失败',
|
||||
detail: 'tartScanSingle内部逻辑整形失败 e:${e.toString()}',
|
||||
upload: false);
|
||||
BuglyTool.uploadException(message: '指定设备名称的扫描蓝牙设备 内部逻辑整形失败', detail: 'tartScanSingle内部逻辑整形失败 e:${e.toString()}', upload: false);
|
||||
AppLog.log('扫描失败');
|
||||
}
|
||||
} else {
|
||||
@ -251,17 +233,14 @@ class BlueManage {
|
||||
}
|
||||
|
||||
/// 开始扫描蓝牙设备
|
||||
Future<void> startScan(int timeout, DeviceType deviceType,
|
||||
ScanDevicesCallBack scanDevicesCallBack,
|
||||
{List<Guid>? idList}) async {
|
||||
Future<void> startScan(int timeout, DeviceType deviceType, ScanDevicesCallBack scanDevicesCallBack, {List<Guid>? idList}) async {
|
||||
FlutterBluePlus.isSupported.then((bool isAvailable) async {
|
||||
if (isAvailable) {
|
||||
// AppLog.log('startScan 蓝牙状态 系统蓝牙状态:$_adapterState 蓝牙连接状态:$bluetoothConnectionState');
|
||||
AppLog.log('startScan 蓝牙状态 系统蓝牙状态:$_adapterState 蓝牙连接状态:$bluetoothConnectionState');
|
||||
if (_adapterState == BluetoothAdapterState.on) {
|
||||
try {
|
||||
FlutterBluePlus.startScan(timeout: Duration(seconds: timeout));
|
||||
final StreamSubscription<List<ScanResult>> subscription =
|
||||
FlutterBluePlus.scanResults.listen((List<ScanResult> results) {
|
||||
final StreamSubscription<List<ScanResult>> subscription = FlutterBluePlus.scanResults.listen((List<ScanResult> results) {
|
||||
scanDevices.clear();
|
||||
for (final ScanResult scanResult in results) {
|
||||
if (scanResult.advertisementData.serviceUuids.isNotEmpty) {
|
||||
@ -272,20 +251,16 @@ class BlueManage {
|
||||
}
|
||||
|
||||
final isMatch = _isMatch(
|
||||
scanResult.advertisementData.serviceUuids
|
||||
.map((e) => e.uuid)
|
||||
.toList(),
|
||||
scanResult.advertisementData.serviceUuids.map((e) => e.uuid).toList(),
|
||||
deviceType: deviceType,
|
||||
isSingle: false,
|
||||
);
|
||||
// 判断名字为空的直接剔除
|
||||
if (isMatch && (scanResult.rssi >= -100)) {
|
||||
// 查询id相同的元素
|
||||
final int knownDeviceIndex = scanDevices.indexWhere(
|
||||
(ScanResult d) =>
|
||||
(d.device.platformName ==
|
||||
scanResult.device.platformName) ||
|
||||
(d.advertisementData.advName ==
|
||||
scanResult.advertisementData.advName));
|
||||
final int knownDeviceIndex = scanDevices.indexWhere((ScanResult d) =>
|
||||
(d.device.platformName == scanResult.device.platformName) ||
|
||||
(d.advertisementData.advName == scanResult.advertisementData.advName));
|
||||
// 不存在的时候返回-1
|
||||
if (knownDeviceIndex >= 0) {
|
||||
scanDevices[knownDeviceIndex] = scanResult;
|
||||
@ -319,27 +294,86 @@ class BlueManage {
|
||||
}
|
||||
|
||||
/// 判断是否包含指定的uuid
|
||||
bool _isMatch(List<String> serviceUuids,
|
||||
{DeviceType deviceType = DeviceType.blue}) {
|
||||
final List<String> prefixes =
|
||||
getDeviceType(deviceType).map((e) => e.toLowerCase()).toList();
|
||||
bool _isMatch(List<String> serviceUuids, {DeviceType deviceType = DeviceType.blue, required bool isSingle}) {
|
||||
final List<String> prefixes = getDeviceType(deviceType).map((e) => e.toLowerCase()).toList();
|
||||
for (String uuid in serviceUuids) {
|
||||
final String cleanUuid = uuid.replaceAll('-', '').toLowerCase();
|
||||
final String cleanUuid = uuid.toLowerCase();
|
||||
if (cleanUuid.length == 8) {
|
||||
// 8位,判断前两位
|
||||
// 8位,判断第4、5位
|
||||
String pairStatus = cleanUuid.substring(4, 6); // 第4、5位(索引3和4)
|
||||
for (final prefix in prefixes) {
|
||||
if (cleanUuid.startsWith(prefix)) {
|
||||
return true;
|
||||
if (isSingle) {
|
||||
return true; // isSingle为true,前缀匹配即返回true
|
||||
} else {
|
||||
// 00=未配对,01=已配对
|
||||
if (pairStatus == '00') {
|
||||
return true; // 未配对才返回true
|
||||
}
|
||||
// 已配对(01)不返回true,继续判断下一个uuid
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (cleanUuid.length == 32) {
|
||||
} else {
|
||||
// 128位,判断前8位的第3、第4位
|
||||
final String first8 = cleanUuid.substring(0, 8);
|
||||
if (first8.length >= 4) {
|
||||
final String thirdAndFourth = first8.substring(2, 4); // 索引2和3
|
||||
for (final prefix in prefixes) {
|
||||
if (thirdAndFourth == prefix) {
|
||||
return true;
|
||||
if (cleanUuid.length >= 32) {
|
||||
if (deviceType == DeviceType.blue) {
|
||||
final String thirdAndFourth = cleanUuid.substring(6, 8); // 索引2和3
|
||||
for (final prefix in prefixes) {
|
||||
if (thirdAndFourth == prefix) {
|
||||
if (isSingle) {
|
||||
return true; // isSingle为true,前缀匹配即返回true
|
||||
} else {
|
||||
// 判断配对状态(带横杠UUID的第31、32位,从1开始计数)
|
||||
if (cleanUuid.length >= 32) {
|
||||
String pairStatus = cleanUuid.substring(30, 32); // 第31、32位(从1开始计数)
|
||||
// 00=未配对,01=已配对
|
||||
if (pairStatus == '00') {
|
||||
return true; // 未配对才返回true
|
||||
} else {
|
||||
// 将十六进制字符串转换为整数(0~255)
|
||||
int statusValue = int.parse(pairStatus, radix: 16);
|
||||
// 提取 byte0(配对状态:第1位)
|
||||
int byte0 = (statusValue >> 0) & 0x01; // 取最低位
|
||||
|
||||
// 提取 byte1(事件状态:第2位)
|
||||
int byte1 = (statusValue >> 1) & 0x01; // 取次低位
|
||||
|
||||
// 判断是否未配对
|
||||
bool isPaired = (byte0 == 1);
|
||||
|
||||
// 判断是否有新事件
|
||||
bool hasNewEvent = (byte1 == 1);
|
||||
// 返回是否未配对(原逻辑)
|
||||
if (!isPaired) {
|
||||
return true; // 未配对返回true
|
||||
} else {
|
||||
return false; // 配对返回false
|
||||
}
|
||||
}
|
||||
// 已配对(01)不返回true,继续判断下一个uuid
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (deviceType == DeviceType.gateway) {
|
||||
final String thirdAndFourth = cleanUuid.substring(6, 8); // 索引2和3
|
||||
for (final prefix in prefixes) {
|
||||
if (thirdAndFourth == prefix) {
|
||||
if (isSingle) {
|
||||
return true; // isSingle为true,前缀匹配即返回true
|
||||
} else {
|
||||
// 判断配对状态(带横杠UUID的第31、32位,从1开始计数)
|
||||
if (cleanUuid.length >= 32) {
|
||||
String pairStatus = cleanUuid.substring(30, 32); // 第31、32位(从1开始计数)
|
||||
// 00=未配对,01=已配对
|
||||
if (pairStatus == '00') {
|
||||
return true; // 未配对才返回true
|
||||
}
|
||||
// 已配对(01)不返回true,继续判断下一个uuid
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -350,8 +384,10 @@ class BlueManage {
|
||||
|
||||
/// 调用发送数据 List senderData,
|
||||
Future<void> blueSendData(
|
||||
String deviceName, ConnectStateCallBack stateCallBack,
|
||||
{bool isAddEquipment = false}) async {
|
||||
String deviceName,
|
||||
ConnectStateCallBack stateCallBack, {
|
||||
bool isAddEquipment = false,
|
||||
}) async {
|
||||
FlutterBluePlus.isSupported.then((bool isAvailable) async {
|
||||
if (isAvailable) {
|
||||
// AppLog.log('蓝牙状态 系统蓝牙状态:$_adapterState 蓝牙连接状态:$bluetoothConnectionState');
|
||||
@ -360,26 +396,26 @@ class BlueManage {
|
||||
if (bluetoothConnectionState != BluetoothConnectionState.connected) {
|
||||
BuglyTool.uploadException(
|
||||
message: '点击按钮 蓝牙未连接 下一步扫描连接蓝牙',
|
||||
detail:
|
||||
'blueSendData 蓝牙连接状态 bluetoothConnectionState:$bluetoothConnectionState deviceName:$deviceName',
|
||||
detail: 'blueSendData 蓝牙连接状态 bluetoothConnectionState:$bluetoothConnectionState deviceName:$deviceName',
|
||||
upload: false);
|
||||
_connect(deviceName, (BluetoothConnectionState state) {
|
||||
stateCallBack(bluetoothConnectionState!);
|
||||
}, isAddEquipment: isAddEquipment);
|
||||
// 连接设备
|
||||
_connect(
|
||||
deviceName,
|
||||
(BluetoothConnectionState state) {
|
||||
stateCallBack(bluetoothConnectionState!);
|
||||
},
|
||||
isAddEquipment: isAddEquipment,
|
||||
);
|
||||
} else {
|
||||
BuglyTool.uploadException(
|
||||
message: '点击按钮 蓝牙已经连接 下一步扫描连接蓝牙',
|
||||
detail:
|
||||
'blueSendData 直接回调状态 蓝牙连接状态bluetoothConnectionState:$bluetoothConnectionState deviceName:$deviceName',
|
||||
detail: 'blueSendData 直接回调状态 蓝牙连接状态bluetoothConnectionState:$bluetoothConnectionState deviceName:$deviceName',
|
||||
upload: false);
|
||||
stateCallBack(bluetoothConnectionState!);
|
||||
}
|
||||
} else {
|
||||
BuglyTool.uploadException(
|
||||
message: '点击按钮 蓝牙未打开',
|
||||
detail:
|
||||
'blueSendData 蓝牙未打开--_adapterState:${BluetoothAdapterState.on} deviceName:$deviceName',
|
||||
upload: false);
|
||||
message: '点击按钮 蓝牙未打开', detail: 'blueSendData 蓝牙未打开--_adapterState:${BluetoothAdapterState.on} deviceName:$deviceName', upload: false);
|
||||
try {
|
||||
stateCallBack(BluetoothConnectionState.disconnected);
|
||||
openBlue();
|
||||
@ -387,16 +423,12 @@ class BlueManage {
|
||||
AppLog.log('蓝牙打开失败');
|
||||
BuglyTool.uploadException(
|
||||
message: '点击按钮 蓝牙未打开 然后蓝牙打开失败',
|
||||
detail:
|
||||
'blueSendData 蓝牙打开失败--_adapterState:${BluetoothAdapterState.on} deviceName:$deviceName',
|
||||
detail: 'blueSendData 蓝牙打开失败--_adapterState:${BluetoothAdapterState.on} deviceName:$deviceName',
|
||||
upload: false);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
BuglyTool.uploadException(
|
||||
message: '点击按钮 蓝牙状态不可用',
|
||||
detail: 'blueSendData 蓝牙状态不可用--isAvailable:$isAvailable',
|
||||
upload: false);
|
||||
BuglyTool.uploadException(message: '点击按钮 蓝牙状态不可用', detail: 'blueSendData 蓝牙状态不可用--isAvailable:$isAvailable', upload: false);
|
||||
stateCallBack(BluetoothConnectionState.disconnected);
|
||||
AppLog.log('开始扫描 蓝牙不可用,不能进行蓝牙操作');
|
||||
}
|
||||
@ -404,25 +436,19 @@ class BlueManage {
|
||||
}
|
||||
|
||||
/// 连接
|
||||
Future<void> _connect(
|
||||
String deviceName, ConnectStateCallBack connectStateCallBack,
|
||||
{bool isAddEquipment = false}) async {
|
||||
Future<void> _connect(String deviceName, ConnectStateCallBack connectStateCallBack, {bool isAddEquipment = false}) async {
|
||||
connectDeviceName = deviceName;
|
||||
// 当前已扫描到的缓存设备
|
||||
final List<ScanResult> devicesList = scanDevices;
|
||||
// 是否有缓存设备 true是有缓存设备
|
||||
final bool isExistDevice = isExistScanDevices(connectDeviceName);
|
||||
// 是否是当前设备
|
||||
final bool isCurrentDevice =
|
||||
CommonDataManage().currentKeyInfo.lockName == deviceName;
|
||||
final bool isCurrentDevice = CommonDataManage().currentKeyInfo.lockName == deviceName;
|
||||
// mac地址
|
||||
final String? mac = CommonDataManage().currentKeyInfo.mac;
|
||||
|
||||
AppLog.log('开始连接 是否存在缓存:$isExistDevice 是否是当前设备:$isCurrentDevice mac:$mac');
|
||||
if (GetPlatform.isAndroid &&
|
||||
!isExistDevice &&
|
||||
isCurrentDevice &&
|
||||
mac != null) {
|
||||
if (GetPlatform.isAndroid && !isExistDevice && isCurrentDevice && mac != null) {
|
||||
// 当是安卓设备 且不存在缓存设备 且是当前设备 且mac地址不为空
|
||||
BuglyTool.uploadException(
|
||||
message: '开始连接 当是安卓设备 且不存在缓存设备 且是当前设备 且mac地址不为空 上传记录当前方法是:_connect',
|
||||
@ -434,22 +460,17 @@ class BlueManage {
|
||||
try {
|
||||
if (!needScanSingle) {
|
||||
BuglyTool.uploadException(
|
||||
message:
|
||||
'开始连接 当是安卓设备 且不存在缓存设备 且是当前设备 且mac地址不为空 上传记录当前方法是:_connect',
|
||||
message: '开始连接 当是安卓设备 且不存在缓存设备 且是当前设备 且mac地址不为空 上传记录当前方法是:_connect',
|
||||
detail: '调用方法doNotSearchBLE,直接连接,needScanSingle:$needScanSingle',
|
||||
upload: false);
|
||||
await doNotSearchBLE(mac, connectStateCallBack,
|
||||
isAddEquipment: isAddEquipment);
|
||||
await doNotSearchBLE(mac, connectStateCallBack, isAddEquipment: isAddEquipment);
|
||||
} else {
|
||||
BuglyTool.uploadException(
|
||||
message:
|
||||
'开始连接 当是安卓设备 且不存在缓存设备 且是当前设备 且mac地址不为空 上传记录当前方法是:_connect',
|
||||
detail:
|
||||
'调用方法startScanSingle,执行扫描函数,needScanSingle:$needScanSingle',
|
||||
message: '开始连接 当是安卓设备 且不存在缓存设备 且是当前设备 且mac地址不为空 上传记录当前方法是:_connect',
|
||||
detail: '调用方法startScanSingle,执行扫描函数,needScanSingle:$needScanSingle',
|
||||
upload: false);
|
||||
startScanSingle(deviceName, 15, (List<ScanResult> scanDevices) {
|
||||
_connectDevice(scanDevices, deviceName, connectStateCallBack,
|
||||
isAddEquipment: isAddEquipment);
|
||||
_connectDevice(scanDevices, deviceName, connectStateCallBack, isAddEquipment: isAddEquipment);
|
||||
});
|
||||
}
|
||||
} catch (e) {
|
||||
@ -458,8 +479,7 @@ class BlueManage {
|
||||
detail: '调用方法doNotSearchBLE发生异常,执行扫描函数 startScanSingle,异常信息:$e',
|
||||
upload: false);
|
||||
startScanSingle(deviceName, 15, (List<ScanResult> scanDevices) {
|
||||
_connectDevice(scanDevices, deviceName, connectStateCallBack,
|
||||
isAddEquipment: isAddEquipment);
|
||||
_connectDevice(scanDevices, deviceName, connectStateCallBack, isAddEquipment: isAddEquipment);
|
||||
});
|
||||
}
|
||||
//
|
||||
@ -476,16 +496,13 @@ class BlueManage {
|
||||
} else if (isAddEquipment == false && isExistDevice == false) {
|
||||
// 取消缓存直接使用,存在配对场景设备信息会更变
|
||||
BuglyTool.uploadException(
|
||||
message:
|
||||
'取消缓存直接使用,存在配对场景设备信息会更变 然后开始指定设备名称的扫描蓝牙设备 上传记录当前方法是:_connect',
|
||||
detail:
|
||||
'符合条件(isAddEquipment == false && isExistDevice == false) 下一步调用startScanSingle',
|
||||
message: '取消缓存直接使用,存在配对场景设备信息会更变 然后开始指定设备名称的扫描蓝牙设备 上传记录当前方法是:_connect',
|
||||
detail: '符合条件(isAddEquipment == false && isExistDevice == false) 下一步调用startScanSingle',
|
||||
upload: false);
|
||||
|
||||
// AppLog.log('无存在设备需要扫描 deviceName:$deviceName isAddEquipment:$isAddEquipment');
|
||||
startScanSingle(deviceName, 15, (List<ScanResult> scanDevices) {
|
||||
_connectDevice(scanDevices, deviceName, connectStateCallBack,
|
||||
isAddEquipment: isAddEquipment);
|
||||
_connectDevice(scanDevices, deviceName, connectStateCallBack, isAddEquipment: isAddEquipment);
|
||||
});
|
||||
} else {
|
||||
BuglyTool.uploadException(
|
||||
@ -494,16 +511,14 @@ class BlueManage {
|
||||
'走这个方法是有缓存或者添加设备的时候以及不符合(GetPlatform.isAndroid && !isExistDevice && isCurrentDevice && mac != null) deviceName:$deviceName 直接调用_connectDevice',
|
||||
upload: false);
|
||||
// AppLog.log('安卓或者iOS 存在设备不需要扫描 deviceName:$deviceName isAddEquipment:$isAddEquipment');
|
||||
_connectDevice(devicesList, deviceName, connectStateCallBack,
|
||||
isAddEquipment: isAddEquipment);
|
||||
_connectDevice(devicesList, deviceName, connectStateCallBack, isAddEquipment: isAddEquipment);
|
||||
}
|
||||
}
|
||||
|
||||
//查找缓存里面是否有设备
|
||||
bool isExistScanDevices(String connectDeviceName) {
|
||||
final bool isExistDevice = scanDevices.any((ScanResult element) =>
|
||||
element.device.platformName == connectDeviceName ||
|
||||
element.advertisementData.advName == connectDeviceName);
|
||||
final bool isExistDevice = scanDevices
|
||||
.any((ScanResult element) => element.device.platformName == connectDeviceName || element.advertisementData.advName == connectDeviceName);
|
||||
return isExistDevice;
|
||||
}
|
||||
|
||||
@ -514,149 +529,66 @@ class BlueManage {
|
||||
bool isAddEquipment = false, // 是否是添加设备之前
|
||||
bool isReconnect = true, // 是否是重连
|
||||
}) async {
|
||||
// 判断数组列表里面是否有这个设备
|
||||
// AppLog.log("devicesList:$devicesList");
|
||||
|
||||
final int knownDeviceIndex = devicesList.indexWhere((ScanResult d) =>
|
||||
(d.device.platformName == deviceName) ||
|
||||
(d.advertisementData.advName == deviceName));
|
||||
final int knownDeviceIndex =
|
||||
devicesList.indexWhere((ScanResult d) => (d.device.platformName == deviceName) || (d.advertisementData.advName == deviceName));
|
||||
|
||||
ScanResult? scanResult; //使用局部变量防止出现缓存
|
||||
if (knownDeviceIndex >= 0) {
|
||||
// 存在的时候赋值
|
||||
connectDeviceMacAddress =
|
||||
devicesList[knownDeviceIndex].advertisementData.advName.isNotEmpty
|
||||
? devicesList[knownDeviceIndex].advertisementData.advName
|
||||
: devicesList[knownDeviceIndex].device.platformName;
|
||||
connectDeviceMacAddress = devicesList[knownDeviceIndex].advertisementData.advName.isNotEmpty
|
||||
? devicesList[knownDeviceIndex].advertisementData.advName
|
||||
: devicesList[knownDeviceIndex].device.platformName;
|
||||
|
||||
bluetoothConnectDevice = devicesList[knownDeviceIndex].device;
|
||||
scanResult = devicesList[knownDeviceIndex];
|
||||
// AppLog.log('bluetoothConnectDevice: $bluetoothConnectDevice scanResult:$scanResult');
|
||||
|
||||
_initGetMtuSubscription();
|
||||
_initListenConnectionState();
|
||||
}
|
||||
if (scanResult == null || connectDeviceMacAddress.isEmpty) {
|
||||
BuglyTool.uploadException(
|
||||
message:
|
||||
'扫描结果scanResult == null || connectDeviceMacAddress.isEmpty不往下执行 return 上传记录当前方法是:_connectDevice',
|
||||
detail:
|
||||
'scanResult:$scanResult connectDeviceMacAddress:$connectDeviceMacAddress',
|
||||
message: '扫描结果scanResult == null || connectDeviceMacAddress.isEmpty不往下执行 return 上传记录当前方法是:_connectDevice',
|
||||
detail: 'scanResult:$scanResult connectDeviceMacAddress:$connectDeviceMacAddress',
|
||||
upload: false);
|
||||
return;
|
||||
}
|
||||
AppLog.log('调用了停止扫描的方法');
|
||||
await stopScan();
|
||||
if (scanResult.advertisementData.serviceUuids[0].toString().length >= 5 &&
|
||||
(scanResult.advertisementData.serviceUuids[0].toString()[5] == '0') &&
|
||||
isAddEquipment == false) {
|
||||
// 添加这个判断是因为有些苹果设备或者安卓等性能比较好的设备时,添加完锁之后,锁板未改变为已添加状态之前,就进行了蓝牙连接,导致添加完锁就失败,这里进行了判断,如果第一次连接失败,就清除缓存重新扫描连接
|
||||
if (isReconnect == true) {
|
||||
AppLog.log('该锁已被重置, 重新发送扫描命令');
|
||||
|
||||
BuglyTool.uploadException(
|
||||
message: '该锁已被重置, 重新发送扫描命令startScanSingle 上传记录当前方法是:_connectDevice',
|
||||
detail:
|
||||
'添加这个判断是因为有些苹果设备或者安卓等性能比较好的设备时,添加完锁之后,锁板未改变为已添加状态之前,就进行了蓝牙连接,导致添加完锁就失败,这里进行了判断,如果第一次连接失败,就清除缓存重新扫描连接 该锁已被重置, 重新发送扫描命令 serviceUuids:${scanResult.advertisementData.serviceUuids[0].toString()}',
|
||||
upload: false);
|
||||
|
||||
scanDevices.clear();
|
||||
startScanSingle(deviceName, 15, (List<ScanResult> scanDevices) {
|
||||
_connectDevice(scanDevices, deviceName, connectStateCallBack,
|
||||
isAddEquipment: isAddEquipment, isReconnect: false);
|
||||
});
|
||||
} else {
|
||||
connectStateCallBack(BluetoothConnectionState.disconnected);
|
||||
EasyLoading.showToast('该锁已被重置'.tr, duration: 2000.milliseconds);
|
||||
scanDevices.clear();
|
||||
|
||||
BuglyTool.uploadException(
|
||||
message: '提示该锁已被重置, 回调断开连接, 清除缓存,上传记录当前方法是:_connectDevice',
|
||||
detail:
|
||||
'isReconnect:$isReconnect serviceUuids:${scanResult.advertisementData.serviceUuids[0].toString()}',
|
||||
upload: false);
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (scanResult.advertisementData.serviceUuids[0].toString().length >= 30 &&
|
||||
(scanResult.advertisementData.serviceUuids[0].toString()[31] == '0') &&
|
||||
isAddEquipment == false) {
|
||||
// 添加这个判断是因为有些苹果设备或者安卓等性能比较好的设备时,添加完锁之后,锁板未改变为已添加状态之前,就进行了蓝牙连接,导致添加完锁就失败,这里进行了判断,如果第一次连接失败,就清除缓存重新扫描连接
|
||||
if (isReconnect == true) {
|
||||
AppLog.log('该锁已被重置, 重新发送扫描命令');
|
||||
|
||||
BuglyTool.uploadException(
|
||||
message: '该锁已被重置, 重新发送扫描命令startScanSingle 上传记录当前方法是:_connectDevice',
|
||||
detail:
|
||||
'添加这个判断是因为有些苹果设备或者安卓等性能比较好的设备时,添加完锁之后,锁板未改变为已添加状态之前,就进行了蓝牙连接,导致添加完锁就失败,这里进行了判断,如果第一次连接失败,就清除缓存重新扫描连接 该锁已被重置, 重新发送扫描命令 serviceUuids:${scanResult.advertisementData.serviceUuids[0].toString()}',
|
||||
upload: false);
|
||||
|
||||
scanDevices.clear();
|
||||
startScanSingle(deviceName, 15, (List<ScanResult> scanDevices) {
|
||||
_connectDevice(scanDevices, deviceName, connectStateCallBack,
|
||||
isAddEquipment: isAddEquipment, isReconnect: false);
|
||||
});
|
||||
} else {
|
||||
connectStateCallBack(BluetoothConnectionState.disconnected);
|
||||
EasyLoading.showToast('该锁已被重置'.tr, duration: 2000.milliseconds);
|
||||
scanDevices.clear();
|
||||
|
||||
BuglyTool.uploadException(
|
||||
message: '提示该锁已被重置, 回调断开连接, 清除缓存,上传记录当前方法是:_connectDevice',
|
||||
detail:
|
||||
'isReconnect:$isReconnect serviceUuids:${scanResult.advertisementData.serviceUuids[0].toString()}',
|
||||
upload: false);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
BuglyTool.uploadException(
|
||||
message: '从devicesList里面查到了设备 下一步连接设备 上传记录当前方法是:_connectDevice',
|
||||
detail:
|
||||
'devicesList:$devicesList scanResult:${scanResult.toString()} bluetoothConnectDevice:${bluetoothConnectDevice.toString()} connectDeviceMacAddress:$connectDeviceMacAddress',
|
||||
upload: false);
|
||||
|
||||
//连接设备
|
||||
await bluetoothDeviceConnect(bluetoothConnectDevice!, connectStateCallBack);
|
||||
}
|
||||
|
||||
//直接给蓝牙设备写入
|
||||
Future<void> doNotSearchBLE(
|
||||
String masAdds, ConnectStateCallBack connectStateCallBack,
|
||||
{bool isAddEquipment = false}) async {
|
||||
Future<void> doNotSearchBLE(String masAdds, ConnectStateCallBack connectStateCallBack, {bool isAddEquipment = false}) async {
|
||||
await FlutterBluePlus.stopScan();
|
||||
|
||||
if (bluetoothConnectDevice == null ||
|
||||
bluetoothConnectDevice?.remoteId.str != masAdds) {
|
||||
if (bluetoothConnectDevice == null || bluetoothConnectDevice?.remoteId.str != masAdds) {
|
||||
bluetoothConnectDevice = BluetoothDevice.fromId(masAdds);
|
||||
_initGetMtuSubscription();
|
||||
_initListenConnectionState();
|
||||
BuglyTool.uploadException(
|
||||
message: '直接给蓝牙设备写入 上传记录当前方法是:doNotSearchBLE',
|
||||
detail: '直接给蓝牙设备写入 通过fromId方法创建一个BluetoothDevice masAdds:$masAdds',
|
||||
upload: false);
|
||||
message: '直接给蓝牙设备写入 上传记录当前方法是:doNotSearchBLE', detail: '直接给蓝牙设备写入 通过fromId方法创建一个BluetoothDevice masAdds:$masAdds', upload: false);
|
||||
} else {
|
||||
BuglyTool.uploadException(
|
||||
message: '直接给蓝牙设备写入 上传记录当前方法是:doNotSearchBLE',
|
||||
detail:
|
||||
'直接给蓝牙设备写入 用传入的bluetoothConnectDevice:${bluetoothConnectDevice.toString()}连接 masAdds:$masAdds',
|
||||
detail: '直接给蓝牙设备写入 用传入的bluetoothConnectDevice:${bluetoothConnectDevice.toString()}连接 masAdds:$masAdds',
|
||||
upload: false);
|
||||
}
|
||||
//尝试连接设备
|
||||
await bluetoothDeviceConnect(bluetoothConnectDevice!, connectStateCallBack,
|
||||
isAddEquipment: isAddEquipment);
|
||||
await bluetoothDeviceConnect(bluetoothConnectDevice!, connectStateCallBack, isAddEquipment: isAddEquipment);
|
||||
}
|
||||
|
||||
//设备连接
|
||||
Future<void> bluetoothDeviceConnect(BluetoothDevice bluetoothConnectDevice,
|
||||
ConnectStateCallBack connectStateCallBack,
|
||||
Future<void> bluetoothDeviceConnect(BluetoothDevice bluetoothConnectDevice, ConnectStateCallBack connectStateCallBack,
|
||||
{bool isAddEquipment = false}) async {
|
||||
// 重连三次
|
||||
const int maxAttempts = 3;
|
||||
int attempt = 0;
|
||||
while (attempt < maxAttempts) {
|
||||
try {
|
||||
await bluetoothConnectDevice.connect(timeout: 5.seconds);
|
||||
await bluetoothConnectDevice.connect(
|
||||
timeout: 5.seconds,
|
||||
mtu: 512,
|
||||
);
|
||||
break; // If the connection is successful, break the loop
|
||||
} catch (e) {
|
||||
AppLog.log('连接失败 重连了: $e');
|
||||
@ -671,8 +603,7 @@ class BlueManage {
|
||||
AppLog.log('$maxAttempts次后尝试连接失败');
|
||||
BuglyTool.uploadException(
|
||||
message: '连接三次超时断开连接 回调断开连接 上传记录当前方法是:bluetoothDeviceConnect',
|
||||
detail:
|
||||
'bluetoothDeviceConnect:${bluetoothConnectDevice.toString()} $maxAttempts次后尝试连接失败',
|
||||
detail: 'bluetoothDeviceConnect:${bluetoothConnectDevice.toString()} $maxAttempts次后尝试连接失败',
|
||||
upload: false);
|
||||
needScanSingle = true;
|
||||
connectStateCallBack(BluetoothConnectionState.disconnected);
|
||||
@ -681,22 +612,22 @@ class BlueManage {
|
||||
if (bluetoothConnectionState == BluetoothConnectionState.connected) {
|
||||
try {
|
||||
needScanSingle = false;
|
||||
final List<BluetoothService> services =
|
||||
await bluetoothConnectDevice.discoverServices();
|
||||
final List<BluetoothService> services = await bluetoothConnectDevice.discoverServices();
|
||||
//循环判断服务
|
||||
for (final BluetoothService service in services) {
|
||||
if (service.uuid == _serviceIdConnect) {
|
||||
for (final BluetoothCharacteristic characteristic
|
||||
in service.characteristics) {
|
||||
if (characteristic.characteristicUuid ==
|
||||
_characteristicIdSubscription) {
|
||||
for (final BluetoothCharacteristic characteristic in service.characteristics) {
|
||||
if (characteristic.characteristicUuid == _characteristicIdSubscription) {
|
||||
_subScribeToCharacteristic(characteristic);
|
||||
bluetoothConnectionState = BluetoothConnectionState.connected;
|
||||
connectStateCallBack(bluetoothConnectionState!);
|
||||
|
||||
if (Platform.isAndroid) {
|
||||
await bluetoothConnectDevice.requestMtu(512);
|
||||
}
|
||||
BuglyTool.uploadException(
|
||||
message: '订阅成功 上传记录当前方法是:bluetoothDeviceConnect',
|
||||
detail:
|
||||
'发现服务,连接成功,订阅数据 bluetoothDeviceConnect:${bluetoothConnectDevice.toString()} ',
|
||||
detail: '发现服务,连接成功,订阅数据 bluetoothDeviceConnect:${bluetoothConnectDevice.toString()} ',
|
||||
upload: false);
|
||||
} else {
|
||||
BuglyTool.uploadException(
|
||||
@ -718,22 +649,16 @@ class BlueManage {
|
||||
needScanSingle = true;
|
||||
bluetoothConnectionState = BluetoothConnectionState.disconnected;
|
||||
connectStateCallBack(bluetoothConnectionState!);
|
||||
AppLog.log(
|
||||
'发现设备时失败 e:$e bluetoothConnectionState:$bluetoothConnectionState');
|
||||
AppLog.log('发现设备时失败 e:$e bluetoothConnectionState:$bluetoothConnectionState');
|
||||
BuglyTool.uploadException(
|
||||
message: '发现服务时失败',
|
||||
detail:
|
||||
'发现服务时报错原因e:$e bluetoothDeviceConnect:${bluetoothConnectDevice.toString()}',
|
||||
upload: false);
|
||||
message: '发现服务时失败', detail: '发现服务时报错原因e:$e bluetoothDeviceConnect:${bluetoothConnectDevice.toString()}', upload: false);
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _subScribeToCharacteristic(
|
||||
BluetoothCharacteristic characteristic) async {
|
||||
final StreamSubscription<List<int>> subscription =
|
||||
characteristic.onValueReceived.listen((List<int> data) {
|
||||
Future<void> _subScribeToCharacteristic(BluetoothCharacteristic characteristic) async {
|
||||
final StreamSubscription<List<int>> subscription = characteristic.onValueReceived.listen((List<int> data) {
|
||||
AppLog.log('订阅获取的数据: $data ');
|
||||
if (data == lastTimeData || data.isEmpty) {
|
||||
return;
|
||||
@ -781,50 +706,91 @@ class BlueManage {
|
||||
return false;
|
||||
}
|
||||
//239, 1, 238, 2, 是数据包头
|
||||
if ((data[0] == 0xEF) &&
|
||||
(data[1] == 0x01) &&
|
||||
(data[2] == 0xEE) &&
|
||||
(data[3] == 0x02)) {
|
||||
if ((data[0] == 0xEF) && (data[1] == 0x01) && (data[2] == 0xEE) && (data[3] == 0x02)) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// 写入
|
||||
/// 写入蓝牙特征值,并等待响应
|
||||
Future<void> writeCharacteristicWithResponse(List<int> value) async {
|
||||
final List<BluetoothService> services =
|
||||
await bluetoothConnectDevice!.discoverServices();
|
||||
final List<BluetoothService> services = await bluetoothConnectDevice!.discoverServices();
|
||||
for (final BluetoothService service in services) {
|
||||
if (service.uuid == _serviceIdConnect) {
|
||||
for (final BluetoothCharacteristic characteristic
|
||||
in service.characteristics) {
|
||||
for (final BluetoothCharacteristic characteristic in service.characteristics) {
|
||||
if (characteristic.characteristicUuid == _characteristicIdWrite) {
|
||||
try {
|
||||
final List<int> valueList = value;
|
||||
final List subData = splitList(valueList, _mtuSize!);
|
||||
// AppLog.log('writeCharacteristicWithResponse _mtuSize:$_mtuSize 得到的分割数据:$subData');
|
||||
for (int i = 0; i < subData.length; i++) {
|
||||
if (characteristic.properties.writeWithoutResponse) {
|
||||
// 使用WRITE_NO_RESPONSE属性写入值
|
||||
await characteristic.write(subData[i], withoutResponse: true);
|
||||
} else if (characteristic.properties.write) {
|
||||
// 使用WRITE属性写入值
|
||||
await characteristic.write(subData[i]);
|
||||
} else {
|
||||
// 特性不支持写入
|
||||
throw Exception(
|
||||
'This characteristic does not support writing.');
|
||||
_initGetMtuSubscription();
|
||||
// 如果MTU还是默认值,尝试重新请求
|
||||
if ((_mtuSize == 23 || _mtuSize == 20) && bluetoothConnectDevice != null) {
|
||||
try {
|
||||
if (Platform.isAndroid) {
|
||||
await bluetoothConnectDevice!.requestMtu(512);
|
||||
}
|
||||
} catch (e) {
|
||||
AppLog.log('重新请求MTU失败: $e');
|
||||
}
|
||||
}
|
||||
// 添加重试机制
|
||||
int retryCount = 0;
|
||||
const int maxRetries = 3;
|
||||
const int retryDelayMs = 500;
|
||||
|
||||
final List<int> valueList = value;
|
||||
AppLog.log('发送数据时当前的mtuSize是:${_mtuSize}');
|
||||
final List subData = splitList(valueList, _mtuSize!);
|
||||
|
||||
for (int i = 0; i < subData.length; i++) {
|
||||
// 对每个数据包都应用重试逻辑
|
||||
bool packetSent = false;
|
||||
retryCount = 0;
|
||||
|
||||
while (!packetSent && retryCount < maxRetries) {
|
||||
try {
|
||||
if (characteristic.properties.writeWithoutResponse) {
|
||||
await characteristic.write(subData[i], withoutResponse: true);
|
||||
} else if (characteristic.properties.write) {
|
||||
await characteristic.write(subData[i]);
|
||||
} else {
|
||||
// 特性不支持写入
|
||||
throw Exception('This characteristic does not support writing.');
|
||||
}
|
||||
|
||||
// 如果到这里没有异常,则包发送成功
|
||||
packetSent = true;
|
||||
} catch (e) {
|
||||
if (e.toString().contains('UNKNOWN_GATT_ERROR (133)') && retryCount < maxRetries - 1) {
|
||||
// GATT错误133,尝试重试
|
||||
retryCount++;
|
||||
AppLog.log('蓝牙写入失败(GATT 133),数据包 ${i + 1}/${subData.length} 正在重试 $retryCount/$maxRetries...');
|
||||
await Future.delayed(Duration(milliseconds: retryDelayMs));
|
||||
continue;
|
||||
} else {
|
||||
// 其他错误或已达到最大重试次数,抛出异常
|
||||
AppLog.log('APP写入失败: $e');
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!packetSent) {
|
||||
throw Exception('蓝牙写入失败,数据包 ${i + 1}/${subData.length} 已达到最大重试次数');
|
||||
}
|
||||
}
|
||||
|
||||
return; // 所有数据包都发送成功
|
||||
} on Exception catch (e, s) {
|
||||
AppLog.log('APP写入失败: $e $s');
|
||||
AppLog.log('APP写入失败: $e $s');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 如果找不到合适的特性用于写入
|
||||
throw Exception('未找到适合写入的蓝牙特性');
|
||||
}
|
||||
|
||||
// 停止扫描蓝牙设备
|
||||
@ -841,15 +807,19 @@ class BlueManage {
|
||||
Future<void> disconnect() async {
|
||||
try {
|
||||
connectDeviceMacAddress = '';
|
||||
|
||||
// 清理MTU监听
|
||||
_mtuSubscription?.cancel();
|
||||
_mtuSubscription = null;
|
||||
_mtuSize = 20; // 重置MTU为默认值
|
||||
|
||||
if (bluetoothConnectionState == BluetoothConnectionState.connected) {
|
||||
AppLog.log('请求断开蓝牙连接');
|
||||
//加快蓝牙断连
|
||||
await bluetoothConnectDevice!.disconnect(timeout: 3);
|
||||
AppLog.log('断开连接成功');
|
||||
await bluetoothConnectDevice!.disconnect(timeout: 1);
|
||||
}
|
||||
} on Exception catch (e, _) {
|
||||
AppLog.log('断开连接失败: $e');
|
||||
} finally {
|
||||
bluetoothConnectionState = BluetoothConnectionState.disconnected;
|
||||
}
|
||||
}
|
||||
|
||||
@ -862,10 +832,29 @@ class BlueManage {
|
||||
}
|
||||
}
|
||||
|
||||
// 获取当前MTU信息,用于调试
|
||||
String getMtuDebugInfo() {
|
||||
return 'MTU Debug Info:\n'
|
||||
'- Current MTU Size: $_mtuSize\n'
|
||||
'- Connected Device: ${bluetoothConnectDevice?.remoteId.str ?? "None"}\n'
|
||||
'- Device Name: $connectDeviceName\n'
|
||||
'- Connection State: $bluetoothConnectionState\n'
|
||||
'- MTU Subscription Active: ${_mtuSubscription != null}';
|
||||
}
|
||||
|
||||
void disposed() {
|
||||
_sendStreamSubscription?.cancel();
|
||||
_mtuSubscription!.cancel();
|
||||
_adapterStateStateSubscription!.cancel();
|
||||
_connectionStateSubscription!.cancel();
|
||||
_mtuSubscription?.cancel();
|
||||
_adapterStateStateSubscription?.cancel();
|
||||
_connectionStateSubscription?.cancel();
|
||||
|
||||
// 重置状态
|
||||
_mtuSize = 20;
|
||||
connectDeviceName = '';
|
||||
connectDeviceMacAddress = '';
|
||||
bluetoothConnectDevice = null;
|
||||
scanDevices.clear();
|
||||
allData.clear();
|
||||
lastTimeData.clear();
|
||||
}
|
||||
}
|
||||
|
||||
48
lib/blue/io_protocol/io_getDeviceModel.dart
Normal file
@ -0,0 +1,48 @@
|
||||
|
||||
import 'dart:convert';
|
||||
|
||||
import '../io_reply.dart';
|
||||
import '../io_sender.dart';
|
||||
import '../io_tool/io_tool.dart';
|
||||
import '../io_type.dart';
|
||||
|
||||
class GetDeviceModelCommand extends SenderProtocol {
|
||||
GetDeviceModelCommand({
|
||||
this.lockID,
|
||||
}) : super(CommandType.getDeviceModel);
|
||||
String? lockID;
|
||||
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'GetDeviceModelCommand{lockID: $lockID}';
|
||||
}
|
||||
|
||||
@override
|
||||
List<int> messageDetail() {
|
||||
List<int> data = [];
|
||||
|
||||
// 指令类型
|
||||
final int type = commandType!.typeValue;
|
||||
final double typeDouble = type / 256;
|
||||
final int type1 = typeDouble.toInt();
|
||||
final int type2 = type % 256;
|
||||
data.add(type1);
|
||||
data.add(type2);
|
||||
|
||||
final int length = utf8.encode(lockID!).length;
|
||||
data.addAll(utf8.encode(lockID!));
|
||||
data = getFixedLengthList(data, 40 - length);
|
||||
|
||||
printLog(data);
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
class GetDeviceModelReply extends Reply {
|
||||
GetDeviceModelReply.parseData(CommandType commandType, List<int> dataDetail)
|
||||
: super.parseData(commandType, dataDetail) {
|
||||
status = dataDetail[2];
|
||||
data = dataDetail;
|
||||
}
|
||||
}
|
||||
74
lib/blue/io_protocol/io_readRegisterKey.dart
Normal file
@ -0,0 +1,74 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import '../io_tool/io_tool.dart';
|
||||
import '../sm4Encipher/sm4.dart';
|
||||
import '../io_reply.dart';
|
||||
import '../io_sender.dart';
|
||||
import '../io_type.dart';
|
||||
import 'package:crypto/crypto.dart' as crypto;
|
||||
|
||||
/// 读取注册密钥
|
||||
class SenderReadRegisterKeyCommand extends SenderProtocol {
|
||||
SenderReadRegisterKeyCommand({
|
||||
this.lockID,
|
||||
this.token,
|
||||
this.needAuthor,
|
||||
this.publicKey,
|
||||
this.privateKey,
|
||||
}) : super(CommandType.readRegisterKey);
|
||||
|
||||
String? lockID;
|
||||
|
||||
List<int>? token;
|
||||
int? needAuthor;
|
||||
List<int>? publicKey;
|
||||
List<int>? privateKey;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'SenderReadRegisterKeyCommand{ lockID: $lockID, token: $token, '
|
||||
'needAuthor: $needAuthor, publicKey: $publicKey, '
|
||||
'privateKey: $privateKey}';
|
||||
}
|
||||
|
||||
@override
|
||||
List<int> messageDetail() {
|
||||
List<int> data = <int>[];
|
||||
List<int> ebcData = <int>[];
|
||||
|
||||
// 指令类型
|
||||
final int type = commandType!.typeValue;
|
||||
final double typeDouble = type / 256;
|
||||
final int type1 = typeDouble.toInt();
|
||||
final int type2 = type % 256;
|
||||
data.add(type1);
|
||||
data.add(type2);
|
||||
|
||||
// 锁id 40
|
||||
final int lockIDLength = utf8.encode(lockID!).length;
|
||||
data.addAll(utf8.encode(lockID!));
|
||||
data = getFixedLengthList(data, 40 - lockIDLength);
|
||||
|
||||
if ((data.length % 16) != 0) {
|
||||
final int add = 16 - data.length % 16;
|
||||
for (int i = 0; i < add; i++) {
|
||||
data.add(0);
|
||||
}
|
||||
}
|
||||
|
||||
printLog(data);
|
||||
|
||||
ebcData = SM4.encrypt(data, key: privateKey, mode: SM4CryptoMode.ECB);
|
||||
return ebcData;
|
||||
}
|
||||
}
|
||||
|
||||
class SenderReadRegisterKeyCommandReply extends Reply {
|
||||
SenderReadRegisterKeyCommandReply.parseData(CommandType commandType, List<int> dataDetail)
|
||||
: super.parseData(commandType, dataDetail) {
|
||||
data = dataDetail;
|
||||
|
||||
final int status = data[6];
|
||||
errorWithStstus(status);
|
||||
}
|
||||
}
|
||||
54
lib/blue/io_protocol/io_readVoicePackageFinalResult.dart
Normal file
@ -0,0 +1,54 @@
|
||||
import 'dart:convert';
|
||||
import 'dart:typed_data';
|
||||
|
||||
import 'package:crypto/crypto.dart' as crypto;
|
||||
|
||||
import '../io_reply.dart';
|
||||
import '../io_sender.dart';
|
||||
import '../io_tool/io_tool.dart';
|
||||
import '../io_type.dart';
|
||||
import '../sm4Encipher/sm4.dart';
|
||||
|
||||
//oat升级
|
||||
class ReadLockCurrentVoicePacket extends SenderProtocol {
|
||||
ReadLockCurrentVoicePacket({
|
||||
this.lockID,
|
||||
}) : super(CommandType.readLockCurrentVoicePacket);
|
||||
String? lockID;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'ReadLockCurrentVoicePacket{lockID: $lockID}';
|
||||
}
|
||||
|
||||
@override
|
||||
List<int> messageDetail() {
|
||||
List<int> data = <int>[];
|
||||
|
||||
// 指令类型
|
||||
final int type = commandType!.typeValue;
|
||||
final double typeDouble = type / 256;
|
||||
final int type1 = typeDouble.toInt();
|
||||
final int type2 = type % 256;
|
||||
data.add(type1);
|
||||
data.add(type2);
|
||||
|
||||
// 锁id 40
|
||||
final int lockIDLength = utf8.encode(lockID!).length;
|
||||
data.addAll(utf8.encode(lockID!));
|
||||
data = getFixedLengthList(data, 40 - lockIDLength);
|
||||
|
||||
printLog(data);
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
class ReadLockCurrentVoicePacketReply extends Reply {
|
||||
ReadLockCurrentVoicePacketReply.parseData(
|
||||
CommandType commandType, List<int> dataDetail)
|
||||
: super.parseData(commandType, dataDetail) {
|
||||
data = dataDetail;
|
||||
status = data[2];
|
||||
errorWithStstus(status);
|
||||
}
|
||||
}
|
||||
106
lib/blue/io_protocol/io_sendAuthorizationCode.dart
Normal file
@ -0,0 +1,106 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import '../io_tool/io_tool.dart';
|
||||
import '../sm4Encipher/sm4.dart';
|
||||
import '../io_reply.dart';
|
||||
import '../io_sender.dart';
|
||||
import '../io_type.dart';
|
||||
import 'package:crypto/crypto.dart' as crypto;
|
||||
|
||||
/// 发送授权码
|
||||
class SenderAuthorizationCodeCommand extends SenderProtocol {
|
||||
SenderAuthorizationCodeCommand({
|
||||
this.lockID,
|
||||
this.uuid,
|
||||
this.key,
|
||||
this.mac,
|
||||
this.platform,
|
||||
this.utcTimeStamp,
|
||||
this.token,
|
||||
this.needAuthor,
|
||||
this.publicKey,
|
||||
this.privateKey,
|
||||
}) : super(CommandType.sendAuthorizationCode);
|
||||
|
||||
String? lockID;
|
||||
String? uuid;
|
||||
String? key;
|
||||
String? mac;
|
||||
int? platform; //0:锁通通;1:涂鸦智能
|
||||
int? utcTimeStamp;
|
||||
|
||||
List<int>? token;
|
||||
int? needAuthor;
|
||||
List<int>? publicKey;
|
||||
List<int>? privateKey;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'SenderAuthorizationCodeCommand{ lockID: $lockID, token: $token, '
|
||||
'needAuthor: $needAuthor, publicKey: $publicKey, '
|
||||
'privateKey: $privateKey}';
|
||||
}
|
||||
|
||||
@override
|
||||
List<int> messageDetail() {
|
||||
List<int> data = <int>[];
|
||||
List<int> ebcData = <int>[];
|
||||
|
||||
// 指令类型
|
||||
final int type = commandType!.typeValue;
|
||||
final double typeDouble = type / 256;
|
||||
final int type1 = typeDouble.toInt();
|
||||
final int type2 = type % 256;
|
||||
data.add(type1);
|
||||
data.add(type2);
|
||||
|
||||
// 锁id 40
|
||||
final int lockIDLength = utf8.encode(lockID!).length;
|
||||
data.addAll(utf8.encode(lockID!));
|
||||
data = getFixedLengthList(data, 40 - lockIDLength);
|
||||
|
||||
// uuid 40
|
||||
final int uuidLength = utf8.encode(uuid!).length;
|
||||
data.addAll(utf8.encode(uuid!));
|
||||
data = getFixedLengthList(data, 40 - uuidLength);
|
||||
|
||||
// key 40
|
||||
final int keyLength = utf8.encode(key!).length;
|
||||
data.addAll(utf8.encode(key!));
|
||||
data = getFixedLengthList(data, 40 - keyLength);
|
||||
|
||||
// mac 40
|
||||
final int macLength = utf8.encode(mac!).length;
|
||||
data.addAll(utf8.encode(mac!));
|
||||
data = getFixedLengthList(data, 40 - macLength);
|
||||
|
||||
data.add(platform!);
|
||||
|
||||
data.add((utcTimeStamp! & 0xff000000) >> 24);
|
||||
data.add((utcTimeStamp! & 0xff0000) >> 16);
|
||||
data.add((utcTimeStamp! & 0xff00) >> 8);
|
||||
data.add(utcTimeStamp! & 0xff);
|
||||
|
||||
if ((data.length % 16) != 0) {
|
||||
final int add = 16 - data.length % 16;
|
||||
for (int i = 0; i < add; i++) {
|
||||
data.add(0);
|
||||
}
|
||||
}
|
||||
|
||||
printLog(data);
|
||||
|
||||
ebcData = SM4.encrypt(data, key: privateKey, mode: SM4CryptoMode.ECB);
|
||||
return ebcData;
|
||||
}
|
||||
}
|
||||
|
||||
class SenderAuthorizationCodeCommandReply extends Reply {
|
||||
SenderAuthorizationCodeCommandReply.parseData(CommandType commandType, List<int> dataDetail)
|
||||
: super.parseData(commandType, dataDetail) {
|
||||
data = dataDetail;
|
||||
|
||||
final int status = data[6];
|
||||
errorWithStstus(status);
|
||||
}
|
||||
}
|
||||
61
lib/blue/io_protocol/io_setVoicePackageFinalResult.dart
Normal file
@ -0,0 +1,61 @@
|
||||
import 'dart:convert';
|
||||
import 'dart:typed_data';
|
||||
|
||||
import 'package:crypto/crypto.dart' as crypto;
|
||||
|
||||
import '../io_reply.dart';
|
||||
import '../io_sender.dart';
|
||||
import '../io_tool/io_tool.dart';
|
||||
import '../io_type.dart';
|
||||
import '../sm4Encipher/sm4.dart';
|
||||
|
||||
//oat升级
|
||||
class SetVoicePackageFinalResult extends SenderProtocol {
|
||||
SetVoicePackageFinalResult({
|
||||
this.lockID,
|
||||
this.languageCode,
|
||||
}) : super(CommandType.setLockCurrentVoicePacket);
|
||||
String? lockID;
|
||||
String? languageCode;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'SetVoicePackageFinalResult{lockID: $lockID, languageCode: $languageCode}';
|
||||
}
|
||||
|
||||
@override
|
||||
List<int> messageDetail() {
|
||||
List<int> data = <int>[];
|
||||
|
||||
// 指令类型
|
||||
final int type = commandType!.typeValue;
|
||||
final double typeDouble = type / 256;
|
||||
final int type1 = typeDouble.toInt();
|
||||
final int type2 = type % 256;
|
||||
data.add(type1);
|
||||
data.add(type2);
|
||||
|
||||
// 锁id 40
|
||||
final int lockIDLength = utf8.encode(lockID!).length;
|
||||
data.addAll(utf8.encode(lockID!));
|
||||
data = getFixedLengthList(data, 40 - lockIDLength);
|
||||
|
||||
//languageCode 20
|
||||
final int languageCodeLength = utf8.encode(languageCode!).length;
|
||||
data.addAll(utf8.encode(languageCode!));
|
||||
data = getFixedLengthList(data, 20 - languageCodeLength);
|
||||
|
||||
printLog(data);
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
class SetVoicePackageFinalResultReply extends Reply {
|
||||
SetVoicePackageFinalResultReply.parseData(
|
||||
CommandType commandType, List<int> dataDetail)
|
||||
: super.parseData(commandType, dataDetail) {
|
||||
data = dataDetail;
|
||||
status = data[2];
|
||||
errorWithStstus(status);
|
||||
}
|
||||
}
|
||||
163
lib/blue/io_protocol/io_voicePackageConfigure.dart
Normal file
@ -0,0 +1,163 @@
|
||||
import 'dart:convert';
|
||||
import 'dart:typed_data';
|
||||
|
||||
import 'package:crypto/crypto.dart' as crypto;
|
||||
|
||||
import '../io_reply.dart';
|
||||
import '../io_sender.dart';
|
||||
import '../io_tool/io_tool.dart';
|
||||
import '../io_type.dart';
|
||||
import '../sm4Encipher/sm4.dart';
|
||||
|
||||
//oat升级
|
||||
class VoicePackageConfigure extends SenderProtocol {
|
||||
VoicePackageConfigure(
|
||||
{this.lockID,
|
||||
this.userID,
|
||||
this.keyID,
|
||||
this.platform,
|
||||
this.product,
|
||||
this.fwSize,
|
||||
this.fwMD5,
|
||||
this.needAuthor,
|
||||
this.signKey,
|
||||
this.privateKey,
|
||||
this.token,
|
||||
this.encrypt = true})
|
||||
: super(CommandType.startVoicePackageConfigure);
|
||||
String? lockID;
|
||||
String? userID;
|
||||
String? keyID;
|
||||
int? platform;
|
||||
int? product;
|
||||
int? fwSize;
|
||||
String? fwMD5;
|
||||
int? needAuthor;
|
||||
List<int>? signKey;
|
||||
List<int>? privateKey;
|
||||
List<int>? token;
|
||||
bool encrypt;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'VoicePackageConfigure{lockID: $lockID, userID: $userID, '
|
||||
'keyID: $keyID, platform: $platform, product: $product, '
|
||||
' fwSize: $fwSize, '
|
||||
'fwMD5: $fwMD5, needAuthor: $needAuthor, signKey: $signKey, '
|
||||
'privateKey: $privateKey, token: $token}';
|
||||
}
|
||||
|
||||
@override
|
||||
int identifierValue() {
|
||||
if (encrypt) {
|
||||
return super.identifierValue();
|
||||
} else {
|
||||
return 0x20;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
List<int> messageDetail() {
|
||||
List<int> data = <int>[];
|
||||
List<int> ebcData = <int>[];
|
||||
|
||||
// 指令类型
|
||||
final int type = commandType!.typeValue;
|
||||
final double typeDouble = type / 256;
|
||||
final int type1 = typeDouble.toInt();
|
||||
final int type2 = type % 256;
|
||||
data.add(type1);
|
||||
data.add(type2);
|
||||
|
||||
// 锁id 40
|
||||
final int lockIDLength = utf8.encode(lockID!).length;
|
||||
data.addAll(utf8.encode(lockID!));
|
||||
data = getFixedLengthList(data, 40 - lockIDLength);
|
||||
|
||||
//userID 20
|
||||
final int userIDLength = utf8.encode(userID!).length;
|
||||
data.addAll(utf8.encode(userID!));
|
||||
data = getFixedLengthList(data, 20 - userIDLength);
|
||||
|
||||
//platform 2
|
||||
final int platform0 = (platform! & 0xFF00) >> 8;
|
||||
final int platform1 = platform! & 0xFF;
|
||||
data.add(platform0);
|
||||
data.add(platform1);
|
||||
|
||||
//product 2
|
||||
data.addAll(<int>[0, 1]); //先默认是 01
|
||||
|
||||
|
||||
//fwSize 4
|
||||
final ByteData bytes = ByteData(4); // 创建一个长度为4的字节数据
|
||||
bytes.setInt32(0, fwSize!);
|
||||
final List<int> byteList = bytes.buffer.asUint8List();
|
||||
data.addAll(byteList);
|
||||
|
||||
// 创建一个16字节的字节数组
|
||||
final Uint8List result = Uint8List(16);
|
||||
// 将每个十六进制字符转换为4位二进制数据,并将其存储到结果字节数组中
|
||||
for (int i = 0; i < fwMD5!.length; i += 2) {
|
||||
final String hex = fwMD5!.substring(i, i + 2);
|
||||
final int byteValue = int.parse(hex, radix: 16);
|
||||
result[i ~/ 2] = byteValue;
|
||||
}
|
||||
data.addAll(result);
|
||||
// token 长度4 首次请求 Token 填 0,如果锁需要鉴权 操作者身份,则会分配动态口令并在应答消息中返回,二次请求时带上。 当token失效或者第一次发送的时候token为0
|
||||
data.addAll(token!);
|
||||
if (needAuthor == 0) {
|
||||
//AuthCodeLen 1
|
||||
data.add(0);
|
||||
} else {
|
||||
final List<int> authCodeData = <int>[];
|
||||
|
||||
//KeyID
|
||||
authCodeData.addAll(utf8.encode(keyID!));
|
||||
|
||||
//UserID
|
||||
authCodeData.addAll(utf8.encode(userID!));
|
||||
|
||||
//token 4 首次请求 Token 填 0,如果锁需要鉴权操作者身份,则会分配动态口令并在应答消息中返回,二次请求时带上。
|
||||
authCodeData.addAll(token ?? <int>[]);
|
||||
|
||||
authCodeData.addAll(signKey ?? <int>[]);
|
||||
|
||||
// 把KeyID、authUserID、时间戳、公钥通过md5加密之后就是authCode
|
||||
final crypto.Digest authCode = crypto.md5.convert(authCodeData);
|
||||
|
||||
data.add(authCode.bytes.length);
|
||||
data.addAll(authCode.bytes);
|
||||
}
|
||||
|
||||
if ((data.length % 16) != 0) {
|
||||
final int add = 16 - data.length % 16;
|
||||
for (int i = 0; i < add; i++) {
|
||||
data.add(0);
|
||||
}
|
||||
}
|
||||
printLog(data);
|
||||
|
||||
if (encrypt) {
|
||||
// 拿到数据之后通过LockId进行SM4 ECB加密 key:544d485f633335373034383064613864
|
||||
ebcData = SM4.encrypt(data, key: privateKey, mode: SM4CryptoMode.ECB);
|
||||
return ebcData;
|
||||
} else {
|
||||
data.add(0);
|
||||
return data;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class VoicePackageConfigureReply extends Reply {
|
||||
VoicePackageConfigureReply.parseData(
|
||||
CommandType commandType, List<int> dataDetail)
|
||||
: super.parseData(commandType, dataDetail) {
|
||||
data = dataDetail;
|
||||
token = data.sublist(2, 6);
|
||||
status = data[6];
|
||||
errorWithStstus(status);
|
||||
}
|
||||
|
||||
List<int> token = <int>[];
|
||||
}
|
||||
73
lib/blue/io_protocol/io_voicePackageConfigureProcess.dart
Normal file
@ -0,0 +1,73 @@
|
||||
import 'dart:typed_data';
|
||||
|
||||
import '../io_reply.dart';
|
||||
import '../io_sender.dart';
|
||||
import '../io_type.dart';
|
||||
|
||||
//oat升级
|
||||
class VoicePackageConfigureProcess extends SenderProtocol {
|
||||
VoicePackageConfigureProcess({
|
||||
this.index,
|
||||
this.size,
|
||||
this.data,
|
||||
}) : super(CommandType.voicePackageConfigureProcess);
|
||||
int? index;
|
||||
int? size;
|
||||
List<int>? data;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'VoicePackageConfigureProcess{index: $index, size: $size, data: $data}';
|
||||
}
|
||||
|
||||
@override
|
||||
List<int> messageDetail() {
|
||||
final List<int> data = [];
|
||||
|
||||
// 指令类型
|
||||
final int type = commandType!.typeValue;
|
||||
final double typeDouble = type / 256;
|
||||
final int type1 = typeDouble.toInt();
|
||||
final int type2 = type % 256;
|
||||
data.add(type1);
|
||||
data.add(type2);
|
||||
|
||||
//index 2
|
||||
final ByteData indexBytes = ByteData(2); // 创建一个长度为4的字节数据
|
||||
indexBytes.setInt16(0, index!);
|
||||
final List<int> indexList = indexBytes.buffer.asUint8List();
|
||||
data.addAll(indexList);
|
||||
|
||||
//size 2
|
||||
final ByteData bytes = ByteData(2); // 创建一个长度为4的字节数据
|
||||
bytes.setInt16(0, size!);
|
||||
final List<int> byteList = bytes.buffer.asUint8List();
|
||||
data.addAll(byteList);
|
||||
|
||||
data.addAll(this.data!);
|
||||
|
||||
printLog(data);
|
||||
//不加密
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
class VoicePackageConfigureProcessReply extends Reply {
|
||||
VoicePackageConfigureProcessReply.parseData(
|
||||
CommandType commandType, List<int> dataDetail)
|
||||
: super.parseData(commandType, dataDetail) {
|
||||
data = dataDetail;
|
||||
status = data[2];
|
||||
errorWithStstus(status);
|
||||
}
|
||||
}
|
||||
|
||||
class VoicePackageConfigureConfirmationReply extends Reply {
|
||||
VoicePackageConfigureConfirmationReply.parseData(
|
||||
CommandType commandType, List<int> dataDetail)
|
||||
: super.parseData(commandType, dataDetail) {
|
||||
data = dataDetail;
|
||||
status = data[2];
|
||||
errorWithStstus(status);
|
||||
}
|
||||
}
|
||||
@ -27,6 +27,11 @@ class EventSendModel {
|
||||
Uuid? serviceId;
|
||||
Uuid? characteristicId;
|
||||
bool? allowLongWrite = false;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'EventSendModel{data: $data, topic: $topic, sendChannel: $sendChannel, deviceId: $deviceId, serviceId: $serviceId, characteristicId: $characteristicId, allowLongWrite: $allowLongWrite}';
|
||||
}
|
||||
}
|
||||
|
||||
///接收数据类
|
||||
|
||||
@ -288,16 +288,27 @@ String asciiString(List<int> codeUnits) {
|
||||
}
|
||||
|
||||
String utf8String(List<int> codeUnits) {
|
||||
codeUnits.reversed;
|
||||
final List<int> uniqueList = <int>[];
|
||||
for (int i = 0; i < codeUnits.length; i++) {
|
||||
if (codeUnits[i] != 0) {
|
||||
uniqueList.add(codeUnits[i]);
|
||||
}
|
||||
try {
|
||||
// 只去除结尾的0(常见填充方式)
|
||||
int realLen = codeUnits.indexWhere((b) => b == 0);
|
||||
List<int> validBytes = (realLen == -1) ? codeUnits : codeUnits.sublist(0, realLen);
|
||||
return utf8.decode(validBytes);
|
||||
} catch (e) {
|
||||
// 容错处理
|
||||
return '';
|
||||
}
|
||||
uniqueList.reversed;
|
||||
return utf8.decode(uniqueList).toString();
|
||||
}
|
||||
// String utf8String(List<int> codeUnits) {
|
||||
// codeUnits.reversed;
|
||||
// final List<int> uniqueList = <int>[];
|
||||
// for (int i = 0; i < codeUnits.length; i++) {
|
||||
// if (codeUnits[i] != 0) {
|
||||
// uniqueList.add(codeUnits[i]);
|
||||
// }
|
||||
// }
|
||||
// uniqueList.reversed;
|
||||
// return utf8.decode(uniqueList).toString();
|
||||
// }
|
||||
|
||||
bool compareTwoList({List<int>? list1, List<int>? list2}) {
|
||||
if (list1!.length != list2!.length) {
|
||||
|
||||
@ -9,10 +9,10 @@ List<String> getDeviceType(DeviceType deviceType) {
|
||||
List<String> t = ['758824'];
|
||||
switch (deviceType) {
|
||||
case DeviceType.blue:
|
||||
t = ['758824', '75', '768824', '76'];
|
||||
t = ['758824', '75', '768824', '76', '24'];
|
||||
break;
|
||||
case DeviceType.gateway:
|
||||
t = ['758825'];
|
||||
t = ['758825', '25'];
|
||||
break;
|
||||
}
|
||||
return t;
|
||||
@ -41,12 +41,20 @@ enum CommandType {
|
||||
startOATUpgrade, //OTA升级开始 0x30E0
|
||||
processOTAUpgrade, //OTA升级过程 0x30E1
|
||||
confirmationOTAUpgrade, //OTA升级确认 0x30E2
|
||||
startVoicePackageConfigure, //语音包配置开始 0x30A1
|
||||
voicePackageConfigureProcess, //语音包配置过程 0x30A2
|
||||
voicePackageConfigureConfirmation, //语音包配置确认 0x30A3
|
||||
readLockCurrentVoicePacket, //读取锁当前语音包 0x30A4
|
||||
setLockCurrentVoicePacket, //设置锁当前语音包 0x30A5
|
||||
getDeviceModel, //读取设备型号 (已废弃)0x30A4
|
||||
|
||||
gatewayConfiguringWifi, //网关配网 0x30F4
|
||||
gatewayConfiguringWifiResult, //网关配网结果 0x30F5
|
||||
gatewayGetWifiList, //网关获取附近的wifi列表 0x30F6
|
||||
gatewayGetWifiListResult, //网关获取附近的wifi列表结果 0x30F7
|
||||
gatewayGetStatus, //获取网关状态 0x30F8
|
||||
readRegisterKey, //读取注册密钥 0x30A7
|
||||
sendAuthorizationCode, //发送授权码 0x30A6
|
||||
|
||||
generalExtendedCommond, // 通用扩展指令 = 0x3030
|
||||
gecChangeAdministratorPassword, // 通用扩展指令子命令-修改管理员密码 = 2
|
||||
@ -189,6 +197,31 @@ extension ExtensionCommandType on CommandType {
|
||||
type = CommandType.confirmationOTAUpgrade;
|
||||
}
|
||||
break;
|
||||
case 0x30A1:
|
||||
{
|
||||
type = CommandType.startVoicePackageConfigure;
|
||||
}
|
||||
break;
|
||||
case 0x30A2:
|
||||
{
|
||||
type = CommandType.voicePackageConfigureProcess;
|
||||
}
|
||||
break;
|
||||
case 0x30A3:
|
||||
{
|
||||
type = CommandType.voicePackageConfigureConfirmation;
|
||||
}
|
||||
break;
|
||||
case 0x30A4:
|
||||
{
|
||||
type = CommandType.readLockCurrentVoicePacket;
|
||||
}
|
||||
break;
|
||||
case 0x30A5:
|
||||
{
|
||||
type = CommandType.setLockCurrentVoicePacket;
|
||||
}
|
||||
break;
|
||||
case 0x30F4:
|
||||
{
|
||||
type = CommandType.gatewayConfiguringWifi;
|
||||
@ -214,6 +247,16 @@ extension ExtensionCommandType on CommandType {
|
||||
type = CommandType.gatewayGetStatus;
|
||||
}
|
||||
break;
|
||||
case 0x30A6:
|
||||
{
|
||||
type = CommandType.sendAuthorizationCode;
|
||||
}
|
||||
break;
|
||||
case 0x30A7:
|
||||
{
|
||||
type = CommandType.readRegisterKey;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
{
|
||||
type = CommandType.readStarLockStatusInfo;
|
||||
@ -307,6 +350,27 @@ extension ExtensionCommandType on CommandType {
|
||||
case CommandType.gatewayGetStatus:
|
||||
type = 0x30F8;
|
||||
break;
|
||||
case CommandType.startVoicePackageConfigure:
|
||||
type = 0x30A1;
|
||||
break;
|
||||
case CommandType.voicePackageConfigureProcess:
|
||||
type = 0x30A2;
|
||||
break;
|
||||
case CommandType.voicePackageConfigureConfirmation:
|
||||
type = 0x30A3;
|
||||
break;
|
||||
case CommandType.readLockCurrentVoicePacket:
|
||||
type = 0x30A4;
|
||||
break;
|
||||
case CommandType.setLockCurrentVoicePacket:
|
||||
type = 0x30A5;
|
||||
break;
|
||||
case CommandType.sendAuthorizationCode:
|
||||
type = 0x30A6;
|
||||
break;
|
||||
case CommandType.readRegisterKey:
|
||||
type = 0x30A7;
|
||||
break;
|
||||
default:
|
||||
type = 0x300A;
|
||||
break;
|
||||
@ -322,9 +386,12 @@ extension ExtensionCommandType on CommandType {
|
||||
switch (this) {
|
||||
case CommandType.getLockPublicKey:
|
||||
case CommandType.processOTAUpgrade:
|
||||
case CommandType.voicePackageConfigureProcess:
|
||||
case CommandType.gatewayGetWifiList:
|
||||
case CommandType.gatewayConfiguringWifi:
|
||||
case CommandType.gatewayGetStatus:
|
||||
case CommandType.readLockCurrentVoicePacket:
|
||||
case CommandType.setLockCurrentVoicePacket:
|
||||
//不加密
|
||||
type = 0x20;
|
||||
break;
|
||||
@ -428,6 +495,27 @@ extension ExtensionCommandType on CommandType {
|
||||
case 0x30F8:
|
||||
t = '获取网关状态';
|
||||
break;
|
||||
case 0x30A1:
|
||||
t = '语音包配置开始';
|
||||
break;
|
||||
case 0x30A2:
|
||||
t = '语音包配置过程';
|
||||
break;
|
||||
case 0x30A3:
|
||||
t = '语音包配置确认';
|
||||
break;
|
||||
case 0x30A4:
|
||||
t = '读取锁当前语音包';
|
||||
break;
|
||||
case 0x30A5:
|
||||
t = '设置锁当前语音包';
|
||||
break;
|
||||
case 0x30A6:
|
||||
t = '发送授权码';
|
||||
break;
|
||||
case 0x30A7:
|
||||
t = '读取注册密钥';
|
||||
break;
|
||||
default:
|
||||
t = '读星锁状态信息';
|
||||
break;
|
||||
|
||||
@ -12,15 +12,22 @@ import 'package:star_lock/blue/io_protocol/io_cleanUpUsers.dart';
|
||||
import 'package:star_lock/blue/io_protocol/io_deletUser.dart';
|
||||
import 'package:star_lock/blue/io_protocol/io_editUser.dart';
|
||||
import 'package:star_lock/blue/io_protocol/io_factoryDataReset.dart';
|
||||
import 'package:star_lock/blue/io_protocol/io_getDeviceModel.dart';
|
||||
import 'package:star_lock/blue/io_protocol/io_otaUpgrade.dart';
|
||||
import 'package:star_lock/blue/io_protocol/io_processOtaUpgrade.dart';
|
||||
import 'package:star_lock/blue/io_protocol/io_readAdminPassword.dart';
|
||||
import 'package:star_lock/blue/io_protocol/io_readRegisterKey.dart';
|
||||
import 'package:star_lock/blue/io_protocol/io_readSupportFunctionsNoParameters.dart';
|
||||
import 'package:star_lock/blue/io_protocol/io_readSupportFunctionsWithParameters.dart';
|
||||
import 'package:star_lock/blue/io_protocol/io_readVoicePackageFinalResult.dart';
|
||||
import 'package:star_lock/blue/io_protocol/io_referEventRecordTime.dart';
|
||||
import 'package:star_lock/blue/io_protocol/io_sendAuthorizationCode.dart';
|
||||
import 'package:star_lock/blue/io_protocol/io_setSupportFunctionsNoParameters.dart';
|
||||
import 'package:star_lock/blue/io_protocol/io_setSupportFunctionsWithParameters.dart';
|
||||
import 'package:star_lock/blue/io_protocol/io_setVoicePackageFinalResult.dart';
|
||||
import 'package:star_lock/blue/io_protocol/io_timing.dart';
|
||||
import 'package:star_lock/blue/io_protocol/io_voicePackageConfigure.dart';
|
||||
import 'package:star_lock/blue/io_protocol/io_voicePackageConfigureProcess.dart';
|
||||
|
||||
import '../tools/storage.dart';
|
||||
import 'io_gateway/io_gateway_getStatus.dart';
|
||||
@ -61,16 +68,16 @@ class CommandReciverManager {
|
||||
final int dataSize = data.length;
|
||||
|
||||
// 验证CRC校验
|
||||
if (dataSize >= 2) {
|
||||
final int calculatedCrc =
|
||||
_calculateCRC16(data.sublist(0, dataSize - 2), dataSize - 2);
|
||||
final int receivedCrc = (data[dataSize - 2] << 8) | data[dataSize - 1];
|
||||
|
||||
if (calculatedCrc != receivedCrc) {
|
||||
AppLog.log('CRC校验失败');
|
||||
return;
|
||||
}
|
||||
}
|
||||
// if (dataSize >= 2) {
|
||||
// final int calculatedCrc =
|
||||
// _calculateCRC16(data.sublist(0, dataSize - 2), dataSize - 2);
|
||||
// final int receivedCrc = (data[dataSize - 2] << 8) | data[dataSize - 1];
|
||||
//
|
||||
// if (calculatedCrc != receivedCrc) {
|
||||
// throw Exception('CRC校验失败');
|
||||
// return;
|
||||
// }
|
||||
// }
|
||||
// 当小于包头加起来13个字节
|
||||
if (dataSize < 13) {
|
||||
return;
|
||||
@ -292,6 +299,52 @@ class CommandReciverManager {
|
||||
reply = GatewayGetStatusReply.parseData(commandType, data);
|
||||
}
|
||||
break;
|
||||
case CommandType.getDeviceModel:
|
||||
{
|
||||
reply = GetDeviceModelReply.parseData(commandType, data);
|
||||
}
|
||||
break;
|
||||
case CommandType.startVoicePackageConfigure:
|
||||
{
|
||||
reply = VoicePackageConfigureReply.parseData(commandType, data);
|
||||
}
|
||||
break;
|
||||
case CommandType.voicePackageConfigureProcess:
|
||||
{
|
||||
reply =
|
||||
VoicePackageConfigureProcessReply.parseData(commandType, data);
|
||||
}
|
||||
break;
|
||||
case CommandType.voicePackageConfigureConfirmation:
|
||||
{
|
||||
reply = VoicePackageConfigureConfirmationReply.parseData(
|
||||
commandType, data);
|
||||
}
|
||||
break;
|
||||
case CommandType.readLockCurrentVoicePacket:
|
||||
{
|
||||
reply =
|
||||
ReadLockCurrentVoicePacketReply.parseData(commandType, data);
|
||||
}
|
||||
break;
|
||||
case CommandType.setLockCurrentVoicePacket:
|
||||
{
|
||||
reply =
|
||||
SetVoicePackageFinalResultReply.parseData(commandType, data);
|
||||
}
|
||||
break;
|
||||
case CommandType.readRegisterKey:
|
||||
{
|
||||
reply =
|
||||
SenderReadRegisterKeyCommandReply.parseData(commandType, data);
|
||||
}
|
||||
break;
|
||||
case CommandType.sendAuthorizationCode:
|
||||
{
|
||||
reply =
|
||||
SenderAuthorizationCodeCommandReply.parseData(commandType, data);
|
||||
}
|
||||
break;
|
||||
case CommandType.generalExtendedCommond:
|
||||
{
|
||||
// 子命令类型
|
||||
|
||||
@ -1,4 +1,3 @@
|
||||
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:star_lock/blue/entity/lock_user_no_list_entity.dart';
|
||||
@ -22,10 +21,10 @@ import 'io_tool/manager_event_bus.dart';
|
||||
import 'sender_data.dart';
|
||||
|
||||
class SenderBeforeDataManage {
|
||||
|
||||
factory SenderBeforeDataManage() => shareManager()!;
|
||||
|
||||
SenderBeforeDataManage._init();
|
||||
|
||||
static SenderBeforeDataManage? _manager;
|
||||
|
||||
static SenderBeforeDataManage? shareManager() {
|
||||
@ -42,6 +41,7 @@ class SenderBeforeDataManage {
|
||||
|
||||
// 监听设备返回的数据
|
||||
StreamSubscription<Reply>? _replySubscription;
|
||||
|
||||
// 是否是添加用户之前的调用
|
||||
bool isBeforeAddUser = true;
|
||||
|
||||
@ -123,14 +123,14 @@ class SenderBeforeDataManage {
|
||||
final int status = reply.data[6];
|
||||
switch (status) {
|
||||
case 0x00:
|
||||
//成功
|
||||
//成功
|
||||
CommonDataManage().initUserNo = 0;
|
||||
CommonDataManage().currentKeyInfo.initUserNo = 0;
|
||||
|
||||
_updateLockInitUserNo();
|
||||
break;
|
||||
case 0x06:
|
||||
//无权限
|
||||
//无权限
|
||||
final List<int> token = reply.data.sublist(2, 6);
|
||||
final List<String> strTokenList = changeIntListToStringList(token);
|
||||
Storage.setStringList(saveBlueToken, strTokenList);
|
||||
@ -139,17 +139,15 @@ class SenderBeforeDataManage {
|
||||
CommandSenderManager().sendNormalData(transferSmartLockData);
|
||||
break;
|
||||
default:
|
||||
//失败
|
||||
//失败
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//获取清除用户列表指令
|
||||
Future<List<int>> getCleanUpUsers({List<int>? tokenList}) async {
|
||||
final LockUserNoListEntity entity = await ApiRepository.to
|
||||
.getLockUserNoList(lockId: CommonDataManage().currentKeyInfo.lockId!);
|
||||
if (!entity.errorCode!.codeIsSuccessful ||
|
||||
(entity.data?.userNos ?? <int>[]).isEmpty) {
|
||||
final LockUserNoListEntity entity = await ApiRepository.to.getLockUserNoList(lockId: CommonDataManage().currentKeyInfo.lockId!);
|
||||
if (!entity.errorCode!.codeIsSuccessful || (entity.data?.userNos ?? <int>[]).isEmpty) {
|
||||
throw Exception('ApiRepository.to.getLockUserNoList 访问失败');
|
||||
}
|
||||
final List<String>? privateKey = await Storage.getStringList(saveBluePrivateKey);
|
||||
@ -197,27 +195,28 @@ class SenderBeforeDataManage {
|
||||
int endDateTime = 0;
|
||||
bool isRound = false;
|
||||
int useCountLimit = 0xffff;
|
||||
if(currentKeyInfo.keyType == XSConstantMacro.keyTypeTime){
|
||||
if (currentKeyInfo.keyType == XSConstantMacro.keyTypeTime) {
|
||||
// 限时
|
||||
startDateTime = currentKeyInfo.startDate! ~/ 1000;
|
||||
endDateTime = currentKeyInfo.endDate! ~/ 1000;
|
||||
}else if(currentKeyInfo.keyType == XSConstantMacro.keyTypeLoop){
|
||||
} else if (currentKeyInfo.keyType == XSConstantMacro.keyTypeLoop) {
|
||||
// 循环
|
||||
isRound = true;
|
||||
startTime = DateTime.fromMillisecondsSinceEpoch(currentKeyInfo.startDate!);
|
||||
endTime = DateTime.fromMillisecondsSinceEpoch(currentKeyInfo.endDate!);
|
||||
|
||||
startDateTime = DateTool().dateToTimestamp(DateTool().dateToYMDString(currentKeyInfo.startDate!.toString()), 1) ~/ 1000;
|
||||
endDateTime = (DateTool().dateToTimestamp(DateTool().dateToYMDString(currentKeyInfo.endDate!.toString()), 1) + CommonDataManage().dayLatestTime) ~/ 1000;
|
||||
}else if(currentKeyInfo.keyType == XSConstantMacro.keyTypeOnce){
|
||||
// 单次
|
||||
useCountLimit = 1;
|
||||
}
|
||||
endDateTime =
|
||||
(DateTool().dateToTimestamp(DateTool().dateToYMDString(currentKeyInfo.endDate!.toString()), 1) + CommonDataManage().dayLatestTime) ~/ 1000;
|
||||
} else if (currentKeyInfo.keyType == XSConstantMacro.keyTypeOnce) {
|
||||
// 单次
|
||||
useCountLimit = 1;
|
||||
}
|
||||
|
||||
// AppLog.log("startTime.hour:${startTime!.hour} startTime.minute:${startTime!.minute} endTime.hour:${endTime!.hour} endTime.minute:${endTime!.minute}}");
|
||||
// AppLog.log("startTime.hour:${startTime!.hour} startTime.minute:${startTime!.minute} endTime.hour:${endTime!.hour} endTime.minute:${endTime!.minute}}");
|
||||
final AddUserCommand addUserData = AddUserCommand(
|
||||
lockID: BlueManage().connectDeviceName,
|
||||
authUserID: currentKeyInfo.senderUserId!.toString(),
|
||||
authUserID: currentKeyInfo.senderUserId?.toString() ?? '1',
|
||||
keyID: currentKeyInfo.keyId.toString(),
|
||||
userID: await Storage.getUid(),
|
||||
openMode: 1,
|
||||
@ -226,10 +225,7 @@ class SenderBeforeDataManage {
|
||||
expireDate: endDateTime,
|
||||
useCountLimit: useCountLimit,
|
||||
isRound: isRound ? 1 : 0,
|
||||
weekRound: isRound
|
||||
? DateTool().accordingTheCycleIntoTheCorrespondingNumber(
|
||||
currentKeyInfo.weekDays!)
|
||||
: 0,
|
||||
weekRound: isRound ? DateTool().accordingTheCycleIntoTheCorrespondingNumber(currentKeyInfo.weekDays!) : 0,
|
||||
startHour: isRound ? startTime!.hour : 0,
|
||||
startMin: isRound ? startTime!.minute : 0,
|
||||
endHour: isRound ? endTime!.hour : 0,
|
||||
@ -271,8 +267,7 @@ class SenderBeforeDataManage {
|
||||
// 普通用户接收电子钥匙之后 更新锁用户NO
|
||||
Future<void> _updateLockUserNo(List<int> dataList) async {
|
||||
final LockNetTokenEntity entity = await ApiRepository.to.updateLockUserNo(
|
||||
keyId: CommonDataManage().currentKeyInfo.keyId.toString(),
|
||||
lockUserNo: CommonDataManage().currentKeyInfo.lockUserNo.toString());
|
||||
keyId: CommonDataManage().currentKeyInfo.keyId.toString(), lockUserNo: CommonDataManage().currentKeyInfo.lockUserNo.toString());
|
||||
if (entity.errorCode!.codeIsSuccessful) {
|
||||
eventBus.fire(RefreshLockListInfoDataEvent());
|
||||
eventBus.fire(LockAddUserSucceedEvent(<int>[0], 0));
|
||||
@ -281,9 +276,8 @@ class SenderBeforeDataManage {
|
||||
|
||||
// 更新锁用户InitUserNo
|
||||
Future<void> _updateLockInitUserNo() async {
|
||||
final LockNetTokenEntity entity = await ApiRepository.to.updateLockInitUserNo(
|
||||
lockId: CommonDataManage().currentKeyInfo.lockId ?? 0,
|
||||
initUserNo: CommonDataManage().currentKeyInfo.initUserNo ?? 0);
|
||||
final LockNetTokenEntity entity = await ApiRepository.to
|
||||
.updateLockInitUserNo(lockId: CommonDataManage().currentKeyInfo.lockId ?? 0, initUserNo: CommonDataManage().currentKeyInfo.initUserNo ?? 0);
|
||||
if (entity.errorCode!.codeIsSuccessful) {
|
||||
eventBus.fire(RefreshLockListInfoDataEvent());
|
||||
eventBus.fire(LockInitUserNoEvent());
|
||||
|
||||
@ -6,6 +6,8 @@ import 'package:star_lock/blue/io_protocol/io_deletUser.dart';
|
||||
import 'package:star_lock/blue/io_protocol/io_otaUpgrade.dart';
|
||||
import 'package:star_lock/blue/io_protocol/io_processOtaUpgrade.dart';
|
||||
import 'package:star_lock/blue/io_protocol/io_readAdminPassword.dart';
|
||||
import 'package:star_lock/blue/io_protocol/io_readRegisterKey.dart';
|
||||
import 'package:star_lock/blue/io_protocol/io_sendAuthorizationCode.dart';
|
||||
|
||||
import 'io_gateway/io_gateway_configuringWifi.dart';
|
||||
import 'io_gateway/io_gateway_getStatus.dart';
|
||||
@ -1109,10 +1111,7 @@ class IoSenderManage {
|
||||
|
||||
//ota 升级过程
|
||||
static void senderProcessOtaUpgradeCommand(
|
||||
{required int? index,
|
||||
required int? size,
|
||||
required List<int>? data,
|
||||
CommandSendCallBack? callBack}) {
|
||||
{required int? index, required int? size, required List<int>? data, CommandSendCallBack? callBack}) {
|
||||
CommandSenderManager().managerSendData(
|
||||
command: ProcessOtaUpgradeCommand(
|
||||
index: index,
|
||||
@ -1321,8 +1320,7 @@ class IoSenderManage {
|
||||
}
|
||||
|
||||
// 网关获取wifi列表
|
||||
static void gatewayGetWifiCommand(
|
||||
{required String? userID, CommandSendCallBack? callBack}) {
|
||||
static void gatewayGetWifiCommand({required String? userID, CommandSendCallBack? callBack}) {
|
||||
CommandSenderManager().managerSendData(
|
||||
command: GatewayGetWifiCommand(
|
||||
userID: userID,
|
||||
@ -1339,21 +1337,51 @@ class IoSenderManage {
|
||||
CommandSendCallBack? callBack}) {
|
||||
CommandSenderManager().managerSendData(
|
||||
command: GatewayConfiguringWifiCommand(
|
||||
ssid: ssid,
|
||||
password: password,
|
||||
gatewayConfigurationStr: gatewayConfigurationStr),
|
||||
ssid: ssid, password: password, gatewayConfigurationStr: gatewayConfigurationStr),
|
||||
isBeforeAddUser: true,
|
||||
callBack: callBack);
|
||||
}
|
||||
|
||||
// 获取网关状态
|
||||
static void gatewayGetStatusCommand(
|
||||
{required String? lockID,
|
||||
required String? userID,
|
||||
CommandSendCallBack? callBack}) {
|
||||
{required String? lockID, required String? userID, CommandSendCallBack? callBack}) {
|
||||
CommandSenderManager().managerSendData(
|
||||
command: GatewayGetStatusCommand(lockID: lockID, userID: userID),
|
||||
isBeforeAddUser: true,
|
||||
callBack: callBack);
|
||||
command: GatewayGetStatusCommand(lockID: lockID, userID: userID), isBeforeAddUser: true, callBack: callBack);
|
||||
}
|
||||
|
||||
// 读取注册密钥
|
||||
static void readRegisterKey({
|
||||
required String? lockID,
|
||||
CommandSendCallBack? callBack,
|
||||
}) {
|
||||
CommandSenderManager().managerSendData(
|
||||
command: SenderReadRegisterKeyCommand(lockID: lockID),
|
||||
isBeforeAddUser: true,
|
||||
callBack: callBack,
|
||||
);
|
||||
}
|
||||
|
||||
// 发送授权码
|
||||
static void sendAuthorizationCode({
|
||||
required String? lockID,
|
||||
required String? uuid,
|
||||
required String? key,
|
||||
required String? mac,
|
||||
required int? platform,
|
||||
required int? utcTimeStamp,
|
||||
CommandSendCallBack? callBack,
|
||||
}) {
|
||||
CommandSenderManager().managerSendData(
|
||||
command: SenderAuthorizationCodeCommand(
|
||||
lockID: lockID,
|
||||
uuid: uuid,
|
||||
key: key,
|
||||
mac: mac,
|
||||
platform: platform,
|
||||
utcTimeStamp: utcTimeStamp,
|
||||
),
|
||||
isBeforeAddUser: true,
|
||||
callBack: callBack,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@ -90,6 +90,7 @@ class XSConstantMacro {
|
||||
static int webBuyTypeVip = 3; //VIP购买
|
||||
static int webBuyTypeAuth = 4; //实名购买
|
||||
static int webBuyTypeShop = 5; //商城购买
|
||||
static int webBuyTypeCloudStorage = 6; //云存购买
|
||||
|
||||
//设备类型信息
|
||||
Future<Map<String, dynamic>> getDeviceInfoData() async {
|
||||
|
||||
@ -30,13 +30,11 @@ class Data {
|
||||
wechatServiceUrl = json['wechat_service_url'];
|
||||
appSiteUrl = json['app_site_url'];
|
||||
appVersionHistoryUrl = json['appVersionHistoryUrl'];
|
||||
isShowValueService = json['isShowValueService'];
|
||||
}
|
||||
|
||||
String? wechatServiceUrl;
|
||||
String? appSiteUrl;
|
||||
String? appVersionHistoryUrl;
|
||||
bool? isShowValueService;
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
|
||||