6 Commits

Author SHA1 Message Date
2ac5a3d4f0 build: Update project version 2025-04-08 10:01:06 +08:00
5f78a1afde refactor: Code cleanup 2025-04-08 10:00:47 +08:00
ef5cf78a03 feat: Add display culture config 2025-04-08 10:00:28 +08:00
b60e62af70 feat: Adapt to breaking changes 2025-04-08 10:00:01 +08:00
3e59fe1462 feat: Implement region editor 2025-04-08 09:56:47 +08:00
4b4bf5ed65 ci: Update plugins 2025-04-08 09:53:33 +08:00
187 changed files with 4270 additions and 193 deletions

View File

@@ -1,3 +1,3 @@
using System.Reflection;
[assembly: AssemblyVersion("0.0.3")]
[assembly: AssemblyVersion("0.0.4")]

View File

@@ -13,6 +13,8 @@ namespace Cryville.EEW.Unity {
bool DoDisplayTimeZone,
bool DoSwitchBackToHistory,
string OverrideDisplayCulture,
IReadOnlyCollection<EventSourceConfig> EventSources
) {
public static Config Default => new(
@@ -25,6 +27,8 @@ namespace Cryville.EEW.Unity {
true,
true,
"",
new List<EventSourceConfig> {
new JMAAtomEventSourceConfig(Array.Empty<string>()),
new UpdateCheckerEventSourceConfig(),

View File

@@ -17,19 +17,24 @@ namespace Cryville.EEW.Unity.Map {
GameObject m_prefabTile;
[SerializeField]
GameObject m_prefabBitmapHolder;
[SerializeField]
int m_maxMapTileZoom = 10;
[SerializeField]
bool m_isEditor;
readonly MapTileCacheManager _tiles = new();
MapTileCacheManager _tiles;
float _elementLayerZ;
void Start() {
_camera = GetComponent<Camera>();
_tiles = m_isEditor ? new EditorMapTileCacheManager() : new MapTileCacheManager();
_tiles.ExtraCachedZoomLevel = 20;
_tiles.Parent = m_layerTile;
_tiles.PrefabTile = m_prefabTile;
_tiles.PrefabBitmapHolder = m_prefabBitmapHolder;
_tiles.CacheDir = Application.temporaryCachePath;
_camera.orthographicSize = 0.5f / MathF.Max(1, (float)_camera.pixelWidth / _camera.pixelHeight);
_elementLayerZ = m_layerElement.transform.position.z;
if (m_layerElement != null) _elementLayerZ = m_layerElement.transform.position.z;
_mapElementUpdated = true;
}
void OnDestroy() {
@@ -74,7 +79,7 @@ namespace Cryville.EEW.Unity.Map {
}
}
void ZoomToMapElement() {
var aabb = m_layerElement.AABB;
var aabb = m_layerElement != null ? m_layerElement.AABB : null;
if (aabb is not RectangleF b) return;
if (b.Width * _camera.pixelHeight < _camera.pixelWidth * b.Height)
Scale = b.Height;
@@ -97,26 +102,30 @@ namespace Cryville.EEW.Unity.Map {
transform.localPosition = new(nx, Math.Clamp(transform.position.y, h / 2 - 1, -h / 2), -20);
var bounds = new Bounds((Vector2)transform.position, new Vector2(w, h));
int zoom = Math.Clamp((int)Math.Log(vz / 256, 2) + 1, 0, 10);
int zoom = Math.Clamp((int)Math.Log(vz / 256, 2) + 1, 0, m_maxMapTileZoom);
int zoomScale = 1 << zoom;
_tiles.MoveTo(
new(Mathf.FloorToInt(bounds.min.x * zoomScale), Mathf.FloorToInt(-bounds.max.y * zoomScale), zoom),
new(Mathf.CeilToInt(bounds.max.x * zoomScale), Mathf.CeilToInt(-bounds.min.y * zoomScale), zoom)
);
m_layerElement.Scale = h;
m_layerElementSub.Scale = h;
if (m_layerElement != null) {
m_layerElement.Scale = h;
}
if (m_layerElementSub != null) {
m_layerElementSub.Scale = h;
if (nx - w / 2 < 0) {
m_layerElementSub.gameObject.SetActive(true);
m_layerElementSub.transform.localPosition = new(-1, 0, _elementLayerZ);
}
else if (nx + w / 2 > 1) {
m_layerElementSub.gameObject.SetActive(true);
m_layerElementSub.transform.localPosition = new(1, 0, _elementLayerZ);
}
else {
m_layerElementSub.gameObject.SetActive(false);
if (nx - w / 2 < 0) {
m_layerElementSub.gameObject.SetActive(true);
m_layerElementSub.transform.localPosition = new(-1, 0, _elementLayerZ);
}
else if (nx + w / 2 > 1) {
m_layerElementSub.gameObject.SetActive(true);
m_layerElementSub.transform.localPosition = new(1, 0, _elementLayerZ);
}
else {
m_layerElementSub.gameObject.SetActive(false);
}
}
}
}

View File

@@ -0,0 +1,15 @@
using Cryville.EEW.Core.Map;
using System.IO;
using UnityEngine;
namespace Cryville.EEW.Unity.Map {
sealed class EditorMapTileCacheManager : MapTileCacheManager {
protected override MapTileBitmapHolder CreateBitmapHolder(MapTileIndex index) => new(
index,
GameObject.Instantiate(PrefabBitmapHolder, Parent, false),
new($"https://tile.openstreetmap.org/{index.Z}/{index.NX}/{index.NY}.png")
);
protected override string GetCacheFilePath(MapTileIndex index) => Path.Combine(CacheDir, $"map_editor/{index.Z}/{index.NX}/{index.NY}");
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 478198b8ecc0082449fa3f68795174a9
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -7,10 +7,12 @@ using UnityEngine;
namespace Cryville.EEW.Unity.Map {
sealed class MapTileBitmapHolder : Core.Map.MapTileBitmapHolder {
MapTileBitmapHolderBehaviour _behaviour;
readonly MapTileBitmapHolderBehaviour _behaviour;
readonly Uri _uri;
public MapTileBitmapHolder(MapTileIndex index, GameObject gameObject) : base(index) {
public MapTileBitmapHolder(MapTileIndex index, GameObject gameObject, Uri uri) : base(index) {
_behaviour = gameObject.GetComponent<MapTileBitmapHolderBehaviour>();
_uri = uri;
}
protected override void Dispose(bool disposing) {
@@ -20,8 +22,7 @@ namespace Cryville.EEW.Unity.Map {
}
}
protected override Uri GetUri() =>
new($"https://server.arcgisonline.com/ArcGIS/rest/services/Ocean/World_Ocean_Base/MapServer/tile/{Index.Z}/{Index.NY}/{Index.NX}");
protected override Uri GetUri() => _uri;
protected override Task LoadBitmap(FileInfo file, CancellationToken cancellationToken) {
_behaviour.Load(file);

View File

@@ -45,13 +45,13 @@ namespace Cryville.EEW.Unity.Map {
_isReady = false;
}
if (_req == null || !_req.isDone) return;
if (_texHandler.isDone) {
if (_texHandler.isDone && _texHandler.texture != null) {
_tex = _texHandler.texture;
_tex.wrapMode = TextureWrapMode.Clamp;
_sprite = Sprite.Create(_tex, new Rect(0, 0, _tex.width, _tex.height), Vector2.zero, _tex.height, 0, SpriteMeshType.FullRect, Vector4.zero, false);
}
else {
Debug.LogError(_req.error);
Debug.LogError(_texHandler.error);
_localFile.Delete();
}
_req.Dispose();

View File

@@ -4,7 +4,7 @@ using System.IO;
using UnityEngine;
namespace Cryville.EEW.Unity.Map {
sealed class MapTileCacheManager : MapTileCacheManager<MapTileBitmapHolder> {
class MapTileCacheManager : MapTileCacheManager<MapTileBitmapHolder> {
public GameObject PrefabTile { get; set; }
public GameObject PrefabBitmapHolder { get; set; }
@@ -12,8 +12,12 @@ namespace Cryville.EEW.Unity.Map {
public string CacheDir { get; set; }
protected override MapTileBitmapHolder CreateBitmapHolder(MapTileIndex index) => new(index, GameObject.Instantiate(PrefabBitmapHolder, Parent, false));
protected override MapTileBitmapHolder CreateBitmapHolder(MapTileIndex index) => new(
index,
GameObject.Instantiate(PrefabBitmapHolder, Parent, false),
new($"https://server.arcgisonline.com/ArcGIS/rest/services/Ocean/World_Ocean_Base/MapServer/tile/{index.Z}/{index.NY}/{index.NX}")
);
protected override string GetCacheFilePath(MapTileIndex index) => Path.Combine(CacheDir, $"map/{index.Z}/{index.NX}/{index.NY}");
readonly Dictionary<MapTile<MapTileBitmapHolder>, MapTile> _map = new();

View File

@@ -0,0 +1,219 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Text.Json;
using System.Text.Json.Serialization;
using TMPro;
using UnityEngine;
namespace Cryville.EEW.Unity.Map {
sealed class RegionEditor : MonoBehaviour {
QuadTreeNode _root;
[SerializeField] CameraController m_cameraController;
[SerializeField] GameObject m_regionViewPrefab;
[SerializeField] TMP_Text m_textSelectedInfo;
[SerializeField] TMP_Text m_textHoveredInfo;
[SerializeField] TMP_InputField m_inputId;
readonly Dictionary<QuadTreeNode, RegionView> _map = new();
void Start() {
var file = new FileInfo(Path.Combine(Application.persistentDataPath, "regions.json"));
if (file.Exists) {
using var stream = file.OpenRead();
_root = JsonSerializer.Deserialize<QuadTreeNode>(stream);
}
else {
_root = NewNode();
}
BuildView(_root);
}
public void Save() {
var file = new FileInfo(Path.Combine(Application.persistentDataPath, "regions.json"));
using var stream = file.Open(FileMode.Create);
JsonSerializer.Serialize(stream, _root);
}
void BuildView(QuadTreeNode node) {
var view = Instantiate(m_regionViewPrefab, transform, false).GetComponent<RegionView>();
view.Init(node.X, node.Y, node.Z);
view.Id = node.Data.Id;
view.IsLeaf = node.Children == null;
_map.Add(node, view);
BuildChildViews(node);
}
void BuildChildViews(QuadTreeNode node) {
if (node.Children == null) return;
foreach (var child in node.Children) {
BuildView(child);
}
}
void DestroyChildViews(QuadTreeNode node) {
if (node.Children == null) return;
foreach (var child in node.Children) {
Destroy(_map[child].gameObject);
_map.Remove(child);
}
}
QuadTreeNode _hoveredNode;
QuadTreeNode _selectedNode;
Vector3? _ppos;
void Update() {
var pos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
pos.y += 1;
var hoveredNode = _root.Get(pos);
if (hoveredNode != _hoveredNode) {
HoverNode(hoveredNode);
}
if (Input.GetMouseButtonDown(0)) {
_ppos = Input.mousePosition;
}
if (Input.GetMouseButton(0) && _ppos is Vector3 pos0) {
if (Input.mousePosition != pos0) {
_ppos = null;
}
}
if (hoveredNode == null) return;
if (Input.GetMouseButtonUp(0) && _ppos != null) {
SelectNode(hoveredNode);
_ppos = null;
}
if (m_inputId.isFocused)
return;
if (Input.GetKeyUp(KeyCode.A)) {
MergeNode(hoveredNode);
}
if (Input.GetKeyUp(KeyCode.S)) {
SplitNode(hoveredNode);
}
if (Input.GetKeyUp(KeyCode.C)) {
m_inputId.text = hoveredNode.Data.Id;
}
if (Input.GetKeyUp(KeyCode.V)) {
hoveredNode.Data.Id = m_inputId.text;
_map[hoveredNode].Id = hoveredNode.Data.Id;
}
}
void HoverNode(QuadTreeNode node) {
if (_hoveredNode != null) {
_map[_hoveredNode].IsHovered = false;
}
_hoveredNode = node;
if (_hoveredNode != null) {
_map[_hoveredNode].IsHovered = true;
m_textHoveredInfo.text = string.Format(CultureInfo.InvariantCulture, "<Hovered>\nZ: {2}, XY: ({0}, {1})\nD: {3}", node.X, node.Y, node.Z, node.Data.Id);
}
else {
m_textHoveredInfo.text = "";
}
}
void SelectNode(QuadTreeNode node) {
if (_selectedNode != null) {
_map[_selectedNode].IsSelected = false;
}
_selectedNode = node;
if (_selectedNode != null) {
_map[_selectedNode].IsSelected = true;
m_textSelectedInfo.text = string.Format(CultureInfo.InvariantCulture, "<Selected>\nZ: {2}, XY: ({0}, {1})\nD: {3}", node.X, node.Y, node.Z, node.Data.Id);
}
else {
m_textSelectedInfo.text = "";
}
}
void MergeNode(QuadTreeNode node) {
var parent = node.Parent;
if (parent == null)
return;
DestroyChildViews(parent);
_map[parent].IsLeaf = true;
parent.Merge();
_hoveredNode = null;
if (_selectedNode != null && !_map.ContainsKey(_selectedNode)) {
_selectedNode = null;
}
}
void SplitNode(QuadTreeNode node) {
node.Split();
_map[node].IsLeaf = false;
BuildChildViews(node);
}
static QuadTreeNode NewNode() => new() { Data = new("") };
sealed class QuadTreeNode {
QuadTreeNode[] m_children;
public QuadTreeNode[] Children {
get => m_children;
set {
if (m_children != null) {
foreach (var child in m_children) {
child.DetachFromParent();
}
}
m_children = value;
UpdateChildren();
}
}
QuadTreeNode m_parent;
[JsonIgnore] public QuadTreeNode Parent => m_parent;
void AttachToParent(QuadTreeNode parent, int index) {
if (m_parent != null && m_parent != parent)
throw new InvalidOperationException("Node already in a tree.");
m_parent = parent;
X = (parent.X << 1) | (index is 0 or 3 ? 1 : 0);
Y = (parent.Y << 1) | (index is 0 or 1 ? 1 : 0);
Z = parent.Z + 1;
UpdateChildren();
}
void DetachFromParent() => m_parent = null;
void UpdateChildren() {
if (m_children != null) {
for (int i = 0; i < m_children.Length; i++) {
m_children[i].AttachToParent(this, i);
}
}
}
[JsonIgnore] public int X { get; private set; }
[JsonIgnore] public int Y { get; private set; }
[JsonIgnore] public int Z { get; private set; }
public RegionData Data { get; set; }
public QuadTreeNode Get(Vector2 pos) {
if ((pos.x is < 0 or >= 1) || (pos.y is < 0 or >= 1))
return null;
if (m_children == null)
return this;
Vector2 subPos = pos * 2;
subPos.x %= 1;
subPos.y %= 1;
return pos.x >= 0.5f
? (pos.y >= 0.5f ? m_children[0] : m_children[3]).Get(subPos)
: (pos.y >= 0.5f ? m_children[1] : m_children[2]).Get(subPos);
}
public void Merge() {
Children = null;
}
public void Split() {
Children = new QuadTreeNode[] {
new() { Data = Data.Copy() },
new() { Data = Data.Copy() },
new() { Data = Data.Copy() },
new() { Data = Data.Copy() },
};
}
}
sealed record RegionData(string Id) {
public string Id { get; set; } = Id;
public RegionData Copy() => (RegionData)MemberwiseClone();
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: fd7b70d11ebfe324e830806e394cc334
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,68 @@
using UnityEngine;
namespace Cryville.EEW.Unity.Map {
sealed class RegionView : MonoBehaviour {
[SerializeField]
SpriteRenderer m_spriteRenderer;
Color _color;
bool m_isHovered;
public bool IsHovered {
get => m_isHovered;
set {
m_isHovered = value;
UpdateColor();
}
}
bool m_isSelected;
public bool IsSelected {
get => m_isSelected;
set {
m_isSelected = value;
UpdateColor();
}
}
bool m_isLeaf = true;
public bool IsLeaf {
get => m_isLeaf;
set {
m_isLeaf = value;
UpdateColor();
}
}
string m_id;
public string Id {
get => m_id;
set {
m_id = value;
unchecked {
uint hash = (uint)value.GetHashCode();
_color = Color.HSVToRGB(((hash >> 24) ^ ((hash >> 16) & 0xff) ^ ((hash >> 8) & 0xff) ^ (hash & 0xff)) / (float)0xff, 1, 1);
}
UpdateColor();
}
}
public void Init(int x, int y, int z) {
float scale = 1f / (1 << z);
transform.localScale = new Vector3(scale, scale, 1);
transform.localPosition = new Vector3(x * scale, y * scale - 1, -1 - z / 100f);
}
void UpdateColor() {
if (!m_isLeaf)
_color.a = 0.0f;
else if (m_isSelected)
_color.a = 0.6f;
else if (m_isHovered)
_color.a = 0.4f;
else
_color.a = 0.2f;
m_spriteRenderer.color = _color;
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: c57a0e86eb63b6048ba265e9d98e84f6
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,4 +1,5 @@
using Cryville.EEW.Colors;
using Cryville.EEW.Core;
using Cryville.EEW.Core.Colors;
using Cryville.EEW.FERegion;
using Cryville.EEW.Map;
@@ -25,9 +26,21 @@ namespace Cryville.EEW.Unity {
public IColorScheme ColorScheme { get; private set; } = new SeverityBasedColorScheme(DefaultSeverityScheme.Instance, DefaultSeverityColorMapping.Instance);
public ISubColorScheme BorderColorScheme { get; private set; } = new WrappedColorScheme(new SeverityBasedColorScheme(DefaultSeverityScheme.Instance, DefaultSeverityColorMapping.SecondaryInstance));
public ISubColorScheme TextColorScheme { get; private set; } = new DefaultTextColorScheme(Color.White, Color.Black);
public ILocationConverter LocationConverter => new FERegionLongConverter(); // TODO TTS
public TimeSpan NowcastWarningDelayTolerance => TimeSpan.FromMinutes(60); // TODO TTS
public CultureInfo RVMCulture { get; private set; } = SharedCultures.CurrentUICulture;
readonly int _infoLocationSpecificity = 3;
readonly int _ttsLocationSpecificity = 3;
readonly LocationNamer _locationNamer = new() { Namer = new FERegionLongNamer() }; // TODO TTS
public bool NameLocation(double lat, double lon, CultureInfo localCulture, ref CultureInfo targetCulture, out string name, out int specificity) {
specificity = _ttsLocationSpecificity;
return _locationNamer.Name(lat, lon, localCulture, ref targetCulture, out name, ref specificity);
}
public bool NameLocation(double lat, double lon, CultureInfo localCulture, ref CultureInfo targetCulture, out string name) {
int specificity = _infoLocationSpecificity;
return _locationNamer.Name(lat, lon, localCulture, ref targetCulture, out name, ref specificity);
}
public TimeZoneInfo OverrideTimeZone { get; private set; }
public bool DoDisplayTimeZone { get; private set; } = true;
public bool DoSwitchBackToHistory { get; private set; } = true;
@@ -104,6 +117,9 @@ namespace Cryville.EEW.Unity {
OverrideTimeZone = ParseTimeZone(config.OverrideTimeZone);
DoDisplayTimeZone = config.DoDisplayTimeZone;
DoSwitchBackToHistory = config.DoSwitchBackToHistory;
RVMCulture = config.OverrideDisplayCulture is string rvmCulture
? (string.IsNullOrEmpty(rvmCulture) ? SharedCultures.CurrentUICulture : SharedCultures.Get(rvmCulture))
: CultureInfo.InvariantCulture;
EventSources = config.EventSources;
}

View File

@@ -5,7 +5,7 @@ using System.IO;
using UnityEngine;
namespace Cryville.EEW.Unity {
class SoundPlayer : Core.SoundPlayer {
class SoundPlayer : Core.Audio.SoundPlayer {
public SoundPlayer() : base(GetEngineList(), AudioUsage.NotificationEvent) { }
static List<Type> GetEngineList() => new() {
typeof(Audio.Wasapi.MMDeviceEnumeratorWrapper),

View File

@@ -4,7 +4,7 @@ using System.Threading;
using System.Threading.Tasks;
namespace Cryville.EEW.Unity {
class TTSWorker : Core.TTSWorker {
class TTSWorker : Core.Audio.TTSWorker {
public TTSWorker() : base(CreateSoundPlayer()) { }
static SoundPlayer CreateSoundPlayer() {

View File

@@ -12,8 +12,8 @@ namespace Cryville.EEW.Unity.UI {
_textView = GetComponent<TMP_Text>();
}
StringBuilder _sb = new();
char[] _buffer = new char[256];
readonly StringBuilder _sb = new();
readonly char[] _buffer = new char[256];
void Update() {
_sb.Clear();
_sb.AppendFormat(

View File

@@ -64,6 +64,7 @@ namespace Cryville.EEW.Unity {
BuildWorkers();
_worker.RVMGeneratorContext = SharedSettings.Instance;
_worker.TTSMessageGeneratorContext = SharedSettings.Instance;
_worker.RVMCulture = SharedSettings.Instance.RVMCulture;
_ongoingReportManager.Changed += OnOngoingReported;
_worker.Reported += OnReported;
_grouper.GroupUpdated += OnGroupUpdated;

View File

@@ -0,0 +1,33 @@
fileFormatVersion: 2
guid: 550171b48a648b34e9ce5f1aba6244f1
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 1
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
- first:
Windows Store Apps: WindowsStoreApps
second:
enabled: 0
settings:
CPU: AnyCPU
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@@ -0,0 +1,33 @@
fileFormatVersion: 2
guid: 0f848a4ea2f35e7449e584beee48c659
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 1
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
- first:
Windows Store Apps: WindowsStoreApps
second:
enabled: 0
settings:
CPU: AnyCPU
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -14,10 +14,10 @@
The shared instance of the <see cref="T:Cryville.EEW.TTS.EmptyTTSMessageGeneratorContext" /> class.
</summary>
</member>
<member name="P:Cryville.EEW.TTS.EmptyTTSMessageGeneratorContext.LocationConverter">
<member name="P:Cryville.EEW.TTS.EmptyTTSMessageGeneratorContext.NowcastWarningDelayTolerance">
<inheritdoc />
</member>
<member name="P:Cryville.EEW.TTS.EmptyTTSMessageGeneratorContext.NowcastWarningDelayTolerance">
<member name="M:Cryville.EEW.TTS.EmptyTTSMessageGeneratorContext.NameLocation(System.Double,System.Double,System.Globalization.CultureInfo,System.Globalization.CultureInfo@,System.String@)">
<inheritdoc />
</member>
<member name="T:Cryville.EEW.TTS.ITTSMessageGeneratorContext">
@@ -25,16 +25,22 @@
Represents a context used in TTS message generators.
</summary>
</member>
<member name="P:Cryville.EEW.TTS.ITTSMessageGeneratorContext.LocationConverter">
<summary>
The location converter.
</summary>
</member>
<member name="P:Cryville.EEW.TTS.ITTSMessageGeneratorContext.NowcastWarningDelayTolerance">
<summary>
The delay tolerance before a nowcast warning event cannot trigger sounds and TTS.
</summary>
</member>
<member name="M:Cryville.EEW.TTS.ITTSMessageGeneratorContext.NameLocation(System.Double,System.Double,System.Globalization.CultureInfo,System.Globalization.CultureInfo@,System.String@)">
<summary>
Names a location in a culture.
</summary>
<param name="lat">The latitude of the location.</param>
<param name="lon">The longitude of the location.</param>
<param name="localCulture">The local culture supported by the event itself.</param>
<param name="targetCulture">The target culture of the location name. When the method returns, set to the actual culture of the location name.</param>
<param name="name">The location name.</param>
<returns>Whether the name is given by the context. <see langword="false" /> if the generator should provide a local name instead.</returns>
</member>
<member name="T:Cryville.EEW.TTS.TTSEntry">
<summary>
Represents an entry sent to a TTS worker.

Binary file not shown.

Binary file not shown.

View File

@@ -30,17 +30,17 @@
<param name="amount">The amount of phase to increment.</param>
<returns>The next delay value.</returns>
</member>
<member name="T:Cryville.EEW.EmptyLocationConverter">
<member name="T:Cryville.EEW.EmptyLocationNamer">
<summary>
An empty <see cref="T:Cryville.EEW.ILocationConverter" />.
An empty <see cref="T:Cryville.EEW.ILocationNamer" />.
</summary>
</member>
<member name="P:Cryville.EEW.EmptyLocationConverter.Instance">
<member name="P:Cryville.EEW.EmptyLocationNamer.Instance">
<summary>
The shared instance of the <see cref="T:Cryville.EEW.EmptyLocationConverter" /> class.
The shared instance of the <see cref="T:Cryville.EEW.EmptyLocationNamer" /> class.
</summary>
</member>
<member name="M:Cryville.EEW.EmptyLocationConverter.Convert(Cryville.EEW.INamedLocation,System.Globalization.CultureInfo@)">
<member name="M:Cryville.EEW.EmptyLocationNamer.Name(System.Double,System.Double,System.Globalization.CultureInfo@,System.Int32@)">
<inheritdoc />
</member>
<member name="T:Cryville.EEW.GeoUtils">
@@ -213,18 +213,20 @@
<param name="culture">The preferred culture of the generated object. When the method returns, set to the actual culture of the generated object.</param>
<returns>The generated object.</returns>
</member>
<member name="T:Cryville.EEW.ILocationConverter">
<member name="T:Cryville.EEW.ILocationNamer">
<summary>
Represents a converter that converts a named location to a name in a specified culture.
Represents a namer that names a location in a specified culture.
</summary>
</member>
<member name="M:Cryville.EEW.ILocationConverter.Convert(Cryville.EEW.INamedLocation,System.Globalization.CultureInfo@)">
<member name="M:Cryville.EEW.ILocationNamer.Name(System.Double,System.Double,System.Globalization.CultureInfo@,System.Int32@)">
<summary>
Converts a named location to a name in a specified culture.
Names a location in a specified culture.
</summary>
<param name="location">The named location.</param>
<param name="lat">The latitude.</param>
<param name="lon">The longitude.</param>
<param name="culture">The preferred culture of the name. When the method returns, set to the actual culture of the name.</param>
<returns>The converted name.</returns>
<param name="specificity">The preferred specificity of the name. When the method returns, set to the actual specificity of the name.</param>
<returns>The name.</returns>
</member>
<member name="T:Cryville.EEW.ISourceWorker">
<summary>
@@ -349,6 +351,16 @@
<returns>The string of the specified name in the resource.</returns>
<exception cref="T:System.Collections.Generic.KeyNotFoundException">The string of the specified name is not found.</exception>
</member>
<member name="M:Cryville.EEW.MessageStringSetExtensions.GetStringOrDefault(Cryville.EEW.IMessageStringSet,System.String,System.String)">
<summary>
Gets a string in the string set, or a default string in the string set if not found.
</summary>
<param name="set">The string set.</param>
<param name="name">The name of the string.</param>
<param name="defaultName">The name of the default string.</param>
<returns>The string of the specified name in the resource, or the default string of the specified default name in the string set if not found.</returns>
<exception cref="T:System.Collections.Generic.KeyNotFoundException">The default string of the specified default name is not found.</exception>
</member>
<member name="M:Cryville.EEW.MessageStringSetExtensions.GetStringSetRequired(Cryville.EEW.IMessageStringSet,System.String)">
<summary>
Gets a string set in the string set.
@@ -960,61 +972,6 @@
</summary>
<param name="value">An instance of the <see cref="T:Cryville.EEW.Models.XmlSerializedDateTimeOffset" /> struct.</param>
</member>
<member name="T:Cryville.EEW.INamedLocation">
<summary>
Represents a named location.
</summary>
</member>
<member name="P:Cryville.EEW.INamedLocation.Name">
<summary>
The source name of the location.
</summary>
</member>
<member name="P:Cryville.EEW.INamedLocation.Culture">
<summary>
The source culture of <see cref="P:Cryville.EEW.INamedLocation.Name" />.
</summary>
</member>
<member name="P:Cryville.EEW.INamedLocation.Latitude">
<summary>
The latitude of the location.
</summary>
</member>
<member name="P:Cryville.EEW.INamedLocation.Longitude">
<summary>
The longitude of the location.
</summary>
</member>
<member name="T:Cryville.EEW.NamedLocation">
<summary>
Represents a named location.
</summary>
<param name="Name">The source name of the location.</param>
<param name="Culture">The source culture of <paramref name="Name" />.</param>
<param name="Latitude">The latitude of the location.</param>
<param name="Longitude">The longitude of the location.</param>
</member>
<member name="M:Cryville.EEW.NamedLocation.#ctor(System.String,System.Globalization.CultureInfo,System.Double,System.Double)">
<summary>
Represents a named location.
</summary>
<param name="Name">The source name of the location.</param>
<param name="Culture">The source culture of <paramref name="Name" />.</param>
<param name="Latitude">The latitude of the location.</param>
<param name="Longitude">The longitude of the location.</param>
</member>
<member name="P:Cryville.EEW.NamedLocation.Name">
<summary>The source name of the location.</summary>
</member>
<member name="P:Cryville.EEW.NamedLocation.Culture">
<summary>The source culture of <paramref name="Name" />.</summary>
</member>
<member name="P:Cryville.EEW.NamedLocation.Latitude">
<summary>The latitude of the location.</summary>
</member>
<member name="P:Cryville.EEW.NamedLocation.Longitude">
<summary>The longitude of the location.</summary>
</member>
<member name="T:Cryville.EEW.NonstandardDateTimeJsonConverter">
<summary>
Converts instances of the <see cref="T:System.DateTime" /> struct to or from JSON.
@@ -1039,7 +996,7 @@
<member name="P:Cryville.EEW.Report.EmptyRVMGeneratorContext.SeverityScheme">
<inheritdoc />
</member>
<member name="P:Cryville.EEW.Report.EmptyRVMGeneratorContext.LocationConverter">
<member name="M:Cryville.EEW.Report.EmptyRVMGeneratorContext.NameLocation(System.Double,System.Double,System.Globalization.CultureInfo,System.Globalization.CultureInfo@,System.String@,System.Int32@)">
<inheritdoc />
</member>
<member name="T:Cryville.EEW.Report.EmptySeverityScheme">
@@ -1192,10 +1149,34 @@
The severity scheme.
</summary>
</member>
<member name="P:Cryville.EEW.Report.IRVMGeneratorContext.LocationConverter">
<member name="M:Cryville.EEW.Report.IRVMGeneratorContext.NameLocation(System.Double,System.Double,System.Globalization.CultureInfo,System.Globalization.CultureInfo@,System.String@,System.Int32@)">
<summary>
The location converter.
Names a location in a culture.
</summary>
<param name="lat">The latitude of the location.</param>
<param name="lon">The longitude of the location.</param>
<param name="localCulture">The local culture supported by the event itself.</param>
<param name="targetCulture">The target culture of the location name. When the method returns, set to the actual culture of the location name.</param>
<param name="name">The location name.</param>
<param name="specificity">The location specificity. See <see cref="P:Cryville.EEW.Report.ReportViewModel.LocationSpecificity" />.</param>
<returns>Whether the name is given by the context. <see langword="false" /> if the generator should provide a local name instead.</returns>
</member>
<member name="T:Cryville.EEW.Report.RVMGeneratorContextExtensions">
<summary>
Provides a set of <see langword="static" /> methods related to <see cref="T:Cryville.EEW.Report.IRVMGeneratorContext" />.
</summary>
</member>
<member name="M:Cryville.EEW.Report.RVMGeneratorContextExtensions.NameLocationTo(Cryville.EEW.Report.IRVMGeneratorContext,Cryville.EEW.Report.ReportViewModel,System.Double,System.Double,System.Globalization.CultureInfo,System.Globalization.CultureInfo)">
<summary>
Names a location in a culture and sets the result to a report view model.
</summary>
<param name="context">The context.</param>
<param name="e">The report view model.</param>
<param name="lat">The latitude of the location.</param>
<param name="lon">The longitude of the location.</param>
<param name="localCulture">The local culture supported by the event itself.</param>
<param name="targetCulture">The target culture of the location name. When the method returns, set to the actual culture of the location name.</param>
<returns>Whether the name is given by the context. <see langword="false" /> if the generator should provide a local name instead.</returns>
</member>
<member name="T:Cryville.EEW.Report.ISeverityScheme">
<summary>

View File

@@ -0,0 +1,132 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &2984379317001549352
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2984379317001549359}
- component: {fileID: 2962259339337128397}
m_Layer: 0
m_Name: RegionView
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &2984379317001549359
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2984379317001549352}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 3524170046801625328}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &2962259339337128397
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2984379317001549352}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: c57a0e86eb63b6048ba265e9d98e84f6, type: 3}
m_Name:
m_EditorClassIdentifier:
m_spriteRenderer: {fileID: 3524170046801625329}
--- !u!1 &3524170046801625335
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3524170046801625328}
- component: {fileID: 3524170046801625329}
m_Layer: 0
m_Name: Area
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &3524170046801625328
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3524170046801625335}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0.5, y: 0.5, z: 1}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 2984379317001549359}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!212 &3524170046801625329
SpriteRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3524170046801625335}
m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 0
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 0
m_RayTraceProcedural: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 0
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_Sprite: {fileID: 7482667652216324306, guid: 311925a002f4447b3a28927169b83ea6, type: 3}
m_Color: {r: 1, g: 1, b: 1, a: 0.2509804}
m_FlipX: 0
m_FlipY: 0
m_DrawMode: 0
m_Size: {x: 1, y: 1}
m_AdaptiveModeThreshold: 0.5
m_SpriteTileMode: 0
m_WasSpriteAssigned: 1
m_MaskInteraction: 0
m_SpriteSortPoint: 0

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: bcdaa327335962646879336458cd7379
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

1973
Assets/RegionEditor.unity Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 8d07fde72bae47a4990c95f764ca2b43
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -6,7 +6,7 @@
"HeadlineMagnitude": " of magnitude {0:F1}",
"MaxIntensity": "The maximum intensity observed is {0}.",
"Region": "The epicenter is in {0}.",
"Title": "Earthquake Data.",
"TitleStandAlone": "Earthquake Data"
"Title": "Earthquake data.",
"TitleStandAlone": "Earthquake data"
}
}

View File

@@ -6,7 +6,7 @@
"HeadlineMagnitude": ", dengan magnitudo {0:F1}",
"MaxIntensity": "Intensitas gempa maksimum yang dirasakan adalah {0}.",
"Region": "Pusat gempa berada di {0}.",
"Title": "Data Gempabumi.",
"TitleStandAlone": "Data Gempabumi"
"Title": "Data gempabumi.",
"TitleStandAlone": "Data gempabumi"
}
}

View File

@@ -3,7 +3,7 @@
"Strings": {
"Headline": "印度尼西亞西部時間{0},發生咗一次{1}地震。{2}",
"HeadlineDepth": "震源深度{0}公里。",
"HeadlineMagnitude": "規模{0:F1}級",
"HeadlineMagnitude": "震級{0:F1}級",
"MaxIntensity": "觀測到嘅最大烈度為{0}。",
"Region": "震中位於{0}。",
"Title": "地震數據。",

View File

@@ -3,7 +3,7 @@
"Strings": {
"Headline": "印度尼西亞西部時間{0},發生了一次{1}地震。{2}",
"HeadlineDepth": "震源深度{0}公里。",
"HeadlineMagnitude": "規模{0:F1}級",
"HeadlineMagnitude": "規模{0:F1}級",
"MaxIntensity": "觀測到的最大震度為{0}。",
"Region": "震中位於{0}。",
"Title": "地震數據。",

View File

@@ -3,7 +3,7 @@
"Strings": {
"Headline": "印度尼西亚西部时间{0},发生了一次{1}地震。{2}",
"HeadlineDepth": "震源深度{0}千米。",
"HeadlineMagnitude": "规模{0:F1}级",
"HeadlineMagnitude": "震级{0:F1}级",
"MaxIntensity": "观测到的最大烈度为{0}。",
"Region": "震中位于{0}。",
"Title": "地震数据。",

View File

@@ -1,6 +1,12 @@
{
"Culture": "en-US",
"Strings": {
"SourceName": "BMKG Open Data"
"AuthorityName": "BMKG",
"PropertyDepth": "Depth",
"PropertyDepthValue": "{0}km",
"PropertyMagnitude": "M",
"PropertyMaxIntensity": "Max intensity",
"SourceName": "BMKG Open Data",
"Title": "Earthquake data"
}
}

View File

@@ -1,6 +1,12 @@
{
"Culture": "id-ID",
"Strings": {
"SourceName": "Data Terbuka BMKG"
"AuthorityName": "BMKG",
"PropertyDepth": "Kedalaman",
"PropertyDepthValue": "{0}km",
"PropertyMagnitude": "M",
"PropertyMaxIntensity": "Intensitas maks.",
"SourceName": "Data Terbuka BMKG",
"Title": "Data gempabumi"
}
}

View File

@@ -1,6 +1,12 @@
{
"Culture": "yue-HK",
"Strings": {
"SourceName": "BMKG 開放數據"
"AuthorityName": "BMKG",
"PropertyDepth": "深度",
"PropertyDepthValue": "{0}km",
"PropertyMagnitude": "M",
"PropertyMaxIntensity": "最大烈度",
"SourceName": "BMKG 開放數據",
"Title": "地震數據"
}
}

View File

@@ -1,6 +1,12 @@
{
"Culture": "zh-TW",
"Strings": {
"SourceName": "BMKG 開放數據"
"AuthorityName": "BMKG",
"PropertyDepth": "深度",
"PropertyDepthValue": "{0}km",
"PropertyMagnitude": "M",
"PropertyMaxIntensity": "最大震度",
"SourceName": "BMKG 開放數據",
"Title": "地震數據"
}
}

View File

@@ -1,6 +1,12 @@
{
"Culture": "zh-CN",
"Strings": {
"SourceName": "BMKG 开放数据"
"AuthorityName": "BMKG",
"PropertyDepth": "深度",
"PropertyDepthValue": "{0}km",
"PropertyMagnitude": "M",
"PropertyMaxIntensity": "最大烈度",
"SourceName": "BMKG 开放数据",
"Title": "地震数据"
}
}

View File

@@ -13,6 +13,7 @@
"Title": {
"Strings": {
"地震報告": "Earthquake report",
"海嘯消息": "Tsunami message",
"海嘯警報": "Tsunami warning",
"海嘯警報解除": "Tsunami warning lifted"
}

View File

@@ -1,7 +1,7 @@
{
"Culture": "yue-HK",
"Strings": {
"EarthquakeBody": "{0}{1}發生規模{2:F1}有感地震,最大震度{3}。",
"EarthquakeBody": "{0}{1}發生震級{2:F1}有感地震,最大震度{3}。",
"EarthquakeFocalDepth": "震源深度{0}公里。",
"TsunamiForecast": "以下地區預計海嘯高度{0}。",
"TsunamiForecastArea": "{0}。預計到達時間{1:HH:mm}。",
@@ -13,6 +13,7 @@
"Title": {
"Strings": {
"地震報告": "地震報告",
"海嘯消息": "海嘯消息",
"海嘯警報": "海嘯警報",
"海嘯警報解除": "海嘯警報解除"
}

View File

@@ -1,7 +1,7 @@
{
"Culture": "zh-CN",
"Strings": {
"EarthquakeBody": "{0}{1}发生规模{2:F1}有感地震,最大震度{3}。",
"EarthquakeBody": "{0}{1}发生震级{2:F1}有感地震,最大震度{3}。",
"EarthquakeFocalDepth": "震源深度{0}千米。",
"TsunamiForecast": "以下地区预计海啸高度{0}。",
"TsunamiForecastArea": "{0}。预计到达时间{1:HH:mm}。",
@@ -13,6 +13,7 @@
"Title": {
"Strings": {
"地震報告": "地震报告",
"海嘯消息": "海啸消息",
"海嘯警報": "海啸警报",
"海嘯警報解除": "海啸警报解除"
}

View File

@@ -1,6 +1,15 @@
{
"Culture": "en-US",
"Strings": {
"AuthorityName": "CWA",
"PropertyDepth": "Depth",
"PropertyDepthValue": "{0}km",
"PropertyMaxIntensity": "Max intensity",
"PropertyMaxTsunamiHeight": "Max tsunami height",
"PropertyMaxTsunamiHeightValue": "{0}m",
"PropertyMaxTsunamiHeightValueUnknown": "Unknown",
"PropertyTsunamiMessage": "Tsunami message",
"PropertyTsunamiWarning": "Tsunami warning",
"SourceName": "CWA ({0})"
},
"StringSets": {
@@ -9,6 +18,20 @@
"Earthquake": "Earthquake",
"Tsunami": "Tsunami"
}
},
"PropertyMagnitude": {
"Strings": {
"": "Magnitude",
"芮氏規模": "Richter magnitude"
}
},
"Title": {
"Strings": {
"地震報告": "Earthquake report",
"海嘯消息": "Tsunami message",
"海嘯警報": "Tsunami warning",
"海嘯警報解除": "Tsunami warning lifted"
}
}
}
}

View File

@@ -1,6 +1,15 @@
{
"Culture": "zh-TW",
"Strings": {
"AuthorityName": "CWA",
"PropertyDepth": "深度",
"PropertyDepthValue": "{0}km",
"PropertyMaxIntensity": "最大震度",
"PropertyMaxTsunamiHeight": "最大波高",
"PropertyMaxTsunamiHeightValue": "{0}m",
"PropertyMaxTsunamiHeightValueUnknown": "不明",
"PropertyTsunamiMessage": "海\u2060嘯消\u2060息",
"PropertyTsunamiWarning": "海\u2060嘯警\u2060報",
"SourceName": "CWA{0}"
},
"StringSets": {
@@ -9,6 +18,20 @@
"Earthquake": "地震",
"Tsunami": "海嘯"
}
},
"PropertyMagnitude": {
"Strings": {
"": "規模",
"芮氏規模": "芮氏規模"
}
},
"Title": {
"Strings": {
"地震報告": "地震報告",
"海嘯消息": "海嘯消息",
"海嘯警報": "海嘯警報",
"海嘯警報解除": "海嘯警報解除"
}
}
}
}

View File

@@ -1,6 +1,15 @@
{
"Culture": "yue-HK",
"Strings": {
"AuthorityName": "CWA",
"PropertyDepth": "深度",
"PropertyDepthValue": "{0}km",
"PropertyMaxIntensity": "最大震度",
"PropertyMaxTsunamiHeight": "最大波高",
"PropertyMaxTsunamiHeightValue": "{0}m",
"PropertyMaxTsunamiHeightValueUnknown": "不明",
"PropertyTsunamiMessage": "海\u2060嘯消\u2060息",
"PropertyTsunamiWarning": "海\u2060嘯警\u2060報",
"SourceName": "CWA{0}"
},
"StringSets": {
@@ -9,6 +18,20 @@
"Earthquake": "地震",
"Tsunami": "海嘯"
}
},
"PropertyMagnitude": {
"Strings": {
"": "震級",
"芮氏規模": "黎克特制震級"
}
},
"Title": {
"Strings": {
"地震報告": "地震報告",
"海嘯消息": "海嘯消息",
"海嘯警報": "海嘯警報",
"海嘯警報解除": "海嘯警報解除"
}
}
}
}

View File

@@ -1,6 +1,15 @@
{
"Culture": "zh-CN",
"Strings": {
"AuthorityName": "CWA",
"PropertyDepth": "深度",
"PropertyDepthValue": "{0}km",
"PropertyMaxIntensity": "最大震度",
"PropertyMaxTsunamiHeight": "最大波高",
"PropertyMaxTsunamiHeightValue": "{0}m",
"PropertyMaxTsunamiHeightValueUnknown": "不明",
"PropertyTsunamiMessage": "海\u2060啸消\u2060息",
"PropertyTsunamiWarning": "海\u2060啸警\u2060报",
"SourceName": "CWA{0}"
},
"StringSets": {
@@ -9,6 +18,20 @@
"Earthquake": "地震",
"Tsunami": "海啸"
}
},
"PropertyMagnitude": {
"Strings": {
"": "震级",
"芮氏規模": "里氏震级"
}
},
"Title": {
"Strings": {
"地震報告": "地震报告",
"海嘯消息": "海啸消息",
"海嘯警報": "海啸警报",
"海嘯警報解除": "海啸警报解除"
}
}
}
}

View File

@@ -1,6 +1,11 @@
{
"Culture": "en-US",
"Strings": {
"SourceName": "EMSC"
"AuthorityName": "EMSC",
"AuthorityNameForwarded": "EMSC | {0}",
"PropertyDepth": "Depth",
"PropertyDepthValue": "{0}km",
"SourceName": "EMSC",
"Title": "Earthquake event"
}
}

View File

@@ -0,0 +1,11 @@
{
"Culture": "yue-HK",
"Strings": {
"AuthorityName": "EMSC",
"AuthorityNameForwarded": "EMSC | {0}",
"PropertyDepth": "深度",
"PropertyDepthValue": "{0}km",
"SourceName": "EMSC",
"Title": "地震事件"
}
}

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 9c44f369185730644b6e777e84ee0569
guid: 0bc7279c4dd92ae43afb3f503643a84c
DefaultImporter:
externalObjects: {}
userData:

View File

@@ -0,0 +1,11 @@
{
"Culture": "zh-TW",
"Strings": {
"AuthorityName": "EMSC",
"AuthorityNameForwarded": "EMSC | {0}",
"PropertyDepth": "深度",
"PropertyDepthValue": "{0}km",
"SourceName": "EMSC",
"Title": "地震事件"
}
}

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 704940476687b1b43a713305dd275d3c
guid: dcc04accbfc4e6b43a60d0bac2a76202
DefaultImporter:
externalObjects: {}
userData:

View File

@@ -0,0 +1,11 @@
{
"Culture": "zh-CN",
"Strings": {
"AuthorityName": "EMSC",
"AuthorityNameForwarded": "EMSC | {0}",
"PropertyDepth": "深度",
"PropertyDepthValue": "{0}km",
"SourceName": "EMSC",
"Title": "地震事件"
}
}

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 643c09fce5fa33048a0a599cab63f9e3
guid: c900640f0d0bccc42a6017504c74a8cb
DefaultImporter:
externalObjects: {}
userData:

View File

@@ -600,7 +600,7 @@
"636": "格陵蘭島東部",
"637": "冰島附近",
"638": "冰島",
"639": "央麥恩島",
"639": "揚馬延島",
"64": "米卻肯近海",
"640": "格陵蘭海",
"641": "冷岸群島以北",

View File

@@ -600,7 +600,7 @@
"636": "格陵蘭島東部",
"637": "冰島附近",
"638": "冰島",
"639": "央麥恩島",
"639": "揚馬延島",
"64": "米卻肯近海",
"640": "格陵蘭海",
"641": "冷岸群島以北",

View File

@@ -600,7 +600,7 @@
"636": "格陵兰岛东部",
"637": "冰岛附近",
"638": "冰岛",
"639": "央麦恩岛",
"639": "扬马延岛",
"64": "米却肯近海",
"640": "格陵兰海",
"641": "斯瓦尔巴群岛以北",

View File

@@ -1,6 +1,28 @@
{
"Culture": "en-US",
"Strings": {
"SourceName": "GlobalQuakeServer"
"AuthorityName": "GlobalQuake",
"PropertyDepth": "Depth",
"PropertyDepthValue": "{0}km",
"PropertyMagnitude": "M",
"PropertyQuality": "Quality",
"SourceName": "GlobalQuakeServer",
"Title": "Detected",
"TitleArchived": "Archived",
"TitleCanceled": "Canceled"
},
"StringSets": {
"PropertyQualityValue": {
"Strings": {
"S": "S",
"A": "A",
"B": "B",
"C": "C",
"D": "D",
"E": "E",
"F": "F",
"?": "?"
}
}
}
}

View File

@@ -1,6 +1,28 @@
{
"Culture": "yue-HK",
"Strings": {
"SourceName": "GlobalQuakeServer"
"AuthorityName": "GlobalQuake",
"PropertyDepth": "深度",
"PropertyDepthValue": "{0}km",
"PropertyMagnitude": "M",
"PropertyQuality": "品質",
"SourceName": "GlobalQuakeServer",
"Title": "檢出",
"TitleArchived": "歸檔",
"TitleCanceled": "取消"
},
"StringSets": {
"PropertyQualityValue": {
"Strings": {
"S": "S",
"A": "A",
"B": "B",
"C": "C",
"D": "D",
"E": "E",
"F": "F",
"?": "?"
}
}
}
}

View File

@@ -1,6 +1,28 @@
{
"Culture": "zh-TW",
"Strings": {
"SourceName": "GlobalQuakeServer"
"AuthorityName": "GlobalQuake",
"PropertyDepth": "深度",
"PropertyDepthValue": "{0}km",
"PropertyMagnitude": "M",
"PropertyQuality": "品質",
"SourceName": "GlobalQuakeServer",
"Title": "檢出",
"TitleArchived": "歸檔",
"TitleCanceled": "取消"
},
"StringSets": {
"PropertyQualityValue": {
"Strings": {
"S": "S",
"A": "A",
"B": "B",
"C": "C",
"D": "D",
"E": "E",
"F": "F",
"?": "?"
}
}
}
}

View File

@@ -1,6 +1,28 @@
{
"Culture": "zh-CN",
"Strings": {
"SourceName": "GlobalQuakeServer"
"AuthorityName": "GlobalQuake",
"PropertyDepth": "深度",
"PropertyDepthValue": "{0}km",
"PropertyMagnitude": "M",
"PropertyQuality": "质量",
"SourceName": "GlobalQuakeServer",
"Title": "检出",
"TitleArchived": "归档",
"TitleCanceled": "取消"
},
"StringSets": {
"PropertyQualityValue": {
"Strings": {
"S": "S",
"A": "A",
"B": "B",
"C": "C",
"D": "D",
"E": "E",
"F": "F",
"?": "?"
}
}
}
}

View File

@@ -106,7 +106,7 @@
"0226": "There is a possibility of a destructive local tsunami near the epicenter.",
"0227": "Minor local tsunami may occur near the epicenter, but no tsunami damage is expected.",
"0228": "A shallow earthquake with the same magnitude in a sea area may generate a tsunami.",
"0229": "The possibility of tsunami generation toward Japan in currently under evaluation.",
"0229": "The possibility of tsunami generation toward Japan is currently under evaluation.",
"0230": "This earthquake poses no tsunami risk to Japan.",
"0241": "Earthquake Early Warning is in effect for this earthquake.",
"0242": "Earthquake Early Warning is in effect for this earthquake. Its maximum seismic intensity was 2.",
@@ -160,12 +160,12 @@
"Status": {
"Strings": {
"訓練": "This report is for drilling.",
"試験": "This report is for experiment."
"試験": "This report is for testing."
}
},
"Title": {
"Strings": {
"": "report",
"": "Information",
"北海道・三陸沖後発地震注意情報": "Hokkaido and off-Sanriku aftershock notice",
"南海トラフ地震に関連する情報": "Information related to Nankai Trough earthquake",
"噴火に関する火山観測報": "Volcano observation information about eruption",

View File

@@ -118,7 +118,7 @@
},
"EarthquakeMagnitudeUnknown": {
"Strings": {
"": "地震嘅規模不明。",
"": "地震嘅震級不明。",
"M8を超える巨大地震": "推定呢次地震係震級大於8嘅巨大地震。"
}
},
@@ -131,7 +131,7 @@
},
"NankaiTroughInfo": {
"Strings": {
"111": "南海海槽地震嘅監視區域內發生咗規模6.8或以上嘅地震。\n氣象廳已經開始調查呢次發生嘅地震與南海海槽地震嘅關聯性並舉辦關於沿南海海槽地震嘅評估檢討會。\n若位於南海海槽地震嘅預想受災地區請根據各自嘅情況採取行動保護自身安全。",
"111": "南海海槽地震嘅監視區域內發生咗震級6.8或以上嘅地震。\n氣象廳已經開始調查呢次發生嘅地震與南海海槽地震嘅關聯性並舉辦關於沿南海海槽地震嘅評估檢討會。\n若位於南海海槽地震嘅預想受災地區請根據各自嘅情況採取行動保護自身安全。",
"112": "應變觀測點觀測到咗顯著嘅變化,且變化正在增大。\n氣象廳已經開始調查觀測到嘅現象與南海海槽地震嘅關聯性並舉辦關於沿南海海槽地震嘅評估檢討會。\n若位於南海海槽地震嘅預想受災地區請注意後續嘅資訊。",
"113": "觀測到咗可能表明預想震源域內嘅板塊邊界嘅固著狀態發生變化嘅現象。\n氣象廳已經開始調查觀測到嘅現象與南海海槽地震嘅關聯性並舉辦關於沿南海海槽地震嘅評估檢討會。\n若位於南海海槽地震嘅預想受災地區請注意後續嘅資訊。",
"120": "氣象廳臨時舉辦咗關於沿南海海槽地震嘅評估檢討會。評估認為由於本次地震嘅矩震級為8.0或以上,包括唔係呢次地震嘅震源域嘅區域在內,南海海槽地震嘅預想震源域內,大規模地震發生嘅可能性與平常相比相對較高。\n請根據政府同自治體等後續嘅呼籲等採取防災措施。\n氣象廳將繼續密切監視沿南海海槽地殼活動嘅推移。",
@@ -160,12 +160,12 @@
"Status": {
"Strings": {
"訓練": "呢報係訓練報。",
"試験": "呢報係試報。"
"試験": "呢報係試報。"
}
},
"Title": {
"Strings": {
"": "電文",
"": "資訊",
"北海道・三陸沖後発地震注意情報": "北海道、三陸外海餘震注意資訊",
"南海トラフ地震に関連する情報": "關於南海海槽地震嘅資訊",
"噴火に関する火山観測報": "關於火山噴發嘅火山觀測報",
@@ -227,7 +227,7 @@
"32": "海上警報(火山噴發警報解除)",
"33": "海上預報(火山噴發預報)",
"35": "活火山留意(海底火山)",
"36": "邊海域警戒",
"36": "邊海域警戒",
"51": "爆發",
"52": "噴發",
"53": "開始噴發",

View File

@@ -12,7 +12,7 @@
"EarthquakeHypocenterDepth": "震源深度約{0}公里。",
"EarthquakeHypocenterDepth0": "震源深度為極淺。",
"EarthquakeHypocenterDepthUnknown": "震源深度不明。",
"EarthquakeMagnitude": "表示地震規模的震級推定為{0:F1}級。",
"EarthquakeMagnitude": "地震規模推定為{0:F1}級。",
"EarthquakeMultiple": "本資訊是由於多次地震而發表的。",
"EarthquakeMultipleIndex": "地震{0}",
"HeadlineAshDetailed": "此次{0}噴發,降灰等情況的詳細預報如下。",
@@ -119,7 +119,7 @@
"EarthquakeMagnitudeUnknown": {
"Strings": {
"": "地震的規模不明。",
"M8を超える巨大地震": "推定本次地震為震級大於8的巨大地震"
"M8を超える巨大地震": "推定本次地震為規模大於8的巨大地震"
}
},
"HeadlineVolcanoWarning": {
@@ -134,7 +134,7 @@
"111": "南海海槽地震的監視區域內發生了規模6.8或以上的地震。\n氣象廳已經開始調查本次發生的地震與南海海槽地震的關聯性並舉辦關於沿南海海槽地震的評估檢討會。\n若位於南海海槽地震的預想受災地區請根據各自的情況採取行動保護自身安全。",
"112": "應變觀測點觀測到了顯著的變化,且變化正在增大。\n氣象廳已經開始調查觀測到的現象與南海海槽地震的關聯性並舉辦關於沿南海海槽地震的評估檢討會。\n若位於南海海槽地震的預想受災地區請注意後續的資訊。",
"113": "觀測到了可能表明預想震源域內的板塊邊界的固著狀態發生變化的現象。\n氣象廳已經開始調查觀測到的現象與南海海槽地震的關聯性並舉辦關於沿南海海槽地震的評估檢討會。\n若位於南海海槽地震的預想受災地區請注意後續的資訊。",
"120": "氣象廳臨時舉辦了關於沿南海海槽地震的評估檢討會。評估認為,由於本次地震的矩震級為8.0或以上,包括不是本次地震的震源域的區域在內,南海海槽地震的預想震源域內,大規模地震發生的可能性與平常相比相對較高。\n請根據政府和自治體等後續的呼籲等採取防災措施。\n氣象廳將繼續密切監視沿南海海槽地殼活動的推移。",
"120": "氣象廳臨時舉辦了關於沿南海海槽地震的評估檢討會。評估認為,由於本次地震的地震矩規模為8.0或以上,包括不是本次地震的震源域的區域在內,南海海槽地震的預想震源域內,大規模地震發生的可能性與平常相比相對較高。\n請根據政府和自治體等後續的呼籲等採取防災措施。\n氣象廳將繼續密切監視沿南海海槽地殼活動的推移。",
"130": "氣象廳臨時舉辦了關於沿南海海槽地震的評估檢討會。評估認為,南海海槽地震的預想震源域內,大規模地震發生的可能性與平常相比相對較高。\n請根據政府和自治體等後續的呼籲等採取防災措施。\n氣象廳將繼續密切監視沿南海海槽地殼活動的推移。",
"190": "氣象廳臨時舉辦了關於沿南海海槽地震的評估檢討會。評估認為,沒有觀測到能夠表明沿南海海槽的大規模地震發生的可能性與平常相比相對較高的變化。\n氣象廳將繼續密切監視沿南海海槽地殼活動的推移。",
"200": "氣象廳舉辦了關於沿南海海槽地震的評估檢討會。當前,沒有觀測到能夠表明沿南海海槽的大規模地震發生的可能性與平常相比相對較高的變化。",
@@ -160,12 +160,12 @@
"Status": {
"Strings": {
"訓練": "本報為訓練報。",
"試験": "本報為試報。"
"試験": "本報為試報。"
}
},
"Title": {
"Strings": {
"": "電文",
"": "資訊",
"北海道・三陸沖後発地震注意情報": "北海道、三陸外海餘震注意資訊",
"南海トラフ地震に関連する情報": "關於南海海槽地震的資訊",
"噴火に関する火山観測報": "關於火山噴發的火山觀測報",

View File

@@ -118,7 +118,7 @@
},
"EarthquakeMagnitudeUnknown": {
"Strings": {
"": "地震的规模不明。",
"": "地震的震级不明。",
"M8を超える巨大地震": "推定本次地震为震级大于8的巨大地震"
}
},
@@ -131,7 +131,7 @@
},
"NankaiTroughInfo": {
"Strings": {
"111": "南海海槽地震的监视区域内发生了规模6.8或以上的地震。\n气象厅已经开始调查本次发生的地震与南海海槽地震的关联性并举办关于沿南海海槽地震的评估检讨会。\n若位于南海海槽地震的预想受灾地区请根据各自的情况采取行动保护自身安全。",
"111": "南海海槽地震的监视区域内发生了震级6.8或以上的地震。\n气象厅已经开始调查本次发生的地震与南海海槽地震的关联性并举办关于沿南海海槽地震的评估检讨会。\n若位于南海海槽地震的预想受灾地区请根据各自的情况采取行动保护自身安全。",
"112": "应变观测点观测到了显著的变化,且变化正在增大。\n气象厅已经开始调查观测到的现象与南海海槽地震的关联性并举办关于沿南海海槽地震的评估检讨会。\n若位于南海海槽地震的预想受灾地区请注意后续的信息。",
"113": "观测到了可能表明预想震源域内的板块边界的固着状态发生变化的现象。\n气象厅已经开始调查观测到的现象与南海海槽地震的关联性并举办关于沿南海海槽地震的评估检讨会。\n若位于南海海槽地震的预想受灾地区请注意后续的信息。",
"120": "气象厅临时举办了关于沿南海海槽地震的评估检讨会。评估认为由于本次地震的矩震级为8.0或以上,包括不是本次地震的震源域的区域在内,南海海槽地震的预想震源域内,大规模地震发生的可能性与平常相比相对较高。\n请根据政府和自治体等后续的呼吁等采取防灾措施。\n气象厅将继续密切监视沿南海海槽地壳活动的推移。",
@@ -160,12 +160,12 @@
"Status": {
"Strings": {
"訓練": "本报为训练报。",
"試験": "本报为试报。"
"試験": "本报为试报。"
}
},
"Title": {
"Strings": {
"": "电文",
"": "信息",
"北海道・三陸沖後発地震注意情報": "北海道、三陆外海余震注意信息",
"南海トラフ地震に関連する情報": "关于南海海槽地震的信息",
"噴火に関する火山観測報": "关于火山喷发的火山观测报",

View File

@@ -1,6 +1,117 @@
{
"Culture": "en-US",
"Strings": {
"AuthorityName": "JMA",
"LocationAggregated": "{0} (+{1})",
"PlumeColorPlume": "Colored plume",
"PlumeWhitePlume": "White plume",
"PropertyDepth": "Depth",
"PropertyDepthValue": "{0}km",
"PropertyDepthValueVeryShallow": "Very shallow",
"PropertyMaxIntensity": "Max intensity",
"PropertyMaxLPGM": "Max LPGM intensity",
"PropertyMaxTsunamiHeight": "Max tsunami height",
"PropertyMaxTsunamiHeightConditionBelow": "below",
"PropertyMaxTsunamiHeightConditionOver": "over",
"PropertyMaxTsunamiHeightValue": "{0}m",
"PropertyPlumeHeightAboveCrater": "{0} height above crater",
"PropertyPlumeHeightAboveCraterValue": "{0}km",
"PropertyPlumeHeightAboveCraterValueNone": "No plume",
"PropertyPlumeHeightAboveCraterValueUnknown": "Unknown",
"SourceName": "JMA Atom"
},
"StringSets": {
"InfoKind": {
"Strings": {
"": "Information",
"北海道・三陸沖後発地震注意情報": "Hokkaido and off-Sanriku aftershock notice",
"南海トラフ地震に関連する情報": "Information related to Nankai Trough earthquake",
"噴火に関する火山観測報": "Volcano observation information about eruption",
"噴火警報・予報": "Vocanic warning and forecast",
"噴火速報": "Volcanic eruption notice",
"地震の活動状況等に関する情報": "Earthquake activity information",
"地震回数情報": "Earthquake count information",
"地震情報": "Earthquake and seismic intensity information",
"推定噴煙流向報": "Estimated plume direction information",
"津波情報": "Tsunami information",
"津波警報・注意報・予報": "Tsunami warning, advisory, and forecast",
"火山の状況に関する解説情報": "Explanatory information on volcano status",
"長周期地震動に関する観測情報": "Long period ground motion observation information",
"降灰予報": "Volcanic ash fall forecast",
"震度速報": "Seismic intensity information",
"震源要素更新のお知らせ": "Significant earthquake hypocenter update notice",
"震源速報": "Earthquake information"
}
},
"PredicateVolcanic": {
"Strings": {
"51": "explosively erupted",
"52": "erupted",
"53": "started erupting",
"54": "is erupting continuously",
"55": "stopped erupting continuously",
"56": "is actively erupting",
"61": "appeared explosively erupted",
"62": "appeared erupted",
"63": "appeared to start erupting",
"64": "appeared to be erupting continuously",
"65": "appeared to stop erupting"
}
},
"PropertyMagnitudeValueUnknown": {
"Strings": {
"": "Unknown",
"M8を超える巨大地震": "Massive earthquake of M8 and above"
}
},
"PropertyMaxTsunamiHeightSpecialValue": {
"Strings": {
"微弱": "Slight",
"欠測": "Data missing",
"観測中": "Information pending"
}
},
"PropertyPlumeHeightAboveCraterValueCondition": {
"Strings": {
"上昇中": "rising",
"以上": "over",
"雲に入る": "entering clouds"
}
},
"PropertyTsunamiWarningValue": {
"Strings": {
"5": "Major Tsunami Warning",
"4": "Tsunami Warning",
"3": "Tsunami Advisory",
"0": "Tsunami Forecast",
"": "Lifted"
}
},
"PropertyVocanicWarningValue": {
"Strings": {
"11": "Level 1",
"12": "Level 2",
"13": "Level 3",
"14": "Level 4",
"15": "Level 5",
"21": "Potential",
"22": "Caution around crater",
"23": "Caution non-residential",
"24": "Caution foot of mountains",
"25": "Caution residential",
"31": "Volcanic warning",
"32": "Warning lifted",
"33": "Volcanic forecast",
"35": "Potential",
"36": "Caution sea area",
"": "Volcanic warning"
}
},
"Status": {
"Strings": {
"訓練": "{0} (Drilling)",
"試験": "{0} (Testing)"
}
}
}
}

View File

@@ -1,6 +1,73 @@
{
"Culture": "ja-JP",
"Strings": {
"AuthorityName": "JMA",
"LocationAggregated": "{0}+{1}",
"PlumeColorPlume": "有\u2060色噴\u2060煙",
"PlumeWhitePlume": "白\u2060色噴\u2060煙",
"PropertyDepth": "深さ",
"PropertyDepthValue": "{0}km",
"PropertyDepthValueVeryShallow": "ごく浅い",
"PropertyMaxIntensity": "最大震度",
"PropertyMaxLPGM": "最\u2060大長\u2060周\u2060期地\u2060震\u2060動階\u2060級",
"PropertyMaxTsunamiHeight": "最大波",
"PropertyMaxTsunamiHeightConditionBelow": "未満",
"PropertyMaxTsunamiHeightConditionOver": "以上",
"PropertyMaxTsunamiHeightValue": "{0}m",
"PropertyPlumeHeightAboveCrater": "{0}火\u2060口\u2060上高\u2060度",
"PropertyPlumeHeightAboveCraterValue": "{0}km",
"PropertyPlumeHeightAboveCraterValueNone": "噴\u2060煙な\u2060し",
"PropertyPlumeHeightAboveCraterValueUnknown": "不明",
"SourceName": "JMA Atom"
},
"StringSets": {
"PropertyMagnitudeValueUnknown": {
"Strings": {
"": "不\u2060明",
"M8を超える巨大地震": "\u2060を超\u2060え\u2060る巨\u2060大地\u2060震"
}
},
"PropertyMaxTsunamiHeightSpecialValue": {
"Strings": {
"微弱": "微\u2060弱",
"欠測": "欠\u2060測",
"観測中": "観\u2060測中"
}
},
"PropertyTsunamiWarningValue": {
"Strings": {
"5": "大\u2060津\u2060波警\u2060報",
"4": "津\u2060波警\u2060報",
"3": "津\u2060波注\u2060意\u2060報",
"0": "津\u2060波予\u2060報",
"": "解\u2060除"
}
},
"PropertyVocanicWarningValue": {
"Strings": {
"11": "レ\u2060ベ\u2060ル",
"12": "レ\u2060ベ\u2060ル",
"13": "レ\u2060ベ\u2060ル",
"14": "レ\u2060ベ\u2060ル",
"15": "レ\u2060ベ\u2060ル",
"21": "活\u2060火\u2060山留\u2060意",
"22": "火\u2060口周\u2060辺危\u2060険",
"23": "入\u2060山危\u2060険",
"24": "山\u2060麓警\u2060戒",
"25": "居\u2060住地\u2060域警\u2060戒",
"31": "噴\u2060火警\u2060報",
"32": "警\u2060報解\u2060除",
"33": "噴\u2060火予\u2060報",
"35": "活\u2060火\u2060山留\u2060意",
"36": "周\u2060辺海\u2060域警\u2060戒",
"": "噴\u2060火警\u2060報"
}
},
"Status": {
"Strings": {
"訓練": "{0}(訓練)",
"試験": "{0}(試験)"
}
}
}
}

View File

@@ -1,6 +1,117 @@
{
"Culture": "yue-HK",
"Strings": {
"AuthorityName": "JMA",
"LocationAggregated": "{0}+{1}",
"PlumeColorPlume": "有\u2060色噴\u2060煙",
"PlumeWhitePlume": "白\u2060色噴\u2060煙",
"PropertyDepth": "深度",
"PropertyDepthValue": "{0}km",
"PropertyDepthValueVeryShallow": "極淺",
"PropertyMaxIntensity": "最大震度",
"PropertyMaxLPGM": "最\u2060大長\u2060周\u2060期地\u2060震\u2060動階\u2060級",
"PropertyMaxTsunamiHeight": "最大波",
"PropertyMaxTsunamiHeightConditionBelow": "不滿",
"PropertyMaxTsunamiHeightConditionOver": "以上",
"PropertyMaxTsunamiHeightValue": "{0}m",
"PropertyPlumeHeightAboveCrater": "{0}火\u2060山\u2060口上\u2060方高\u2060度",
"PropertyPlumeHeightAboveCraterValue": "{0}km",
"PropertyPlumeHeightAboveCraterValueNone": "冇噴\u2060煙",
"PropertyPlumeHeightAboveCraterValueUnknown": "不明",
"SourceName": "JMA Atom"
},
"StringSets": {
"InfoKind": {
"Strings": {
"": "資訊",
"北海道・三陸沖後発地震注意情報": "北海道、三陸外海餘震注意資訊",
"南海トラフ地震に関連する情報": "關於南海海槽地震嘅資訊",
"噴火に関する火山観測報": "關於火山噴發嘅火山觀測報",
"噴火警報・予報": "火山噴發警報、預報",
"噴火速報": "火山噴發速報",
"地震の活動状況等に関する情報": "關於地震嘅活動狀況等嘅資訊",
"地震回数情報": "地震次數資訊",
"地震情報": "地震資訊",
"推定噴煙流向報": "推定噴煙流向報",
"津波情報": "海嘯資訊",
"津波警報・注意報・予報": "海嘯警報、注意報、預報",
"火山の状況に関する解説情報": "關於火山嘅狀況嘅解説資訊",
"長周期地震動に関する観測情報": "關於長週期地震動嘅觀測資訊",
"降灰予報": "降灰預報",
"震度速報": "震度速報",
"震源要素更新のお知らせ": "震源要素更新通知",
"震源速報": "震源速報"
}
},
"PredicateVolcanic": {
"Strings": {
"51": "爆發",
"52": "噴發",
"53": "開始噴發",
"54": "持續連續噴發",
"55": "停止連續噴發",
"56": "噴發多發",
"61": "似乎已經爆發",
"62": "似乎已經噴發",
"63": "似乎已經開始噴發",
"64": "似乎正在持續連續噴發",
"65": "似乎已經停止連續噴發"
}
},
"PropertyMagnitudeValueUnknown": {
"Strings": {
"": "不\u2060明",
"M8を超える巨大地震": "震\u2060級大\u2060於8的巨\u2060大地\u2060震"
}
},
"PropertyMaxTsunamiHeightSpecialValue": {
"Strings": {
"微弱": "微\u2060弱",
"欠測": "缺\u2060失數\u2060據",
"観測中": "觀\u2060測中"
}
},
"PropertyPlumeHeightAboveCraterValueCondition": {
"Strings": {
"上昇中": "上升中",
"以上": "以上",
"雲に入る": "進入雲層"
}
},
"PropertyTsunamiWarningValue": {
"Strings": {
"5": "大\u2060海\u2060嘯警\u2060報",
"4": "海\u2060嘯警\u2060報",
"3": "海\u2060嘯注\u2060意\u2060報",
"0": "海\u2060嘯預\u2060報",
"": "解\u2060除"
}
},
"PropertyVocanicWarningValue": {
"Strings": {
"11": "等\u2060級1",
"12": "等\u2060級2",
"13": "等\u2060級3",
"14": "等\u2060級4",
"15": "等\u2060級5",
"21": "活\u2060火\u2060山留\u2060意",
"22": "火\u2060山\u2060口周\u2060邊危\u2060險",
"23": "入\u2060山危\u2060險",
"24": "山\u2060麓警\u2060戒",
"25": "居\u2060住地\u2060區警\u2060戒",
"31": "火\u2060山噴\u2060發警\u2060報",
"32": "警\u2060報解\u2060除",
"33": "火\u2060山噴\u2060發預\u2060報",
"35": "活\u2060火\u2060山留\u2060意",
"36": "周\u2060邊海\u2060域警\u2060戒",
"": "火\u2060山噴\u2060發警\u2060報"
}
},
"Status": {
"Strings": {
"訓練": "{0}(訓練)",
"試験": "{0}(測試)"
}
}
}
}

View File

@@ -1,6 +1,117 @@
{
"Culture": "zh-TW",
"Strings": {
"AuthorityName": "JMA",
"LocationAggregated": "{0}+{1}",
"PlumeColorPlume": "有\u2060色噴\u2060煙",
"PlumeWhitePlume": "白\u2060色噴\u2060煙",
"PropertyDepth": "深度",
"PropertyDepthValue": "{0}km",
"PropertyDepthValueVeryShallow": "極淺",
"PropertyMaxIntensity": "最大震度",
"PropertyMaxLPGM": "最\u2060大長\u2060周\u2060期地\u2060震\u2060動階\u2060級",
"PropertyMaxTsunamiHeight": "最大波",
"PropertyMaxTsunamiHeightConditionBelow": "不滿",
"PropertyMaxTsunamiHeightConditionOver": "以上",
"PropertyMaxTsunamiHeightValue": "{0}m",
"PropertyPlumeHeightAboveCrater": "{0}火\u2060山\u2060口上\u2060方高\u2060度",
"PropertyPlumeHeightAboveCraterValue": "{0}km",
"PropertyPlumeHeightAboveCraterValueNone": "無噴\u2060煙",
"PropertyPlumeHeightAboveCraterValueUnknown": "不明",
"SourceName": "JMA Atom"
},
"StringSets": {
"InfoKind": {
"Strings": {
"": "資訊",
"北海道・三陸沖後発地震注意情報": "北海道、三陸外海餘震注意資訊",
"南海トラフ地震に関連する情報": "關於南海海槽地震的資訊",
"噴火に関する火山観測報": "關於火山噴發的火山觀測報",
"噴火警報・予報": "火山噴發警報、預報",
"噴火速報": "火山噴發速報",
"地震の活動状況等に関する情報": "關於地震的活動狀況等的資訊",
"地震回数情報": "地震次數資訊",
"地震情報": "地震資訊",
"推定噴煙流向報": "推定噴煙流向報",
"津波情報": "海嘯資訊",
"津波警報・注意報・予報": "海嘯警報、注意報、預報",
"火山の状況に関する解説情報": "關於火山的狀況的解説資訊",
"長周期地震動に関する観測情報": "關於長周期地震動的觀測資訊",
"降灰予報": "降灰預報",
"震度速報": "震度速報",
"震源要素更新のお知らせ": "震源要素更新通知",
"震源速報": "震源速報"
}
},
"PredicateVolcanic": {
"Strings": {
"51": "爆發",
"52": "噴發",
"53": "開始噴發",
"54": "持續連續噴發",
"55": "停止連續噴發",
"56": "噴發多發",
"61": "似乎已經爆發",
"62": "似乎已經噴發",
"63": "似乎已經開始噴發",
"64": "似乎正在持續連續噴發",
"65": "似乎已經停止連續噴發"
}
},
"PropertyMagnitudeValueUnknown": {
"Strings": {
"": "不\u2060明",
"M8を超える巨大地震": "規\u2060模大\u2060於8的巨\u2060大地\u2060震"
}
},
"PropertyMaxTsunamiHeightSpecialValue": {
"Strings": {
"微弱": "微\u2060弱",
"欠測": "缺\u2060失數\u2060據",
"観測中": "觀\u2060測中"
}
},
"PropertyPlumeHeightAboveCraterValueCondition": {
"Strings": {
"上昇中": "上升中",
"以上": "以上",
"雲に入る": "進入雲層"
}
},
"PropertyTsunamiWarningValue": {
"Strings": {
"5": "大\u2060海\u2060嘯警\u2060報",
"4": "海\u2060嘯警\u2060報",
"3": "海\u2060嘯注\u2060意\u2060報",
"0": "海\u2060嘯預\u2060報",
"": "解\u2060除"
}
},
"PropertyVocanicWarningValue": {
"Strings": {
"11": "等\u2060級1",
"12": "等\u2060級2",
"13": "等\u2060級3",
"14": "等\u2060級4",
"15": "等\u2060級5",
"21": "活\u2060火\u2060山留\u2060意",
"22": "火\u2060山\u2060口周\u2060邊危\u2060險",
"23": "入\u2060山危\u2060險",
"24": "山\u2060麓警\u2060戒",
"25": "居\u2060住地\u2060區警\u2060戒",
"31": "火\u2060山噴\u2060發警\u2060報",
"32": "警\u2060報解\u2060除",
"33": "火\u2060山噴\u2060發預\u2060報",
"35": "活\u2060火\u2060山留\u2060意",
"36": "周\u2060邊海\u2060域警\u2060戒",
"": "火\u2060山噴\u2060發警\u2060報"
}
},
"Status": {
"Strings": {
"訓練": "{0}(訓練)",
"試験": "{0}(測試)"
}
}
}
}

View File

@@ -1,6 +1,117 @@
{
"Culture": "zh-CN",
"Strings": {
"AuthorityName": "JMA",
"LocationAggregated": "{0}+{1}",
"PlumeColorPlume": "有\u2060色喷\u2060烟",
"PlumeWhitePlume": "白\u2060色喷\u2060烟",
"PropertyDepth": "深度",
"PropertyDepthValue": "{0}km",
"PropertyDepthValueVeryShallow": "极浅",
"PropertyMaxIntensity": "最大震度",
"PropertyMaxLPGM": "最\u2060大长\u2060周\u2060期地\u2060震\u2060动阶\u2060级",
"PropertyMaxTsunamiHeight": "最大波",
"PropertyMaxTsunamiHeightConditionBelow": "不满",
"PropertyMaxTsunamiHeightConditionOver": "以上",
"PropertyMaxTsunamiHeightValue": "{0}m",
"PropertyPlumeHeightAboveCrater": "{0}火\u2060山\u2060口上\u2060方高\u2060度",
"PropertyPlumeHeightAboveCraterValue": "{0}km",
"PropertyPlumeHeightAboveCraterValueNone": "无喷\u2060烟",
"PropertyPlumeHeightAboveCraterValueUnknown": "不明",
"SourceName": "JMA Atom"
},
"StringSets": {
"InfoKind": {
"Strings": {
"": "信息",
"北海道・三陸沖後発地震注意情報": "北海道、三陆外海余震注意信息",
"南海トラフ地震に関連する情報": "关于南海海槽地震的信息",
"噴火に関する火山観測報": "关于火山喷发的火山观测报",
"噴火警報・予報": "火山喷发警报、预报",
"噴火速報": "火山喷发速报",
"地震の活動状況等に関する情報": "关于地震的活动状况等的信息",
"地震回数情報": "地震次数信息",
"地震情報": "地震信息",
"推定噴煙流向報": "推定喷烟流向报",
"津波情報": "海啸信息",
"津波警報・注意報・予報": "海啸警报、注意报、预报",
"火山の状況に関する解説情報": "关于火山的状况的解说信息",
"長周期地震動に関する観測情報": "关于长周期地震动的观测信息",
"降灰予報": "降灰预报",
"震度速報": "震度速报",
"震源要素更新のお知らせ": "震源要素更新通知",
"震源速報": "震源速报"
}
},
"PredicateVolcanic": {
"Strings": {
"51": "爆发",
"52": "喷发",
"53": "开始喷发",
"54": "持续连续喷发",
"55": "停止连续喷发",
"56": "喷发多发",
"61": "似乎已经爆发",
"62": "似乎已经喷发",
"63": "似乎已经开始喷发",
"64": "似乎正在持续连续喷发",
"65": "似乎已经停止连续喷发"
}
},
"PropertyMagnitudeValueUnknown": {
"Strings": {
"": "不\u2060明",
"M8を超える巨大地震": "震\u2060级大\u2060于8的巨\u2060大地\u2060震"
}
},
"PropertyMaxTsunamiHeightSpecialValue": {
"Strings": {
"微弱": "微\u2060弱",
"欠測": "缺\u2060失数\u2060据",
"観測中": "观\u2060测中"
}
},
"PropertyPlumeHeightAboveCraterValueCondition": {
"Strings": {
"上昇中": "上升中",
"以上": "以上",
"雲に入る": "进入云层"
}
},
"PropertyTsunamiWarningValue": {
"Strings": {
"5": "大\u2060海\u2060啸警\u2060报",
"4": "海\u2060啸警\u2060报",
"3": "海\u2060啸注\u2060意\u2060报",
"0": "海\u2060啸预\u2060报",
"": "解\u2060除"
}
},
"PropertyVocanicWarningValue": {
"Strings": {
"11": "等\u2060级1",
"12": "等\u2060级2",
"13": "等\u2060级3",
"14": "等\u2060级4",
"15": "等\u2060级5",
"21": "活\u2060火\u2060山留\u2060意",
"22": "火\u2060山\u2060口周\u2060边危\u2060险",
"23": "入\u2060山危\u2060险",
"24": "山\u2060麓警\u2060戒",
"25": "居\u2060住地\u2060区警\u2060戒",
"31": "火\u2060山喷\u2060发警\u2060报",
"32": "警\u2060报解\u2060除",
"33": "火\u2060山喷\u2060发预\u2060报",
"35": "活\u2060火\u2060山留\u2060意",
"36": "周\u2060边海\u2060域警\u2060戒",
"": "火\u2060山喷\u2060发警\u2060报"
}
},
"Status": {
"Strings": {
"訓練": "{0}(训练)",
"試験": "{0}(测试)"
}
}
}
}

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