Class: ModpackLocalizer::JAR::Reader

Inherits:
Object
  • Object
show all
Defined in:
lib/modpack_localizer/jar/reader.rb

Overview

.jarファイルから言語ファイルの内容とメタデータを抽出するクラス

Defined Under Namespace

Classes: LangData

Constant Summary collapse

LOCALE_CODE_REGEX =

例: ja_jp

/\A[a-z]{2,3}_[a-z]{2,3}\z/
BOM_REGEX =

BOM付きだとJSON.parseでエラーが出る

/\A\xEF\xBB\xBF/

Instance Method Summary collapse

Constructor Details

#initialize(file_path, language, country_name, locale_code) ⇒ ModpackLocalizer::JAR::Reader

locale_codeが渡された場合、languageとcountry_nameは不要

Parameters:

  • file_path (String)

    ファイルのパス

  • language (String)

    言語

  • country_name (String)

  • locale_code (String)

    ロケールコード



35
36
37
38
39
40
41
42
# File 'lib/modpack_localizer/jar/reader.rb', line 35

def initialize(file_path, language, country_name, locale_code)
  @file_path, @language, @country_name = file_path, language, country_name
  @locale_code =
    locale_code&.downcase || make_locale_code(get_language_code(language), get_country_code(country_name))
  # 引数としてlocale_codeが渡された時はチェックしない
  # brb(Netherlands)のような、正規表現にマッチしないlocale_codeが存在するため(brbはISO 639-3でqbr_NL)
  validate_locale_code(@locale_code) unless locale_code
end

Instance Method Details

#extract_file_name(file) ⇒ String

フルパスからファイル名を抽出する

Parameters:

  • file (Zip::Entry)

    ファイル

Returns:

  • (String)

    ファイル名



77
78
79
# File 'lib/modpack_localizer/jar/reader.rb', line 77

def extract_file_name(file)
  file.name.split("/").last
end

#extract_lang_json_and_meta_dataLangData

言語ファイルの内容とメタデータを抽出する

Returns:

  • (LangData)

    言語ファイルの内容とメタデータ

Raises:



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/modpack_localizer/jar/reader.rb', line 48

def 
  Zip::File.open(@file_path) do |jar|
    # 対象の言語ファイルが存在する場合は翻訳が必要ない
    target_lang_file = find_lang_json(jar, @locale_code)
    if target_lang_file
      return LangData.new(
        false, {}, target_lang_file, nil, extract_mod_name(target_lang_file), nil
      )
    end

    lang_file = find_lang_json(jar, "en_us")
    unless lang_file
      return LangData.new(
        false, {}, lang_file, nil, nil, "Language files not found from #{extract_file_name(jar)}"
      )
    end

    raw_json = parse_json(lang_file)

    LangData.new(
      true, except_comment(raw_json), lang_file, @locale_code, extract_mod_name(lang_file), nil
    )
  end
end