cocoapods-aqara-localzedLoader 0.1.16 → 0.1.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c557d47179504b09a3ce83e5249bc53770e57e8381afc9083fa98d3536787b44
4
- data.tar.gz: e27468da9cb5661d6b3c386b80086795331739e98cff87f4969064c25d0692a9
3
+ metadata.gz: 117721b779a2b5b9b4248aec75a4686764850213a52bfbff7ee030da4c9db6c2
4
+ data.tar.gz: 62ab2138d5a2b2feeeae988fb3c9708246f8127a4a5ed6abb315a56fd177481f
5
5
  SHA512:
6
- metadata.gz: bf0d7310384c515dc492b01409b9fae7fe2f52f90bd9410713edacce678130e5428cc1a36ba041fae7d96feada5fee9cb52400635311ee4611788c7b49b4e97e
7
- data.tar.gz: 2324c2bf0ae30d9c31bfb049698b6314d5233a40f81bcde8319c57629591093bd73e1d7e658d42ce5bd4d1d3d9c9123c7718dfd1c08925e456e4f4d6b2d3c8ea
6
+ metadata.gz: 4e4a48cb30a6165fd27c3a093527a3833e01563bc531cd2e62d4c05a864fa0670d054637ec4fcccd0e5710b6d42cdd76f088d76c7e5f3f52fd6d74e5d1fd3c00
7
+ data.tar.gz: 2f2ace5ab90667ec0929e8c5e66126839696d40bd69f4b8dc76f46271edb47586edb6039bdc9c5bb17ac6a55af19d276d6106589f592a5835526e8b894d19e65
@@ -3,9 +3,7 @@ import os, sys, stat
3
3
  import time
4
4
  import requests
5
5
  import zipfile
6
- import csv
7
6
  from typing import Optional
8
- from openpyxl import Workbook
9
7
 
10
8
 
11
9
  ######### 火山多语言 #############
@@ -268,30 +266,32 @@ class CrowdinPlatform():
268
266
  os.remove(zip_path)
269
267
 
270
268
  if self.project_id == DEFAULT_LIFE_PROJECT_ID:
271
- csv_path = find_life_csv_file(output_dir)
272
- if not csv_path:
273
- raise FileNotFoundError(f"未找到 Life 项目的 CSV 文件: {output_dir}")
274
-
269
+ life_xlsx_path = os.path.join(output_dir, DEFAULT_LIFE_SOURCE_FILE_NAME)
275
270
  xlsx_path = os.path.join(output_dir, DEFAULT_TARGET_FILE_NAME)
276
- convert_csv_to_xlsx(csv_path, xlsx_path)
271
+ if not os.path.exists(life_xlsx_path):
272
+ raise FileNotFoundError(f"未找到 Life 项目的 Excel 文件: {life_xlsx_path}")
273
+ os.replace(life_xlsx_path, xlsx_path)
274
+ print(f"已将 Life 多语言文件重命名为: {xlsx_path}")
277
275
 
278
276
  print(f"多语言文件已解压到: {output_dir}APP.xlsx")
279
277
 
280
278
  DEFAULT_LEGACY_PROJECT_ID = "71"
281
279
  DEFAULT_LIFE_PROJECT_ID = "85"
280
+ DEFAULT_LIFE_SOURCE_FILE_NAME = "APP_Life_APP.xlsx"
282
281
  DEFAULT_TARGET_FILE_NAME = "APP.xlsx"
283
282
 
284
283
  CROWDIN_PROJECTS = (
285
- ("crowdin_life.yml", DEFAULT_LIFE_PROJECT_ID),
286
- ("crowdin.yml", DEFAULT_LEGACY_PROJECT_ID),
284
+ ("crowdin_life.yml", DEFAULT_LIFE_PROJECT_ID, "AqaraLife"),
285
+ ("crowdin_space.yml", DEFAULT_LIFE_PROJECT_ID, "AqaraSpace"),
286
+ ("crowdin.yml", DEFAULT_LEGACY_PROJECT_ID, "AqaraHome"),
287
287
  )
