Skip to content

Commit

Permalink
довёл до ума
Browse files Browse the repository at this point in the history
  • Loading branch information
Hummel009 committed Sep 11, 2024
1 parent 631229f commit 3d00a35
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 33 deletions.
21 changes: 17 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,23 @@
[![Technical Debt][technical_debt_badge]][technical_debt_link]
[![Lines of Code][lines_of_code_badge]][lines_of_code_link]

Программа для удаления строк-дубликатов в файлах .lang сабмодов LOTR. В таких файлах все строки являются строками
вида `key=value`. Программа считает дубликатами строки, у которых совпадает `key`. Таким образом, если в начале файла с
переводами вставить полный актуальный перевод мода "Властелин колец", а затем использовать эту программу, то перевод
стандартных лотровских вещей в сабмоде будет восполнен (если чего-то не хватало) и актуализирован.
Программа для актуализации и удаления строк-дубликатов в файлах .lang сабмодов LOTR.

В переводах мода LOTR все строки являются строками вида `key=value`. И часто при разработке сабмода бывает так, что
перевод нового контента пишется хаотично, его строки набрасываются прямо внутри перевода основного мода, а основной мод
ещё и обновляется, так что перевод ванильного лотра в сабмоде стремительно теряет актуальность — какие-то строки не
имеют перевода вовсе, а какие-то переводы остаются старыми. Это фиксится добавлением актуального перевода мода LOTR в
начало или в конец файла сабмода, из-за чего он распухает в два раза, зато все строки переведены.

Эта программа позволяет актуализировать перевод, удалить дубликаты и разделить отдельно строчки сабмода и отдельно
строчки LOTR, которые будут идти отдельными цельными блоками. Программа считает дубликатами строки, у которых совпадает
`key`, так что проблема с устаревшим и неодинаковым `value` исчезает.

Если есть необходимость, чтобы изменённые или устаревшие строчки перевода ванильного лотра остались в сабмоде (то есть
имели приоритет над актуальным переводом оригинала), нужно снять галочку в третьей строке окна. В таком
случае, в начале файла будет идти перевод сабмода, в конце — перевод лотра, который будет содержать лишь недостающие
строки. Если же галочку оставить, перевод основы будет сверху, а перевод сабмода снизу, и перевод сабмода будет
содержать лишь строки, касающиеся нового контента.

<!----------------------------------------------------------------------------->

Expand Down
67 changes: 38 additions & 29 deletions src/main/kotlin/com/github/hummel/lotrlang/Main.kt
Original file line number Diff line number Diff line change
Expand Up @@ -32,20 +32,24 @@ class GUI : JFrame() {
}
}

private fun process(inputField: JTextField, outputField: JTextField) {
if (inputField.text.isEmpty() || outputField.text.isEmpty()) {
private fun process(vanillaField: JTextField, submodField: JTextField, vanillaPriority: Boolean) {
if (vanillaField.text.isEmpty() || submodField.text.isEmpty()) {
JOptionPane.showMessageDialog(this, "Fill the fields", "Error", JOptionPane.ERROR_MESSAGE)
return
}
val firstFile = File(inputField.text)
val secondFile = File(outputField.text)
if (!firstFile.exists() || !firstFile.isFile) {
val firstFile = File(vanillaField.text)
val secondFile = File(submodField.text)
if (!firstFile.exists() || !firstFile.isFile || !secondFile.exists() || !secondFile.isFile) {
JOptionPane.showMessageDialog(this, "Corrupted file", "Error", JOptionPane.ERROR_MESSAGE)
return
}
val lines = firstFile.readLines()

val uniqueLines = lines.map {
val firstLines = firstFile.readLines()
val secondLines = secondFile.readLines()

val allLines = if (vanillaPriority) firstLines + secondLines else secondLines + firstLines

val uniqueLines = allLines.map {
it.split('=', limit = 2)
}.distinctBy {
it[0]
Expand All @@ -71,35 +75,40 @@ class GUI : JFrame() {
contentPanel.layout = GridLayout(0, 1, 0, 0)
contentPane = contentPanel

val inputPanel = JPanel()
val inputLabel = JLabel("Target lang path:")
inputLabel.preferredSize = Dimension(120, inputLabel.preferredSize.height)
val inputField = JTextField(24)
val inputButton = JButton("Select path")
inputButton.addActionListener { selectPath(inputField) }
inputPanel.add(inputLabel)
inputPanel.add(inputField)
inputPanel.add(inputButton)

val outputPanel = JPanel()
val outputLabel = JLabel("Output lang path:")
outputLabel.preferredSize = Dimension(120, outputLabel.preferredSize.height)
val outputField = JTextField(24)
val outputButton = JButton("Select path")
outputButton.addActionListener { selectPath(outputField) }
outputPanel.add(outputLabel)
outputPanel.add(outputField)
outputPanel.add(outputButton)
val vanillaPanel = JPanel()
val vanillaLabel = JLabel("Vanilla LOTR lang path:")
vanillaLabel.preferredSize = Dimension(140, vanillaLabel.preferredSize.height)
val vanillaField = JTextField(24)
val vanillaButton = JButton("Select path")
vanillaButton.addActionListener { selectPath(vanillaField) }
vanillaPanel.add(vanillaLabel)
vanillaPanel.add(vanillaField)
vanillaPanel.add(vanillaButton)

val submodPanel = JPanel()
val submodLabel = JLabel("Submod LOTR lang path:")
submodLabel.preferredSize = Dimension(140, submodLabel.preferredSize.height)
val submodField = JTextField(24)
val submodButton = JButton("Select path")
submodButton.addActionListener { selectPath(submodField) }
submodPanel.add(submodLabel)
submodPanel.add(submodField)
submodPanel.add(submodButton)

val checkboxPanel = JPanel()
val processCheckbox = JCheckBox("Vanilla LOTR translation is a priority", true)
checkboxPanel.add(processCheckbox)

val processPanel = JPanel()
val processButton = JButton("Process")
processButton.addActionListener {
process(inputField, outputField)
process(vanillaField, submodField, processCheckbox.isSelected)
}
processPanel.add(processButton)

contentPanel.add(inputPanel)
contentPanel.add(outputPanel)
contentPanel.add(vanillaPanel)
contentPanel.add(submodPanel)
contentPanel.add(checkboxPanel)
contentPanel.add(processPanel)

setLocationRelativeTo(null)
Expand Down

0 comments on commit 3d00a35

Please sign in to comment.