288
288
 
289
289
 
290
290
  def resolve_crowdin_project(localizable_path: str) -> tuple[Optional[str], Optional[str]]:
291
- for config_name, project_id in CROWDIN_PROJECTS:
291
+ for config_name, project_id, app_dir in CROWDIN_PROJECTS:
292
292
  candidate_paths = (
293
293
  os.path.join(localizable_path, config_name),
294
- os.path.join(localizable_path, "AqaraHome", "Common", config_name),
294
+ os.path.join(localizable_path, app_dir, "Common", config_name),
295
295
  )
296
296
  for config_path in candidate_paths:
297
297
  if os.path.exists(config_path):
@@ -314,83 +314,6 @@ def resolve_crowdin_access_token(cli_token: Optional[str] = None) -> str:
314
314
  return access_token
315
315
 
316
316
 
317
- def find_life_csv_file(output_dir: str) -> Optional[str]:
318
- preferred_path = os.path.join(output_dir, "APP_Life_APP.csv")
319
- if os.path.exists(preferred_path):
320
- return preferred_path
321
-
322
- fallback_csv_paths = []
323
- for root, _, file_names in os.walk(output_dir):
324
- for file_name in sorted(file_names):
325
- file_path = os.path.join(root, file_name)
326
- if file_name == "APP_Life_APP.csv":
327
- return file_path
328
- if file_name.lower().endswith(".csv"):
329
- fallback_csv_paths.append(file_path)
330
-
331
- if fallback_csv_paths:
332
- return fallback_csv_paths[0]
333
- return None
334
-
335
-
336
- def convert_csv_to_xlsx(csv_path: str, xlsx_path: str) -> None:
337
- with open(csv_path, "r", encoding="utf-8-sig", newline="") as csv_file:
338
- sample = csv_file.read(4096)
339
- csv_file.seek(0)
340
-
341
- try:
342
- dialect = csv.Sniffer().sniff(sample)
343
- except csv.Error:
344
- dialect = csv.excel
345
-
346
- reader = csv.reader(csv_file, dialect)
347
- workbook = Workbook()
348
- worksheet = workbook.active
349
-
350
- rows = list(reader)
351
- if not rows:
352
- workbook.save(xlsx_path)
353
- print(f"已将空 CSV 转换为 Excel: {xlsx_path}")
354
- return
355
-
356
- # 统一成旧项目 APP.xlsx 的列结构:
357
- # keys | source | tag | length limit | context | en-US | ...
358
- normalized_rows = []
359
- for row_index, row in enumerate(rows):
360
- normalized_row = []
361
- keys_value = row[0] if len(row) > 0 else ""
362
- source_value = row[1] if len(row) > 1 else ""
363
- context_value = row[2] if len(row) > 2 else ""
364
- remaining_values = list(row[3:]) if len(row) > 3 else []
365
-
366
- if row_index == 0:
367
- normalized_row = [
368
- "keys",
369
- "source",
370
- "tag",
371
- "length limit",
372
- "context",
373
- "en-US",
374
- ]
375
- normalized_row.extend(remaining_values[1:])
376
- else:
377
- normalized_row = [
378
- keys_value,
379
- source_value,
380
- "",
381
- "",
382
- context_value,
383
- ]
384
- normalized_row.extend(remaining_values)
385
- normalized_rows.append(normalized_row)
386
-
387
- for row in normalized_rows:
388
- worksheet.append(row)
389
-
390
- workbook.save(xlsx_path)
391
- print(f"已将 CSV 转换为 Excel: {xlsx_path}")
392
-
393
-
394
317
  ############################
395
318
 
396
319
  def str_to_bool(v: str) -> bool:
@@ -406,7 +329,7 @@ if __name__ == '__main__':
406
329
  if crowdin:
407
330
  config_path, project_id = resolve_crowdin_project(localizable_path)
408
331
  if not config_path or not project_id:
409
- raise FileNotFoundError("未找到 crowdin.yml 或 crowdin_life.yml,无法确定 Crowdin project_id")
332
+ raise FileNotFoundError("未找到 crowdin.yml、crowdin_life.yml 或 crowdin_space.yml,无法确定 Crowdin project_id")
410
333
 
411
334
  print(f"检测到 Crowdin 配置: {config_path},project_id={project_id}")
412
335
  platform = CrowdinPlatform(resolve_crowdin_access_token(crowdin_access_token), project_id)
@@ -1,3 +1,3 @@
1
1
  module Localzedloader
2
- VERSION = "0.1.16"
2
+ VERSION = "0.1.18"
3
3
  end
@@ -7,12 +7,9 @@ require 'open3'
7
7
  # require 'colored2'
8
8
  class BundleGenerater
9
9
  CROWDIN_PROJECTS = {
10
- "crowdin_life.yml" => "85",
11
- "crowdin.yml" => "71"
12
- }.freeze
13
- PROJECT_APP_DIRS = {
14
- "85" => "AqaraLife",
15
- "71" => "AqaraHome"
10
+ "crowdin_life.yml" => { project_id: "85", app_dir: "AqaraLife" },
11
+ "crowdin_space.yml" => { project_id: "85", app_dir: "AqaraSpace" },
12
+ "crowdin.yml" => { project_id: "71", app_dir: "AqaraHome" }
16
13
  }.freeze
17
14
 
18
15
 
@@ -61,13 +58,9 @@ class BundleGenerater
61
58
 
62
59
  @@download_Count = 1
63
60
 
64
- def self.app_dir_name(project_id)
65
- PROJECT_APP_DIRS.fetch(project_id, "AqaraHome")
66
- end
67
-
68
61
  def self.resolve_crowdin_project(project_path)
69
- CROWDIN_PROJECTS.each do |config_name, project_id|
70
- app_dir = self.app_dir_name(project_id)
62
+ CROWDIN_PROJECTS.each do |config_name, project_info|
63
+ app_dir = project_info[:app_dir]
71
64
  [
72
65
  "#{project_path}/#{config_name}",
73
66
  "#{project_path}/#{app_dir}/Common/#{config_name}"
@@ -77,7 +70,8 @@ class BundleGenerater
77
70
  return {
78
71
  enabled: true,
79
72
  config_path: config_path,
80
- project_id: project_id
73
+ project_id: project_info[:project_id],
74
+ app_dir: app_dir
81
75
  }
82
76
  end
83
77
  end
@@ -85,7 +79,8 @@ class BundleGenerater
85
79
  {
86
80
  enabled: false,
87
81
  config_path: nil,
88
- project_id: nil
82
+ project_id: nil,
83
+ app_dir: "AqaraHome"
89
84
  }
90
85
  end
91
86
 
@@ -123,11 +118,11 @@ class BundleGenerater
123
118
 
124
119
  crowdin_info = self.resolve_crowdin_project(project_path)
125
120
  crowdin = crowdin_info[:enabled]
126
- app_dir = self.app_dir_name(crowdin_info[:project_id])
121
+ app_dir = crowdin_info[:app_dir]
127
122
 
128
123
  f_path = "#{project_path}/download.xlsx"
129
124
  if crowdin
130
- puts "检测到 Crowdin 配置: #{crowdin_info[:config_path]},project_id=#{crowdin_info[:project_id]}"
125
+ puts "检测到 Crowdin 配置: #{crowdin_info[:config_path]},project_id=#{crowdin_info[:project_id]},app_dir=#{app_dir}"
131
126
  crowdin_token = self.resolve_crowdin_token(crowdin_token)
132
127
  f_path = "#{project_path}/APP/APP.xlsx"
133
128
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cocoapods-aqara-localzedLoader
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.16
4
+ version: 0.1.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - zhaoxifan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-07-02 00:00:00.000000000 Z
11
+ date: 2026-09-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler